diff --git a/ClearScript.NoV8.sln.DotSettings b/ClearScript.NoV8.sln.DotSettings index 471fe0226..69cbbc79c 100644 --- a/ClearScript.NoV8.sln.DotSettings +++ b/ClearScript.NoV8.sln.DotSettings @@ -1,7 +1,7 @@  - CSharp80 + CSharp90 True - ExplicitlyExcluded + True False SUGGESTION DO_NOT_SHOW @@ -43,6 +43,11 @@ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static readonly fields (private)"><ElementKinds><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Private" Description="Constant fields (private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Constant fields (not private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"><ElementKinds><Kind Name="FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> False @@ -50,6 +55,7 @@ True True True + True True True True @@ -128,9 +134,11 @@ True True True + True True True True True True + True True \ No newline at end of file diff --git a/ClearScript.sln b/ClearScript.sln index 254f2e4db..5984307ef 100644 --- a/ClearScript.sln +++ b/ClearScript.sln @@ -174,125 +174,479 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|arm64 = Debug|arm64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|arm64 = Release|arm64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Debug|arm64.ActiveCfg = Debug|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Debug|arm64.Build.0 = Debug|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Debug|x64.ActiveCfg = Debug|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Debug|x64.Build.0 = Debug|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Debug|x86.ActiveCfg = Debug|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Debug|x86.Build.0 = Debug|Any CPU {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Release|Any CPU.ActiveCfg = Release|Any CPU {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Release|Any CPU.Build.0 = Release|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Release|arm64.ActiveCfg = Release|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Release|arm64.Build.0 = Release|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Release|x64.ActiveCfg = Release|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Release|x64.Build.0 = Release|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Release|x86.ActiveCfg = Release|Any CPU + {EDC7144E-FDA9-4CC7-B2CD-B5EBFD610A7D}.Release|x86.Build.0 = Release|Any CPU {28980C99-77E7-4B62-8484-AF06C5745B8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {28980C99-77E7-4B62-8484-AF06C5745B8C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Debug|arm64.ActiveCfg = Debug|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Debug|arm64.Build.0 = Debug|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Debug|x64.ActiveCfg = Debug|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Debug|x64.Build.0 = Debug|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Debug|x86.ActiveCfg = Debug|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Debug|x86.Build.0 = Debug|Any CPU {28980C99-77E7-4B62-8484-AF06C5745B8C}.Release|Any CPU.ActiveCfg = Release|Any CPU {28980C99-77E7-4B62-8484-AF06C5745B8C}.Release|Any CPU.Build.0 = Release|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Release|arm64.ActiveCfg = Release|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Release|arm64.Build.0 = Release|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Release|x64.ActiveCfg = Release|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Release|x64.Build.0 = Release|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Release|x86.ActiveCfg = Release|Any CPU + {28980C99-77E7-4B62-8484-AF06C5745B8C}.Release|x86.Build.0 = Release|Any CPU {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Debug|arm64.ActiveCfg = Debug|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Debug|arm64.Build.0 = Debug|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Debug|x64.ActiveCfg = Debug|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Debug|x64.Build.0 = Debug|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Debug|x86.ActiveCfg = Debug|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Debug|x86.Build.0 = Debug|Any CPU {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Release|Any CPU.ActiveCfg = Release|Any CPU {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Release|Any CPU.Build.0 = Release|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Release|arm64.ActiveCfg = Release|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Release|arm64.Build.0 = Release|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Release|x64.ActiveCfg = Release|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Release|x64.Build.0 = Release|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Release|x86.ActiveCfg = Release|Any CPU + {7922A2F5-3585-4A60-98FB-1BDB4D5ECD29}.Release|x86.Build.0 = Release|Any CPU {497012BC-959C-43A0-90A6-156A35DF2F43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {497012BC-959C-43A0-90A6-156A35DF2F43}.Debug|Any CPU.Build.0 = Debug|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Debug|arm64.ActiveCfg = Debug|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Debug|arm64.Build.0 = Debug|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Debug|x64.ActiveCfg = Debug|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Debug|x64.Build.0 = Debug|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Debug|x86.ActiveCfg = Debug|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Debug|x86.Build.0 = Debug|Any CPU {497012BC-959C-43A0-90A6-156A35DF2F43}.Release|Any CPU.ActiveCfg = Release|Any CPU {497012BC-959C-43A0-90A6-156A35DF2F43}.Release|Any CPU.Build.0 = Release|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Release|arm64.ActiveCfg = Release|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Release|arm64.Build.0 = Release|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Release|x64.ActiveCfg = Release|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Release|x64.Build.0 = Release|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Release|x86.ActiveCfg = Release|Any CPU + {497012BC-959C-43A0-90A6-156A35DF2F43}.Release|x86.Build.0 = Release|Any CPU {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Debug|arm64.ActiveCfg = Debug|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Debug|arm64.Build.0 = Debug|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Debug|x64.Build.0 = Debug|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Debug|x86.Build.0 = Debug|Any CPU {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Release|Any CPU.ActiveCfg = Release|Any CPU {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Release|Any CPU.Build.0 = Release|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Release|arm64.ActiveCfg = Release|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Release|arm64.Build.0 = Release|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Release|x64.ActiveCfg = Release|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Release|x64.Build.0 = Release|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Release|x86.ActiveCfg = Release|Any CPU + {269669D3-78D8-4AF3-A2AF-08D3446BD6BC}.Release|x86.Build.0 = Release|Any CPU {925DD842-4585-4D44-80BB-78E1FB7E9438}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {925DD842-4585-4D44-80BB-78E1FB7E9438}.Debug|Any CPU.Build.0 = Debug|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Debug|arm64.ActiveCfg = Debug|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Debug|arm64.Build.0 = Debug|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Debug|x64.ActiveCfg = Debug|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Debug|x64.Build.0 = Debug|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Debug|x86.ActiveCfg = Debug|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Debug|x86.Build.0 = Debug|Any CPU {925DD842-4585-4D44-80BB-78E1FB7E9438}.Release|Any CPU.ActiveCfg = Release|Any CPU {925DD842-4585-4D44-80BB-78E1FB7E9438}.Release|Any CPU.Build.0 = Release|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Release|arm64.ActiveCfg = Release|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Release|arm64.Build.0 = Release|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Release|x64.ActiveCfg = Release|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Release|x64.Build.0 = Release|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Release|x86.ActiveCfg = Release|Any CPU + {925DD842-4585-4D44-80BB-78E1FB7E9438}.Release|x86.Build.0 = Release|Any CPU {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Debug|Any CPU.ActiveCfg = Debug|Win32 {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Debug|Any CPU.Build.0 = Debug|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Debug|arm64.ActiveCfg = Debug|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Debug|arm64.Build.0 = Debug|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Debug|x64.ActiveCfg = Debug|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Debug|x64.Build.0 = Debug|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Debug|x86.ActiveCfg = Debug|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Debug|x86.Build.0 = Debug|Win32 {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Release|Any CPU.ActiveCfg = Release|Win32 {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Release|Any CPU.Build.0 = Release|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Release|arm64.ActiveCfg = Release|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Release|arm64.Build.0 = Release|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Release|x64.ActiveCfg = Release|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Release|x64.Build.0 = Release|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Release|x86.ActiveCfg = Release|Win32 + {2D63EA35-BA9C-4E77-B5A4-4938DBBFEFA6}.Release|x86.Build.0 = Release|Win32 {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Debug|Any CPU.ActiveCfg = Debug|x64 {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Debug|Any CPU.Build.0 = Debug|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Debug|arm64.ActiveCfg = Debug|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Debug|arm64.Build.0 = Debug|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Debug|x64.ActiveCfg = Debug|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Debug|x64.Build.0 = Debug|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Debug|x86.ActiveCfg = Debug|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Debug|x86.Build.0 = Debug|x64 {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Release|Any CPU.ActiveCfg = Release|x64 {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Release|Any CPU.Build.0 = Release|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Release|arm64.ActiveCfg = Release|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Release|arm64.Build.0 = Release|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Release|x64.ActiveCfg = Release|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Release|x64.Build.0 = Release|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Release|x86.ActiveCfg = Release|x64 + {CDCF4EEA-1CA4-412E-8C77-78893A67A577}.Release|x86.Build.0 = Release|x64 {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Debug|arm64.ActiveCfg = Debug|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Debug|arm64.Build.0 = Debug|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Debug|x64.ActiveCfg = Debug|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Debug|x64.Build.0 = Debug|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Debug|x86.ActiveCfg = Debug|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Debug|x86.Build.0 = Debug|Any CPU {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Release|Any CPU.ActiveCfg = Release|Any CPU {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Release|Any CPU.Build.0 = Release|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Release|arm64.ActiveCfg = Release|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Release|arm64.Build.0 = Release|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Release|x64.ActiveCfg = Release|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Release|x64.Build.0 = Release|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Release|x86.ActiveCfg = Release|Any CPU + {F1022C3F-AFBC-4F23-B4DE-C6C0742AEFF2}.Release|x86.Build.0 = Release|Any CPU {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Debug|arm64.ActiveCfg = Debug|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Debug|arm64.Build.0 = Debug|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Debug|x64.ActiveCfg = Debug|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Debug|x64.Build.0 = Debug|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Debug|x86.ActiveCfg = Debug|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Debug|x86.Build.0 = Debug|Any CPU {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Release|Any CPU.ActiveCfg = Release|Any CPU {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Release|Any CPU.Build.0 = Release|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Release|arm64.ActiveCfg = Release|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Release|arm64.Build.0 = Release|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Release|x64.ActiveCfg = Release|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Release|x64.Build.0 = Release|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Release|x86.ActiveCfg = Release|Any CPU + {BC560FF8-AB7A-4DA9-A1FD-99221447D370}.Release|x86.Build.0 = Release|Any CPU {59CC81A3-3D97-469A-9C8B-533F920085F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {59CC81A3-3D97-469A-9C8B-533F920085F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Debug|arm64.ActiveCfg = Debug|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Debug|arm64.Build.0 = Debug|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Debug|x64.ActiveCfg = Debug|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Debug|x64.Build.0 = Debug|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Debug|x86.ActiveCfg = Debug|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Debug|x86.Build.0 = Debug|Any CPU {59CC81A3-3D97-469A-9C8B-533F920085F1}.Release|Any CPU.ActiveCfg = Release|Any CPU {59CC81A3-3D97-469A-9C8B-533F920085F1}.Release|Any CPU.Build.0 = Release|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Release|arm64.ActiveCfg = Release|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Release|arm64.Build.0 = Release|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Release|x64.ActiveCfg = Release|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Release|x64.Build.0 = Release|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Release|x86.ActiveCfg = Release|Any CPU + {59CC81A3-3D97-469A-9C8B-533F920085F1}.Release|x86.Build.0 = Release|Any CPU {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Debug|arm64.ActiveCfg = Debug|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Debug|arm64.Build.0 = Debug|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Debug|x64.ActiveCfg = Debug|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Debug|x64.Build.0 = Debug|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Debug|x86.ActiveCfg = Debug|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Debug|x86.Build.0 = Debug|Any CPU {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Release|Any CPU.ActiveCfg = Release|Any CPU {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Release|Any CPU.Build.0 = Release|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Release|arm64.ActiveCfg = Release|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Release|arm64.Build.0 = Release|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Release|x64.ActiveCfg = Release|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Release|x64.Build.0 = Release|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Release|x86.ActiveCfg = Release|Any CPU + {7B3EA81F-F60B-46DB-B3F0-22F68E8A8FAD}.Release|x86.Build.0 = Release|Any CPU {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Debug|arm64.ActiveCfg = Debug|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Debug|arm64.Build.0 = Debug|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Debug|x64.ActiveCfg = Debug|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Debug|x64.Build.0 = Debug|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Debug|x86.ActiveCfg = Debug|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Debug|x86.Build.0 = Debug|Any CPU {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Release|Any CPU.ActiveCfg = Release|Any CPU {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Release|Any CPU.Build.0 = Release|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Release|arm64.ActiveCfg = Release|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Release|arm64.Build.0 = Release|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Release|x64.ActiveCfg = Release|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Release|x64.Build.0 = Release|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Release|x86.ActiveCfg = Release|Any CPU + {6576FFFD-BA73-4123-8E4B-8589E5163C04}.Release|x86.Build.0 = Release|Any CPU {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Debug|arm64.ActiveCfg = Debug|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Debug|arm64.Build.0 = Debug|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Debug|x64.ActiveCfg = Debug|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Debug|x64.Build.0 = Debug|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Debug|x86.ActiveCfg = Debug|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Debug|x86.Build.0 = Debug|Any CPU {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Release|Any CPU.Build.0 = Release|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Release|arm64.ActiveCfg = Release|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Release|arm64.Build.0 = Release|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Release|x64.ActiveCfg = Release|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Release|x64.Build.0 = Release|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Release|x86.ActiveCfg = Release|Any CPU + {C8AE52BB-BFEE-4816-A9FE-8653CEE36C96}.Release|x86.Build.0 = Release|Any CPU {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Debug|arm64.ActiveCfg = Debug|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Debug|arm64.Build.0 = Debug|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Debug|x64.ActiveCfg = Debug|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Debug|x64.Build.0 = Debug|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Debug|x86.ActiveCfg = Debug|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Debug|x86.Build.0 = Debug|Any CPU {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Release|Any CPU.ActiveCfg = Release|Any CPU {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Release|Any CPU.Build.0 = Release|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Release|arm64.ActiveCfg = Release|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Release|arm64.Build.0 = Release|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Release|x64.ActiveCfg = Release|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Release|x64.Build.0 = Release|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Release|x86.ActiveCfg = Release|Any CPU + {FDFA67F7-AEE6-407A-BF94-ACAD3D735CAB}.Release|x86.Build.0 = Release|Any CPU {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Debug|arm64.ActiveCfg = Debug|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Debug|arm64.Build.0 = Debug|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Debug|x64.ActiveCfg = Debug|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Debug|x64.Build.0 = Debug|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Debug|x86.ActiveCfg = Debug|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Debug|x86.Build.0 = Debug|Any CPU {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Release|Any CPU.ActiveCfg = Release|Any CPU {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Release|Any CPU.Build.0 = Release|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Release|arm64.ActiveCfg = Release|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Release|arm64.Build.0 = Release|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Release|x64.ActiveCfg = Release|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Release|x64.Build.0 = Release|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Release|x86.ActiveCfg = Release|Any CPU + {3CD8AB65-BA34-4BB9-862F-D31CE861560F}.Release|x86.Build.0 = Release|Any CPU {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Debug|arm64.ActiveCfg = Debug|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Debug|arm64.Build.0 = Debug|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Debug|x64.ActiveCfg = Debug|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Debug|x64.Build.0 = Debug|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Debug|x86.ActiveCfg = Debug|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Debug|x86.Build.0 = Debug|Any CPU {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Release|Any CPU.ActiveCfg = Release|Any CPU {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Release|Any CPU.Build.0 = Release|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Release|arm64.ActiveCfg = Release|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Release|arm64.Build.0 = Release|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Release|x64.ActiveCfg = Release|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Release|x64.Build.0 = Release|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Release|x86.ActiveCfg = Release|Any CPU + {052E036D-6D60-4FCA-AA8E-4CF56BC2058D}.Release|x86.Build.0 = Release|Any CPU {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Debug|Any CPU.ActiveCfg = Debug|arm64 {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Debug|Any CPU.Build.0 = Debug|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Debug|arm64.ActiveCfg = Debug|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Debug|arm64.Build.0 = Debug|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Debug|x64.ActiveCfg = Debug|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Debug|x64.Build.0 = Debug|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Debug|x86.ActiveCfg = Debug|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Debug|x86.Build.0 = Debug|arm64 {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Release|Any CPU.ActiveCfg = Release|arm64 {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Release|Any CPU.Build.0 = Release|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Release|arm64.ActiveCfg = Release|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Release|arm64.Build.0 = Release|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Release|x64.ActiveCfg = Release|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Release|x64.Build.0 = Release|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Release|x86.ActiveCfg = Release|arm64 + {725B6D7A-ECC7-4A28-AF52-B1CB22C37134}.Release|x86.Build.0 = Release|arm64 {D3391831-65CE-4C1E-A21B-01A283F3E193}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D3391831-65CE-4C1E-A21B-01A283F3E193}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Debug|arm64.ActiveCfg = Debug|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Debug|arm64.Build.0 = Debug|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Debug|x64.ActiveCfg = Debug|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Debug|x64.Build.0 = Debug|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Debug|x86.ActiveCfg = Debug|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Debug|x86.Build.0 = Debug|Any CPU {D3391831-65CE-4C1E-A21B-01A283F3E193}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3391831-65CE-4C1E-A21B-01A283F3E193}.Release|Any CPU.Build.0 = Release|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Release|arm64.ActiveCfg = Release|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Release|arm64.Build.0 = Release|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Release|x64.ActiveCfg = Release|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Release|x64.Build.0 = Release|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Release|x86.ActiveCfg = Release|Any CPU + {D3391831-65CE-4C1E-A21B-01A283F3E193}.Release|x86.Build.0 = Release|Any CPU {CF1FD52F-A933-48D9-92A4-A39565896A42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CF1FD52F-A933-48D9-92A4-A39565896A42}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Debug|arm64.ActiveCfg = Debug|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Debug|arm64.Build.0 = Debug|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Debug|x64.ActiveCfg = Debug|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Debug|x64.Build.0 = Debug|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Debug|x86.ActiveCfg = Debug|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Debug|x86.Build.0 = Debug|Any CPU {CF1FD52F-A933-48D9-92A4-A39565896A42}.Release|Any CPU.ActiveCfg = Release|Any CPU {CF1FD52F-A933-48D9-92A4-A39565896A42}.Release|Any CPU.Build.0 = Release|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Release|arm64.ActiveCfg = Release|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Release|arm64.Build.0 = Release|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Release|x64.ActiveCfg = Release|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Release|x64.Build.0 = Release|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Release|x86.ActiveCfg = Release|Any CPU + {CF1FD52F-A933-48D9-92A4-A39565896A42}.Release|x86.Build.0 = Release|Any CPU {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Debug|arm64.ActiveCfg = Debug|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Debug|arm64.Build.0 = Debug|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Debug|x64.ActiveCfg = Debug|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Debug|x64.Build.0 = Debug|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Debug|x86.ActiveCfg = Debug|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Debug|x86.Build.0 = Debug|Any CPU {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Release|Any CPU.ActiveCfg = Release|Any CPU {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Release|Any CPU.Build.0 = Release|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Release|arm64.ActiveCfg = Release|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Release|arm64.Build.0 = Release|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Release|x64.ActiveCfg = Release|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Release|x64.Build.0 = Release|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Release|x86.ActiveCfg = Release|Any CPU + {B9C99091-E616-4DC2-A711-4DCDAC602E38}.Release|x86.Build.0 = Release|Any CPU {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Debug|arm64.ActiveCfg = Debug|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Debug|arm64.Build.0 = Debug|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Debug|x64.ActiveCfg = Debug|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Debug|x64.Build.0 = Debug|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Debug|x86.ActiveCfg = Debug|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Debug|x86.Build.0 = Debug|Any CPU {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Release|Any CPU.ActiveCfg = Release|Any CPU {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Release|Any CPU.Build.0 = Release|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Release|arm64.ActiveCfg = Release|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Release|arm64.Build.0 = Release|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Release|x64.ActiveCfg = Release|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Release|x64.Build.0 = Release|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Release|x86.ActiveCfg = Release|Any CPU + {5FF9CB8B-BC95-44AB-B254-CEB4ADF4A53A}.Release|x86.Build.0 = Release|Any CPU {D757A0DB-AEBC-4D77-A187-A701B158D588}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D757A0DB-AEBC-4D77-A187-A701B158D588}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Debug|arm64.ActiveCfg = Debug|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Debug|arm64.Build.0 = Debug|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Debug|x64.ActiveCfg = Debug|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Debug|x64.Build.0 = Debug|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Debug|x86.ActiveCfg = Debug|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Debug|x86.Build.0 = Debug|Any CPU {D757A0DB-AEBC-4D77-A187-A701B158D588}.Release|Any CPU.ActiveCfg = Release|Any CPU {D757A0DB-AEBC-4D77-A187-A701B158D588}.Release|Any CPU.Build.0 = Release|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Release|arm64.ActiveCfg = Release|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Release|arm64.Build.0 = Release|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Release|x64.ActiveCfg = Release|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Release|x64.Build.0 = Release|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Release|x86.ActiveCfg = Release|Any CPU + {D757A0DB-AEBC-4D77-A187-A701B158D588}.Release|x86.Build.0 = Release|Any CPU {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Debug|arm64.ActiveCfg = Debug|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Debug|arm64.Build.0 = Debug|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Debug|x64.ActiveCfg = Debug|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Debug|x64.Build.0 = Debug|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Debug|x86.ActiveCfg = Debug|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Debug|x86.Build.0 = Debug|Any CPU {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Release|Any CPU.ActiveCfg = Release|Any CPU {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Release|Any CPU.Build.0 = Release|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Release|arm64.ActiveCfg = Release|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Release|arm64.Build.0 = Release|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Release|x64.ActiveCfg = Release|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Release|x64.Build.0 = Release|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Release|x86.ActiveCfg = Release|Any CPU + {0DEC74E5-FF8A-4B61-B847-875BAD0AE781}.Release|x86.Build.0 = Release|Any CPU {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Debug|arm64.ActiveCfg = Debug|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Debug|arm64.Build.0 = Debug|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Debug|x64.ActiveCfg = Debug|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Debug|x64.Build.0 = Debug|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Debug|x86.ActiveCfg = Debug|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Debug|x86.Build.0 = Debug|Any CPU {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Release|Any CPU.ActiveCfg = Release|Any CPU {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Release|Any CPU.Build.0 = Release|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Release|arm64.ActiveCfg = Release|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Release|arm64.Build.0 = Release|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Release|x64.ActiveCfg = Release|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Release|x64.Build.0 = Release|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Release|x86.ActiveCfg = Release|Any CPU + {6F6B59D0-6538-4D02-91D2-07D24DAFE39A}.Release|x86.Build.0 = Release|Any CPU {BF28C9F2-2935-4FDE-B812-977D601F9208}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF28C9F2-2935-4FDE-B812-977D601F9208}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Debug|arm64.ActiveCfg = Debug|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Debug|arm64.Build.0 = Debug|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Debug|x64.ActiveCfg = Debug|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Debug|x64.Build.0 = Debug|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Debug|x86.ActiveCfg = Debug|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Debug|x86.Build.0 = Debug|Any CPU {BF28C9F2-2935-4FDE-B812-977D601F9208}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF28C9F2-2935-4FDE-B812-977D601F9208}.Release|Any CPU.Build.0 = Release|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Release|arm64.ActiveCfg = Release|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Release|arm64.Build.0 = Release|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Release|x64.ActiveCfg = Release|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Release|x64.Build.0 = Release|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Release|x86.ActiveCfg = Release|Any CPU + {BF28C9F2-2935-4FDE-B812-977D601F9208}.Release|x86.Build.0 = Release|Any CPU {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Debug|arm64.ActiveCfg = Debug|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Debug|arm64.Build.0 = Debug|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Debug|x64.ActiveCfg = Debug|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Debug|x64.Build.0 = Debug|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Debug|x86.ActiveCfg = Debug|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Debug|x86.Build.0 = Debug|Any CPU {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Release|Any CPU.ActiveCfg = Release|Any CPU {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Release|Any CPU.Build.0 = Release|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Release|arm64.ActiveCfg = Release|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Release|arm64.Build.0 = Release|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Release|x64.ActiveCfg = Release|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Release|x64.Build.0 = Release|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Release|x86.ActiveCfg = Release|Any CPU + {EF6090B9-7349-4868-9C43-D7D3F048C54F}.Release|x86.Build.0 = Release|Any CPU {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Debug|arm64.ActiveCfg = Debug|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Debug|arm64.Build.0 = Debug|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Debug|x64.ActiveCfg = Debug|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Debug|x64.Build.0 = Debug|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Debug|x86.ActiveCfg = Debug|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Debug|x86.Build.0 = Debug|Any CPU {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Release|Any CPU.ActiveCfg = Release|Any CPU {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Release|Any CPU.Build.0 = Release|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Release|arm64.ActiveCfg = Release|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Release|arm64.Build.0 = Release|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Release|x64.ActiveCfg = Release|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Release|x64.Build.0 = Release|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Release|x86.ActiveCfg = Release|Any CPU + {C0E7BCAD-B4B3-4291-A87A-384D5F99C413}.Release|x86.Build.0 = Release|Any CPU {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Debug|arm64.ActiveCfg = Debug|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Debug|arm64.Build.0 = Debug|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Debug|x64.ActiveCfg = Debug|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Debug|x64.Build.0 = Debug|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Debug|x86.ActiveCfg = Debug|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Debug|x86.Build.0 = Debug|Any CPU {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Release|Any CPU.ActiveCfg = Release|Any CPU {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Release|Any CPU.Build.0 = Release|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Release|arm64.ActiveCfg = Release|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Release|arm64.Build.0 = Release|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Release|x64.ActiveCfg = Release|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Release|x64.Build.0 = Release|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Release|x86.ActiveCfg = Release|Any CPU + {47FC5CB5-A6F2-4FEE-99F8-A758D3A7373C}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ClearScript.sln.DotSettings b/ClearScript.sln.DotSettings index 471fe0226..69cbbc79c 100644 --- a/ClearScript.sln.DotSettings +++ b/ClearScript.sln.DotSettings @@ -1,7 +1,7 @@  - CSharp80 + CSharp90 True - ExplicitlyExcluded + True False SUGGESTION DO_NOT_SHOW @@ -43,6 +43,11 @@ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static readonly fields (private)"><ElementKinds><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Private" Description="Constant fields (private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Constant fields (not private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"><ElementKinds><Kind Name="FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> False @@ -50,6 +55,7 @@ True True True + True True True True @@ -128,9 +134,11 @@ True True True + True True True True True True + True True \ No newline at end of file diff --git a/ClearScript/BindSignature.cs b/ClearScript/BindSignature.cs index c1ebe9de2..706904d51 100644 --- a/ClearScript/BindSignature.cs +++ b/ClearScript/BindSignature.cs @@ -67,7 +67,7 @@ public override int GetHashCode() public bool Equals(BindSignature that) { - if (that == null) + if (that is null) { return false; } @@ -149,7 +149,7 @@ public TargetInfo(HostTarget target) kind = TargetKind.Static; targetType = target.Type; } - else if (target.InvokeTarget == null) + else if (target.InvokeTarget is null) { kind = TargetKind.Null; targetType = target.Type; @@ -194,7 +194,7 @@ public override int GetHashCode() public bool Equals(TargetInfo that) { - return (that != null) && (kind == that.kind) && (targetType == that.targetType) && (instanceType == that.instanceType); + return (that is not null) && (kind == that.kind) && (targetType == that.targetType) && (instanceType == that.instanceType); } #endregion @@ -224,7 +224,7 @@ private sealed class ArgInfo : IEquatable public ArgInfo(object arg) { - if (arg == null) + if (arg is null) { kind = ArgKind.Null; return; @@ -286,7 +286,7 @@ public ArgInfo(object arg) return; } - Debug.Assert(!(arg is HostTarget)); + Debug.Assert(arg is not HostTarget); kind = arg.IsZero() ? ArgKind.Zero : ArgKind.ByValue; type = arg.GetType(); } @@ -317,7 +317,7 @@ public override int GetHashCode() public bool Equals(ArgInfo that) { - return (that != null) && (kind == that.kind) && (type == that.type); + return (that is not null) && (kind == that.kind) && (type == that.type); } #endregion @@ -327,7 +327,7 @@ public bool Equals(ArgInfo that) #region Nested type: HashAccumulator - private struct HashAccumulator + private ref struct HashAccumulator { public int HashCode { get; private set; } diff --git a/ClearScript/CanonicalRefTable.cs b/ClearScript/CanonicalRefTable.cs index 287763919..bf57754ab 100644 --- a/ClearScript/CanonicalRefTable.cs +++ b/ClearScript/CanonicalRefTable.cs @@ -10,14 +10,14 @@ namespace Microsoft.ClearScript { internal static class CanonicalRefTable { - private static readonly Dictionary table = new Dictionary(); + private static readonly Dictionary table = new(); public static object GetCanonicalRef(object obj) { if (obj is ValueType) { var map = GetMap(obj); - if (map != null) + if (map is not null) { obj = map.GetRef(obj); } @@ -44,7 +44,7 @@ private static ICanonicalRefMap GetMap(object obj) #endif type.GetOrLoadCustomAttributes(null, false).Any()) { - map = (ICanonicalRefMap)typeof(CanonicalRefMap<>).MakeGenericType(type).CreateInstance(); + map = (ICanonicalRefMap)Activator.CreateInstance(typeof(CanonicalRefMap<>).MakeGenericType(type)); } table.Add(type, map); @@ -81,9 +81,9 @@ private abstract class CanonicalRefMapBase : ICanonicalRefMap #region Nested type: CanonicalRefMap - private sealed class CanonicalRefMap : CanonicalRefMapBase + private sealed class CanonicalRefMap : CanonicalRefMapBase where T : struct { - private readonly Dictionary map = new Dictionary(); + private readonly Dictionary> map = new(); private DateTime lastCompactionTime = DateTime.MinValue; private object GetRefInternal(object obj) @@ -93,17 +93,16 @@ private object GetRefInternal(object obj) if (map.TryGetValue(value, out var weakRef)) { - result = weakRef.Target; - if (result == null) + if (!weakRef.TryGetTarget(out result)) { result = obj; - weakRef.Target = result; + weakRef.SetTarget(result); } } else { result = obj; - map.Add(value, new WeakReference(result)); + map.Add(value, new WeakReference(result)); } return result; @@ -116,7 +115,7 @@ private void CompactIfNecessary() var now = DateTime.UtcNow; if ((lastCompactionTime + CompactionInterval) <= now) { - map.Where(pair => !pair.Value.IsAlive).ToList().ForEach(pair => map.Remove(pair.Key)); + map.Where(pair => !pair.Value.TryGetTarget(out _)).ToList().ForEach(pair => map.Remove(pair.Key)); lastCompactionTime = now; } } @@ -139,4 +138,4 @@ public override object GetRef(object obj) #endregion } -} \ No newline at end of file +} diff --git a/ClearScript/CustomAttributeCache.cs b/ClearScript/CustomAttributeCache.cs index 22d6eacbe..8496be8ef 100644 --- a/ClearScript/CustomAttributeCache.cs +++ b/ClearScript/CustomAttributeCache.cs @@ -11,7 +11,7 @@ namespace Microsoft.ClearScript { internal sealed class CustomAttributeCache { - private readonly ConditionalWeakTable table = new ConditionalWeakTable(); + private readonly ConditionalWeakTable table = new(); public T[] GetOrLoad(CustomAttributeLoader loader, ICustomAttributeProvider resource, bool inherit) where T : Attribute { @@ -63,7 +63,7 @@ private bool GetIsBypassInternal(ICustomAttributeProvider resource) } var parent = GetParent(resource); - if (parent != null) + if (parent is not null) { return GetIsBypass(parent); } @@ -102,7 +102,7 @@ private static ICustomAttributeProvider GetParent(ICustomAttributeProvider resou private sealed class Entry { - private readonly Dictionary map = new Dictionary(); + private readonly Dictionary map = new(); public bool? IsBypass { get; set; } diff --git a/ClearScript/CustomAttributeLoader.cs b/ClearScript/CustomAttributeLoader.cs index 0b2330220..4ee389378 100644 --- a/ClearScript/CustomAttributeLoader.cs +++ b/ClearScript/CustomAttributeLoader.cs @@ -12,7 +12,7 @@ namespace Microsoft.ClearScript /// public class CustomAttributeLoader { - private readonly CustomAttributeCache cache = new CustomAttributeCache(); + private readonly CustomAttributeCache cache = new(); // ReSharper disable EmptyConstructor @@ -27,7 +27,7 @@ public CustomAttributeLoader() /// /// Gets the default custom attribute loader. /// - public static CustomAttributeLoader Default { get; } = new CustomAttributeLoader(); + public static CustomAttributeLoader Default { get; } = new(); // ReSharper restore EmptyConstructor diff --git a/ClearScript/DefaultDocumentLoader.cs b/ClearScript/DefaultDocumentLoader.cs index fbedfab48..06df29119 100644 --- a/ClearScript/DefaultDocumentLoader.cs +++ b/ClearScript/DefaultDocumentLoader.cs @@ -27,7 +27,7 @@ public class DefaultDocumentLoader : DocumentLoader, DocumentLoader.IStatistics ".." + Path.AltDirectorySeparatorChar, }; - private readonly List cache = new List(); + private readonly List cache = new(); private long fileCheckCount; private long webCheckCount; @@ -65,10 +65,10 @@ public DefaultDocumentLoader() foreach (var testUri in testUris) { var flag = testUri.IsFile ? DocumentAccessFlags.EnableFileLoading : DocumentAccessFlags.EnableWebLoading; - if (settings.AccessFlags.HasFlag(flag)) + if (settings.AccessFlags.HasAllFlags(flag)) { var document = GetCachedDocument(testUri); - if (document != null) + if (document is not null) { return (document, null); } @@ -96,7 +96,7 @@ private static IEnumerable GetRawUris(DocumentSettings settings, DocumentIn if (sourceInfo.HasValue && SpecifierMayBeRelative(settings, specifier)) { baseUri = GetBaseUri(sourceInfo.Value); - if ((baseUri != null) && Uri.TryCreate(baseUri, specifier, out uri)) + if ((baseUri is not null) && Uri.TryCreate(baseUri, specifier, out uri)) { yield return uri; } @@ -114,12 +114,12 @@ private static IEnumerable GetRawUris(DocumentSettings settings, DocumentIn } } - if (MiscHelpers.Try(out var path, () => Path.Combine(Directory.GetCurrentDirectory(), specifier)) && Uri.TryCreate(path, UriKind.Absolute, out uri)) + if (MiscHelpers.Try(out var path, static specifier => Path.Combine(Directory.GetCurrentDirectory(), specifier), specifier) && Uri.TryCreate(path, UriKind.Absolute, out uri)) { yield return uri; } - if (MiscHelpers.Try(out path, () => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, specifier)) && Uri.TryCreate(path, UriKind.Absolute, out uri)) + if (MiscHelpers.Try(out path, static specifier => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, specifier), specifier) && Uri.TryCreate(path, UriKind.Absolute, out uri)) { yield return uri; } @@ -127,7 +127,7 @@ private static IEnumerable GetRawUris(DocumentSettings settings, DocumentIn using (var process = Process.GetCurrentProcess()) { var module = process.MainModule; - if ((module != null) && Uri.TryCreate(module.FileName, UriKind.Absolute, out baseUri) && Uri.TryCreate(baseUri, specifier, out uri)) + if ((module is not null) && Uri.TryCreate(module.FileName, UriKind.Absolute, out baseUri) && Uri.TryCreate(baseUri, specifier, out uri)) { yield return uri; } @@ -163,7 +163,7 @@ private static IEnumerable GetCompatibleExtensions(DocumentInfo? sourceI if (sourceInfo.HasValue) { - sourceExtension = Path.GetExtension((sourceInfo.Value.Uri != null) ? new UriBuilder(sourceInfo.Value.Uri).Path : sourceInfo.Value.Name); + sourceExtension = Path.GetExtension((sourceInfo.Value.Uri is not null) ? new UriBuilder(sourceInfo.Value.Uri).Path : sourceInfo.Value.Name); if (!string.IsNullOrEmpty(sourceExtension)) { yield return sourceExtension; @@ -182,14 +182,14 @@ private static IEnumerable GetCompatibleExtensions(DocumentInfo? sourceI private static bool SpecifierMayBeRelative(DocumentSettings settings, string specifier) { - return !settings.AccessFlags.HasFlag(DocumentAccessFlags.EnforceRelativePrefix) || relativePrefixes.Any(specifier.StartsWith); + return !settings.AccessFlags.HasAllFlags(DocumentAccessFlags.EnforceRelativePrefix) || relativePrefixes.Any(specifier.StartsWith); } private static Uri GetBaseUri(DocumentInfo sourceInfo) { var sourceUri = sourceInfo.Uri; - if ((sourceUri == null) && !Uri.TryCreate(sourceInfo.Name, UriKind.RelativeOrAbsolute, out sourceUri)) + if ((sourceUri is null) && !Uri.TryCreate(sourceInfo.Name, UriKind.RelativeOrAbsolute, out sourceUri)) { return null; } @@ -216,8 +216,8 @@ private static bool TryCombineSearchUri(Uri searchUri, string specifier, out Uri private async Task IsCandidateUriAsync(DocumentSettings settings, Uri uri) { return uri.IsFile ? - settings.AccessFlags.HasFlag(DocumentAccessFlags.EnableFileLoading) && await FileDocumentExistsAsync(uri.LocalPath).ConfigureAwait(false) : - settings.AccessFlags.HasFlag(DocumentAccessFlags.EnableWebLoading) && await WebDocumentExistsAsync(uri).ConfigureAwait(false); + settings.AccessFlags.HasAllFlags(DocumentAccessFlags.EnableFileLoading) && await FileDocumentExistsAsync(uri.LocalPath).ConfigureAwait(false) : + settings.AccessFlags.HasAllFlags(DocumentAccessFlags.EnableWebLoading) && await WebDocumentExistsAsync(uri).ConfigureAwait(false); } private Task FileDocumentExistsAsync(string path) @@ -252,21 +252,21 @@ private async Task LoadDocumentAsync(DocumentSettings settings, Uri ur { if (uri.IsFile) { - if (!settings.AccessFlags.HasFlag(DocumentAccessFlags.EnableFileLoading)) + if (!settings.AccessFlags.HasAllFlags(DocumentAccessFlags.EnableFileLoading)) { throw new UnauthorizedAccessException("The script engine is not configured for loading documents from the file system"); } } else { - if (!settings.AccessFlags.HasFlag(DocumentAccessFlags.EnableWebLoading)) + if (!settings.AccessFlags.HasAllFlags(DocumentAccessFlags.EnableWebLoading)) { throw new UnauthorizedAccessException("The script engine is not configured for downloading documents from the Web"); } } var cachedDocument = GetCachedDocument(uri); - if (cachedDocument != null) + if (cachedDocument is not null) { return cachedDocument; } @@ -290,7 +290,7 @@ private async Task LoadDocumentAsync(DocumentSettings settings, Uri ur var documentInfo = new DocumentInfo(uri) { Category = category, ContextCallback = contextCallback }; - if (!settings.AccessFlags.HasFlag(DocumentAccessFlags.UseAsyncLoadCallback)) + if (!settings.AccessFlags.HasAllFlags(DocumentAccessFlags.UseAsyncLoadCallback)) { var callback = settings.LoadCallback; callback?.Invoke(ref documentInfo); @@ -298,7 +298,7 @@ private async Task LoadDocumentAsync(DocumentSettings settings, Uri ur else { var callback = settings.AsyncLoadCallback; - if (callback != null) + if (callback is not null) { var documentInfoRef = ValueRef.Create(documentInfo); await callback(documentInfoRef, new MemoryStream(Encoding.UTF8.GetBytes(contents), false)).ConfigureAwait(false); @@ -309,7 +309,7 @@ private async Task LoadDocumentAsync(DocumentSettings settings, Uri ur var document = CacheDocument(new StringDocument(documentInfo, contents), false); var expectedCategory = category ?? DocumentCategory.Script; - if (!settings.AccessFlags.HasFlag(DocumentAccessFlags.AllowCategoryMismatch) && (documentInfo.Category != expectedCategory)) + if (!settings.AccessFlags.HasAllFlags(DocumentAccessFlags.AllowCategoryMismatch) && (documentInfo.Category != expectedCategory)) { throw new FileLoadException($"Document category mismatch: '{expectedCategory}' expected, '{documentInfo.Category}' loaded", uri.IsFile ? uri.LocalPath : uri.AbsoluteUri); } @@ -333,7 +333,7 @@ public override async Task LoadDocumentAsync(DocumentSettings settings throw new UnauthorizedAccessException("The script engine is not configured for loading documents"); } - if (category == null) + if (category is null) { category = sourceInfo.HasValue ? sourceInfo.Value.Category : DocumentCategory.Script; } @@ -349,7 +349,7 @@ public override async Task LoadDocumentAsync(DocumentSettings settings result = await GetCachedDocumentOrCandidateUrisAsync(settings, sourceInfo, specifier).ConfigureAwait(false); } - if (result.Document != null) + if (result.Document is not null) { return result.Document; } @@ -375,7 +375,7 @@ public override async Task LoadDocumentAsync(DocumentSettings settings } catch (Exception exception) { - if ((task.Exception != null) && task.Exception.InnerExceptions.Count == 1) + if ((task.Exception is not null) && task.Exception.InnerExceptions.Count == 1) { Debug.Assert(ReferenceEquals(task.Exception.InnerExceptions[0], exception)); exceptions.Add(exception); @@ -426,9 +426,9 @@ public override Document GetCachedDocument(Uri uri) public override Document CacheDocument(Document document, bool replace) { MiscHelpers.VerifyNonNullArgument(document, nameof(document)); - if ((document.Info.Uri == null) || !document.Info.Uri.IsAbsoluteUri) + if ((document.Info.Uri is null) || !document.Info.Uri.IsAbsoluteUri) { - throw new ArgumentException("The document must have an absolute URI"); + throw new ArgumentException("The document must have an absolute URI", nameof(document)); } lock (cache) diff --git a/ClearScript/DelegateFactory.cs b/ClearScript/DelegateFactory.cs index 047429dd7..3416e9040 100644 --- a/ClearScript/DelegateFactory.cs +++ b/ClearScript/DelegateFactory.cs @@ -43,19 +43,19 @@ public static Delegate CreateDelegate(ScriptEngine engine, object target, Type d MiscHelpers.VerifyNonNullArgument(target, nameof(target)); if (!typeof(Delegate).IsAssignableFrom(delegateType)) { - throw new ArgumentException("Invalid delegate type"); + throw new ArgumentException("Invalid delegate type", nameof(delegateType)); } var method = delegateType.GetMethod("Invoke"); - if (method == null) + if (method is null) { - throw new ArgumentException("Invalid delegate type (invocation method not found)"); + throw new ArgumentException("Invalid delegate type (invocation method not found)", nameof(delegateType)); } var parameters = method.GetParameters(); if (parameters.Length > maxArgCount) { - throw new ArgumentException("Invalid delegate type (parameter count too large)"); + throw new ArgumentException("Invalid delegate type (parameter count too large)", nameof(delegateType)); } var paramTypes = parameters.Select(param => param.ParameterType).ToArray(); @@ -84,7 +84,7 @@ private static Delegate CreateSimpleDelegate(ScriptEngine engine, object target, shimType = funcShimTemplates[paramTypes.Length].MakeSpecificType(typeArgs); } - var shim = (DelegateShim)shimType.CreateInstance(engine, target); + var shim = (DelegateShim)Activator.CreateInstance(shimType, engine, target); return shim.Delegate; } @@ -219,7 +219,7 @@ private abstract class ProcShim : DelegateShim protected ProcShim(ScriptEngine engine) : base(engine) { - if (engine == null) + if (engine is null) { invoker = action => action(); } @@ -242,7 +242,7 @@ private abstract class FuncShim : DelegateShim protected FuncShim(ScriptEngine engine) : base(engine) { - if (engine == null) + if (engine is null) { invoker = func => func(); } diff --git a/ClearScript/DocumentAccessFlags.cs b/ClearScript/DocumentAccessFlags.cs index de97f7ad9..d3bac8bd3 100644 --- a/ClearScript/DocumentAccessFlags.cs +++ b/ClearScript/DocumentAccessFlags.cs @@ -31,6 +31,8 @@ public enum DocumentAccessFlags /// EnableAllLoading = EnableFileLoading | EnableWebLoading, + // ReSharper disable GrammarMistakeInComment + /// /// Specifies that a document path must begin with a segment of "." or ".." to be /// considered a relative path. By default, any path that is not explicitly a top-level @@ -38,6 +40,8 @@ public enum DocumentAccessFlags /// EnforceRelativePrefix = 0x00000004, + // ReSharper restore GrammarMistakeInComment + /// /// Relaxes the requirement that a loaded document must be of the requested category. /// @@ -48,4 +52,10 @@ public enum DocumentAccessFlags /// UseAsyncLoadCallback = 0x00000010 } + + internal static class DocumentAccessFlagsHelpers + { + public static bool HasAllFlags(this DocumentAccessFlags value, DocumentAccessFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this DocumentAccessFlags value, DocumentAccessFlags flags) => (value & flags) != 0; + } } diff --git a/ClearScript/DocumentCategory.cs b/ClearScript/DocumentCategory.cs index e57313e1e..75f3116f1 100644 --- a/ClearScript/DocumentCategory.cs +++ b/ClearScript/DocumentCategory.cs @@ -47,7 +47,7 @@ internal DocumentCategory() private sealed class ScriptDocument : DocumentCategory { - public static readonly ScriptDocument Instance = new ScriptDocument(); + public static readonly ScriptDocument Instance = new(); private ScriptDocument() { @@ -77,7 +77,7 @@ public override string ToString() private sealed class JsonDocument : DocumentCategory { - public static readonly JsonDocument Instance = new JsonDocument(); + public static readonly JsonDocument Instance = new(); private JsonDocument() { diff --git a/ClearScript/DocumentFlags.cs b/ClearScript/DocumentFlags.cs index 50db9f800..c4cb33e45 100644 --- a/ClearScript/DocumentFlags.cs +++ b/ClearScript/DocumentFlags.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -31,4 +31,10 @@ public enum DocumentFlags /// AwaitDebuggerAndPause = 0x00000002 } + + internal static class DocumentFlagsHelpers + { + public static bool HasAllFlags(this DocumentFlags value, DocumentFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this DocumentFlags value, DocumentFlags flags) => (value & flags) != 0; + } } diff --git a/ClearScript/DocumentInfo.cs b/ClearScript/DocumentInfo.cs index 218da5e33..a5ec0aa1a 100644 --- a/ClearScript/DocumentInfo.cs +++ b/ClearScript/DocumentInfo.cs @@ -51,7 +51,7 @@ public DocumentInfo(Uri uri) /// This property always returns a non-blank string. If a null or blank document name was /// specified at instantiation time, this property returns a default document name. /// - public string Name => MiscHelpers.EnsureNonBlank(name, Category.DefaultName); + public string Name => name.ToNonBlank(Category.DefaultName); /// /// Gets the document's URI. @@ -129,7 +129,7 @@ internal UniqueDocumentInfo MakeUnique(IUniqueNameManager manager, DocumentFlags } var uniqueName = manager.GetUniqueName(Name, Category.DefaultName); - if (info.Flags.GetValueOrDefault().HasFlag(DocumentFlags.IsTransient)) + if (info.Flags.GetValueOrDefault().HasAllFlags(DocumentFlags.IsTransient)) { uniqueName += " [temp]"; } diff --git a/ClearScript/DocumentLoader.cs b/ClearScript/DocumentLoader.cs index ed24d24f4..f7118b128 100644 --- a/ClearScript/DocumentLoader.cs +++ b/ClearScript/DocumentLoader.cs @@ -147,7 +147,7 @@ internal interface IStatistics private sealed class DefaultImpl : DefaultDocumentLoader { - public static readonly DefaultImpl Instance = new DefaultImpl(); + public static readonly DefaultImpl Instance = new(); private DefaultImpl() { diff --git a/ClearScript/DocumentSettings.cs b/ClearScript/DocumentSettings.cs index 8b7c0672f..2ad7c72a0 100644 --- a/ClearScript/DocumentSettings.cs +++ b/ClearScript/DocumentSettings.cs @@ -19,7 +19,7 @@ namespace Microsoft.ClearScript public class DocumentSettings { private DocumentLoader loader; - private readonly ConcurrentDictionary, Document> systemDocumentMap = new ConcurrentDictionary, Document>(); + private readonly ConcurrentDictionary, Document> systemDocumentMap = new(); // ReSharper disable EmptyConstructor @@ -175,7 +175,7 @@ private Document FindSystemDocument(string identifier, DocumentCategory category return document; } - if (AccessFlags.HasFlag(DocumentAccessFlags.AllowCategoryMismatch)) + if (AccessFlags.HasAllFlags(DocumentAccessFlags.AllowCategoryMismatch)) { foreach (var pair in systemDocumentMap) { diff --git a/ClearScript/Exports/VersionSymbols.h b/ClearScript/Exports/VersionSymbols.h index 8b4c83f30..d17b457b4 100644 --- a/ClearScript/Exports/VersionSymbols.h +++ b/ClearScript/Exports/VersionSymbols.h @@ -5,7 +5,7 @@ #pragma once -#define CLEARSCRIPT_VERSION_STRING "7.4.5" -#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 7,4,5 -#define CLEARSCRIPT_VERSION_STRING_INFORMATIONAL "7.4.5" +#define CLEARSCRIPT_VERSION_STRING "7.5.0" +#define CLEARSCRIPT_VERSION_COMMA_SEPARATED 7,5,0 +#define CLEARSCRIPT_VERSION_STRING_INFORMATIONAL "7.5.0" #define CLEARSCRIPT_FILE_FLAGS 0L diff --git a/ClearScript/ExtendedHostFunctions.cs b/ClearScript/ExtendedHostFunctions.cs index 54f190da6..efb3bbd06 100644 --- a/ClearScript/ExtendedHostFunctions.cs +++ b/ClearScript/ExtendedHostFunctions.cs @@ -241,6 +241,8 @@ public object comType(string progID, string serverName = null) return HostType.Wrap(MiscHelpers.GetCOMType(progID, serverName)); } + // ReSharper disable GrammarMistakeInComment + /// /// Creates a COM/ActiveX object of the specified type. /// @@ -271,6 +273,8 @@ public object newComObj(string progID, string serverName = null) return MiscHelpers.CreateCOMObject(progID, serverName); } + // ReSharper restore GrammarMistakeInComment + /// /// Imports enumerations defined within or referenced from a COM/ActiveX type library. /// @@ -281,7 +285,7 @@ public object newComObj(string progID, string serverName = null) public HostTypeCollection typeLibEnums(T obj, HostTypeCollection collection = null) where T : class { MiscHelpers.VerifyNonNullArgument(obj, nameof(obj)); - if (collection == null) + if (collection is null) { collection = new HostTypeCollection(); } @@ -292,14 +296,14 @@ public HostTypeCollection typeLibEnums(T obj, HostTypeCollection collection = if (obj is IDispatch dispatch) { var typeInfo = dispatch.GetTypeInfo(); - if (typeInfo != null) + if (typeInfo is not null) { typeInfo.GetContainingTypeLib().GetReferencedEnums().ForEach(collection.AddEnumTypeInfo); return collection; } } } - else if (type.IsImport && (type.Assembly.GetOrLoadCustomAttribute(ScriptEngine.Current, false) != null)) + else if (type.IsImport && (type.Assembly.GetOrLoadCustomAttribute(ScriptEngine.Current, false) is not null)) { type.Assembly.GetReferencedEnums().ForEach(collection.AddType); return collection; diff --git a/ClearScript/ExtensionMethods.cs b/ClearScript/ExtensionMethods.cs index ca4d5f99d..c99e10085 100644 --- a/ClearScript/ExtensionMethods.cs +++ b/ClearScript/ExtensionMethods.cs @@ -13,9 +13,9 @@ namespace Microsoft.ClearScript { internal sealed class ExtensionMethodTable { - private readonly Dictionary table = new Dictionary(); + private readonly Dictionary table = new(); - public ExtensionMethodSummary Summary { get; private set; } = new ExtensionMethodSummary(); + public ExtensionMethodSummary Summary { get; private set; } = new(); public bool ProcessType(IHostContext context, Type type) { diff --git a/ClearScript/Extensions.cs b/ClearScript/Extensions.cs index f71fdf013..690080657 100644 --- a/ClearScript/Extensions.cs +++ b/ClearScript/Extensions.cs @@ -65,8 +65,8 @@ public static object ToRestrictedHostObject(this T target, ScriptEngine engin /// /// Converts an object to a host object with a type restriction specified as a - /// instance, for use with script code currently running on the calling - /// thread. + /// instance, for use with script code currently running on the + /// calling thread. /// /// The object to convert to a host object for use with script code. /// The type whose members are to be made accessible from script code. @@ -78,8 +78,8 @@ public static object ToRestrictedHostObject(this object target, Type type) /// /// Converts an object to a host object with a type restriction specified as a - /// instance, for use with script code running in the specified script - /// engine. + /// instance, for use with script code running in the specified + /// script engine. /// /// The object to convert to a host object for use with script code. /// The type whose members are to be made accessible from script code. @@ -91,12 +91,12 @@ public static object ToRestrictedHostObject(this object target, Type type, Scrip MiscHelpers.VerifyNonNullArgument(type, nameof(type)); MiscHelpers.VerifyNonNullArgument(engine, nameof(engine)); - if (!MiscHelpers.Try(out var holder, () => typeof(Holder<>).MakeGenericType(type).CreateInstance())) + if (!MiscHelpers.Try(out var holder, static type => Activator.CreateInstance(typeof(Holder<>).MakeGenericType(type)), type)) { throw new ArgumentException("The specified type is invalid", nameof(type)); } - if (!MiscHelpers.Try(() => ((IHolder)holder).Value = target)) + if (!MiscHelpers.Try(static ctx => ((IHolder)ctx.holder).Value = ctx.target, (holder, target))) { throw new ArgumentException("The target object is incompatible with the specified type", nameof(target)); } diff --git a/ClearScript/HostEvent.cs b/ClearScript/HostEvent.cs index e83c2522c..265435059 100644 --- a/ClearScript/HostEvent.cs +++ b/ClearScript/HostEvent.cs @@ -100,7 +100,7 @@ public abstract class EventConnection private readonly object source; private readonly MethodInfo removeMethod; private readonly object[] parameters; - private readonly InterlockedOneWayFlag brokenFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag brokenFlag = new(); internal EventConnection(ScriptEngine engine, object source, EventInfo eventInfo, Delegate handler) { @@ -108,12 +108,12 @@ internal EventConnection(ScriptEngine engine, object source, EventInfo eventInfo MiscHelpers.VerifyNonNullArgument(handler, nameof(handler)); MiscHelpers.VerifyNonNullArgument(eventInfo, nameof(eventInfo)); - if (!MiscHelpers.Try(out var addMethod, () => eventInfo.GetAddMethod(true)) || (addMethod == null)) + if (!MiscHelpers.Try(out var addMethod, static eventInfo => eventInfo.GetAddMethod(true), eventInfo) || (addMethod is null)) { throw new ArgumentException("Invalid event type (no accessible add method)", nameof(eventInfo)); } - if (!MiscHelpers.Try(out removeMethod, () => eventInfo.GetRemoveMethod(true)) || (removeMethod == null)) + if (!MiscHelpers.Try(out removeMethod, static eventInfo => eventInfo.GetRemoveMethod(true), eventInfo) || (removeMethod is null)) { throw new ArgumentException("Invalid event type (no accessible remove method)", nameof(eventInfo)); } diff --git a/ClearScript/HostFunctions.cs b/ClearScript/HostFunctions.cs index 94a5230eb..22f117527 100644 --- a/ClearScript/HostFunctions.cs +++ b/ClearScript/HostFunctions.cs @@ -39,6 +39,8 @@ public HostFunctions() // ReSharper disable InconsistentNaming + // ReSharper disable GrammarMistakeInComment + /// /// Creates an empty host object. /// @@ -64,6 +66,8 @@ public PropertyBag newObj() return new PropertyBag(); } + // ReSharper restore GrammarMistakeInComment + /// /// Creates a host object of the specified type. This version is invoked if the specified /// type can be used as a type argument. @@ -194,6 +198,8 @@ public object newArr(params int[] lengths) return newArr(lengths); } + // ReSharper disable GrammarMistakeInComment + /// /// Creates a host variable of the specified type. /// @@ -257,6 +263,8 @@ public object newVar(T initValue = default) return new HostVariable(initValue); } + // ReSharper restore GrammarMistakeInComment + /// /// Creates a delegate that invokes a script function. /// @@ -610,7 +618,7 @@ public bool isTypeObj() /// public bool isNull(object value) { - return value == null; + return value is null; } /// @@ -1317,7 +1325,7 @@ public bool tryCatch(object tryFunc, object catchFunc, object finallyFunc = null } finally { - if (finallyFunc != null) + if (finallyFunc is not null) { ((ScriptObject)finallyFunc).InvokeAsFunction(); } @@ -1331,7 +1339,7 @@ public bool tryCatch(object tryFunc, object catchFunc, object finallyFunc = null internal ScriptEngine GetEngine() { var activeEngine = ScriptEngine.Current ?? engine; - if (activeEngine == null) + if (activeEngine is null) { throw new InvalidOperationException("Operation requires a script engine"); } @@ -1342,7 +1350,7 @@ internal ScriptEngine GetEngine() internal static Type GetUniqueHostType(object type, string paramName) { var hostType = type as HostType; - if (hostType == null) + if (hostType is null) { throw new ArgumentException("Invalid host type", paramName); } diff --git a/ClearScript/HostIndexedProperty.cs b/ClearScript/HostIndexedProperty.cs index 79a0c2867..4529465b4 100644 --- a/ClearScript/HostIndexedProperty.cs +++ b/ClearScript/HostIndexedProperty.cs @@ -51,7 +51,7 @@ public override string[] GetAuxMethodNames(IHostContext context, BindingFlags bi public override bool TryInvokeAuxMember(IHostContext context, string memberName, BindingFlags invokeFlags, object[] args, object[] bindArgs, out object result) { - if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if (invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { if (string.Equals(memberName, "get", invokeFlags.GetMemberNameComparison())) { @@ -72,7 +72,7 @@ public override bool TryInvokeAuxMember(IHostContext context, string memberName, public override bool TryInvoke(IHostContext context, BindingFlags invokeFlags, object[] args, object[] bindArgs, out object result) { - result = target.InvokeMember(name, (invokeFlags.HasFlag(BindingFlags.SetField) ? BindingFlags.SetProperty : BindingFlags.GetProperty) | BindingFlags.SuppressChangeType, args, bindArgs, null, true); + result = target.InvokeMember(name, (invokeFlags.HasAllFlags(BindingFlags.SetField) ? BindingFlags.SetProperty : BindingFlags.GetProperty) | BindingFlags.SuppressChangeType, args, bindArgs, null, true); return true; } diff --git a/ClearScript/HostItem.InvokeMethod.cs b/ClearScript/HostItem.InvokeMethod.cs index c6e74dea2..f6543fb38 100644 --- a/ClearScript/HostItem.InvokeMethod.cs +++ b/ClearScript/HostItem.InvokeMethod.cs @@ -1,636 +1,601 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Diagnostics; -using System.Dynamic; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; -using System.Threading; -using Microsoft.CSharp.RuntimeBinder; -using Microsoft.ClearScript.Util; -using Binder = Microsoft.CSharp.RuntimeBinder.Binder; - -namespace Microsoft.ClearScript -{ - internal partial class HostItem - { - #region data - - private static readonly ConcurrentDictionary coreBindCache = new ConcurrentDictionary(); - private static long coreBindCount; - - #endregion - - #region internal members - - private object InvokeMethod(string name, object[] args, object[] bindArgs) - { - var typeArgs = GetTypeArgs(args).ToArray(); - if (typeArgs.Length > 0) - { - var mergedArgs = args; - var argOffset = typeArgs.Length; - - args = args.Skip(argOffset).ToArray(); - bindArgs = bindArgs.Skip(argOffset).ToArray(); - - var result = InvokeMethod(name, typeArgs, args, bindArgs); - for (var index = 0; index < args.Length; index++) - { - mergedArgs[argOffset + index] = args[index]; - } - - return result; - } - - return InvokeMethod(name, typeArgs, args, bindArgs); - } - - private object InvokeMethod(string name, Type[] typeArgs, object[] args, object[] bindArgs) - { - var bindResult = BindMethod(name, typeArgs, args, bindArgs); - if ((bindResult is MethodBindFailure) && Target.GetFlags(this).HasFlag(HostTargetFlags.AllowExtensionMethods)) - { - var targetArg = Target.Target.ToEnumerable(); - var extensionArgs = targetArg.Concat(args).ToArray(); - - var targetBindArg = new object[] { Target }; - var extensionBindArgs = targetBindArg.Concat(bindArgs).ToArray(); - - foreach (var type in ExtensionMethodSummary.Types) - { - var extensionHostItem = (HostItem)Wrap(Engine, HostType.Wrap(type)); - var extensionBindResult = extensionHostItem.BindMethod(name, typeArgs, extensionArgs, extensionBindArgs); - if (extensionBindResult is MethodBindSuccess) - { - var result = extensionBindResult.Invoke(extensionHostItem); - for (var index = 1; index < extensionArgs.Length; index++) - { - args[index - 1] = extensionArgs[index]; - } - - return result; - } - } - } - - return bindResult.Invoke(this); - } - - private static IEnumerable GetTypeArgs(object[] args) - { - foreach (var arg in args) - { - var hostType = arg as HostType; - if (hostType == null) - { - yield break; - } - - var typeArg = hostType.GetTypeArgNoThrow(); - if (typeArg == null) - { - yield break; - } - - yield return typeArg; - } - } - - private MethodBindResult BindMethod(string name, Type[] typeArgs, object[] args, object[] bindArgs) - { - var bindFlags = GetMethodBindFlags(); - - // WARNING: BindSignature holds on to the specified typeArgs; subsequent modification - // will result in bugs that are difficult to diagnose. Create a copy if necessary. - - var signature = new BindSignature(AccessContext, bindFlags, Target, name, typeArgs, bindArgs); - MethodBindResult result; - - if (Engine.TryGetCachedMethodBindResult(signature, out var rawResult)) - { - result = MethodBindResult.Create(name, bindFlags, rawResult, Target, args); - } - else - { - var forceReflection = Engine.DisableDynamicBinding; - - if (forceReflection) - { - result = new MethodBindFailure(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}' that matches the specified arguments", name))); - } - else - { - result = BindMethodInternal(signature, AccessContext, bindFlags, Target, name, typeArgs, args, bindArgs); - if (!result.IsPreferredMethod(this, name)) - { - if (result is MethodBindSuccess) - { - result = new MethodBindFailure(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}' that matches the specified arguments", name))); - } - - foreach (var altName in GetAltMethodNames(name, bindFlags)) - { - var altResult = BindMethodInternal(null, AccessContext, bindFlags, Target, altName, typeArgs, args, bindArgs); - if (altResult.IsUnblockedMethod(this)) - { - result = altResult; - break; - } - } - } - } - - if ((result is MethodBindFailure) && (forceReflection || Engine.UseReflectionBindFallback)) - { - var reflectionResult = BindMethodUsingReflection(bindFlags, Target, name, typeArgs, args, bindArgs); - if ((reflectionResult is MethodBindSuccess) || forceReflection) - { - result = reflectionResult; - } - } - - Engine.CacheMethodBindResult(signature, result.RawResult); - } - - return result; - } - - private static MethodBindResult BindMethodInternal(BindSignature signature, Type bindContext, BindingFlags bindFlags, HostTarget target, string name, Type[] typeArgs, object[] args, object[] bindArgs) - { - if (signature == null) - { - // WARNING: BindSignature holds on to the specified typeArgs; subsequent modification - // will result in bugs that are difficult to diagnose. Create a copy if necessary. - - signature = new BindSignature(bindContext, bindFlags, target, name, typeArgs, bindArgs); - } - - MethodBindResult result; - - if (coreBindCache.TryGetValue(signature, out var rawResult)) - { - result = MethodBindResult.Create(name, bindFlags, rawResult, target, args); - } - else - { - result = BindMethodCore(bindContext, bindFlags, target, name, typeArgs, args, bindArgs); - coreBindCache.TryAdd(signature, result.RawResult); - } - - return result; - } - - private static MethodBindResult BindMethodCore(Type bindContext, BindingFlags bindFlags, HostTarget target, string name, Type[] typeArgs, object[] args, object[] bindArgs) - { - Interlocked.Increment(ref coreBindCount); - - // create C# member invocation binder - const CSharpBinderFlags binderFlags = CSharpBinderFlags.InvokeSimpleName | CSharpBinderFlags.ResultDiscarded; - var binder = (InvokeMemberBinder)Binder.InvokeMember(binderFlags, name, typeArgs, bindContext, CreateArgInfoEnum(target, bindArgs)); - - // perform default binding - var rawResult = BindMethodRaw(bindFlags, binder, target, bindArgs); - - var result = MethodBindResult.Create(name, bindFlags, rawResult, target, args); - if ((result is MethodBindFailure) && !(target is HostType) && target.Type.IsInterface) - { - // binding through interface failed; try base interfaces - foreach (var interfaceType in target.Type.GetInterfaces()) - { - var baseInterfaceTarget = HostObject.Wrap(target.InvokeTarget, interfaceType); - rawResult = BindMethodRaw(bindFlags, binder, baseInterfaceTarget, bindArgs); - - var baseInterfaceResult = MethodBindResult.Create(name, bindFlags, rawResult, target, args); - if (baseInterfaceResult is MethodBindSuccess) - { - return baseInterfaceResult; - } - } - - // binding through base interfaces failed; try System.Object - var objectTarget = HostObject.Wrap(target.InvokeTarget, typeof(object)); - rawResult = BindMethodRaw(bindFlags, binder, objectTarget, bindArgs); - - var objectResult = MethodBindResult.Create(name, bindFlags, rawResult, target, args); - if (objectResult is MethodBindSuccess) - { - return objectResult; - } - } - - return result; - } - - private static object BindMethodRaw(BindingFlags bindFlags, InvokeMemberBinder binder, HostTarget target, object[] bindArgs) - { - var expr = DynamicHelpers.Bind(binder, target, bindArgs).Expression; - - // ReSharper disable ConditionIsAlwaysTrueOrFalse - // ReSharper disable HeuristicUnreachableCode - - if (expr == null) - { - return new Func(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}'", binder.Name))); - } - - // ReSharper restore HeuristicUnreachableCode - // ReSharper restore ConditionIsAlwaysTrueOrFalse - - if (expr.NodeType == ExpressionType.Dynamic) - { - // The binding result is a dynamic call, which is indicative of COM interop. This - // sort of binding is not very useful here; it can't be resolved to a MethodInfo - // instance, and caching it is problematic because it includes argument bindings. - // Falling back to reflection should work in most cases because COM interfaces - // support neither generic nor overloaded methods. - - try - { - var method = target.Type.GetMethod(binder.Name, bindFlags); - return (object)method ?? new Func(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}'", binder.Name))); - } - catch (AmbiguousMatchException exception) - { - return new Func(() => new AmbiguousMatchException(exception.Message)); - } - } - - return (new MethodBindingVisitor(target.InvokeTarget, binder.Name, expr)).Result; - } - - private IEnumerable GetAltMethodNames(string name, BindingFlags bindFlags) - { - return GetAltMethodNamesInternal(name, bindFlags).Distinct(); - } - - private IEnumerable GetAltMethodNamesInternal(string name, BindingFlags bindFlags) - { - foreach (var method in Target.Type.GetScriptableMethods(this, name, bindFlags)) - { - var methodName = method.GetShortName(); - if (methodName != name) - { - yield return methodName; - } - } - } - - private static IEnumerable CreateArgInfoEnum(HostTarget target, object[] args) - { - if (target is HostType) - { - yield return CreateStaticTypeArgInfo(); - } - else - { - yield return CreateArgInfo(target.DynamicInvokeTarget); - } - - foreach (var arg in args) - { - yield return CreateArgInfo(arg); - } - } - - private static CSharpArgumentInfo CreateArgInfo(object arg) - { - var flags = CSharpArgumentInfoFlags.None; - if (arg != null) - { - flags |= CSharpArgumentInfoFlags.UseCompileTimeType; - if (arg is HostObject hostObject) - { - if ((hostObject.Type == typeof(int)) || (hostObject.Type.IsValueType && hostObject.Target.IsZero())) - { - flags |= CSharpArgumentInfoFlags.Constant; - } - } - else if (arg is HostVariable hostVariable) - { - if ((hostVariable.Type == typeof(int)) || (hostVariable.Type.IsValueType && hostVariable.Target.IsZero())) - { - flags |= CSharpArgumentInfoFlags.Constant; - } - } - else if (arg is int || arg.IsZero()) - { - flags |= CSharpArgumentInfoFlags.Constant; - } - else if (arg is IOutArg) - { - flags |= CSharpArgumentInfoFlags.IsOut; - } - else if (arg is IRefArg) - { - flags |= CSharpArgumentInfoFlags.IsRef; - } - } - - return CSharpArgumentInfo.Create(flags, null); - } - - private static CSharpArgumentInfo CreateStaticTypeArgInfo() - { - return CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.IsStaticType, null); - } - - private MethodBindResult BindMethodUsingReflection(BindingFlags bindFlags, HostTarget hostTarget, string name, Type[] typeArgs, object[] args, object[] bindArgs) - { - var candidates = GetReflectionCandidates(bindFlags, hostTarget, name, typeArgs).Distinct().ToArray(); - if (candidates.Length > 0) - { - try - { - var rawResult = TypeHelpers.BindToMember(this, candidates, bindFlags, args, bindArgs); - if (rawResult != null) - { - return MethodBindResult.Create(name, bindFlags, rawResult, hostTarget, args); - } - } - catch (AmbiguousMatchException) - { - return new MethodBindFailure(() => new AmbiguousMatchException(MiscHelpers.FormatInvariant("The object has multiple methods named '{0}' that match the specified arguments", name))); - } - } - - return new MethodBindFailure(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}' that matches the specified arguments", name))); - } - - private IEnumerable GetReflectionCandidates(BindingFlags bindFlags, HostTarget hostTarget, string name, Type[] typeArgs) - { - foreach (var method in GetReflectionCandidates(bindFlags, hostTarget.Type, name, typeArgs)) - { - yield return method; - } - - if (!(hostTarget is HostType) && hostTarget.Type.IsInterface) - { - foreach (var interfaceType in hostTarget.Type.GetInterfaces()) - { - foreach (var method in GetReflectionCandidates(bindFlags, interfaceType, name, typeArgs)) - { - yield return method; - } - } - - foreach (var method in GetReflectionCandidates(bindFlags, typeof(object), name, typeArgs)) - { - yield return method; - } - } - } - - private IEnumerable GetReflectionCandidates(BindingFlags bindFlags, Type type, string name, Type[] typeArgs) - { - foreach (var method in type.GetScriptableMethods(this, name, bindFlags)) - { - MethodInfo tempMethod = null; - - if (method.ContainsGenericParameters) - { - try - { - tempMethod = method.MakeGenericMethod(typeArgs); - } - catch (ArgumentException) - { - continue; - } - catch (NotSupportedException) - { - continue; - } - } - else if (typeArgs.Length < 1) - { - tempMethod = method; - } - - if ((tempMethod != null) && !tempMethod.ContainsGenericParameters) - { - yield return tempMethod; - } - } - } - - #endregion - - #region unit test support - - internal static void ClearCoreBindCache() - { - coreBindCache.Clear(); - Interlocked.Exchange(ref coreBindCount, 0); - } - - internal static long GetCoreBindCount() - { - return Interlocked.Read(ref coreBindCount); - } - - #endregion - - #region Nested type: MethodBindResult - - private abstract class MethodBindResult - { - public static MethodBindResult Create(string name, BindingFlags bindFlags, object rawResult, HostTarget hostTarget, object[] args) - { - var method = rawResult as MethodInfo; - if (method != null) - { - if (method.IsStatic && !bindFlags.HasFlag(BindingFlags.Static)) - { - return new MethodBindFailure(() => new InvalidOperationException(MiscHelpers.FormatInvariant("Cannot access static method '{0}' in non-static context", method.Name))); - } - - return new MethodBindSuccess(hostTarget, method, args); - } - - return new MethodBindFailure((rawResult as Func) ?? (() => new NotSupportedException(MiscHelpers.FormatInvariant("Invocation of method '{0}' failed (unrecognized binding)", name)))); - } - - public abstract object RawResult { get; } - - public abstract bool IsPreferredMethod(HostItem hostItem, string name); - - public abstract bool IsUnblockedMethod(HostItem hostItem); - - public abstract object Invoke(HostItem hostItem); - } - - #endregion - - #region Nested type: MethodBindSuccess - - private sealed class MethodBindSuccess : MethodBindResult - { - private static readonly MethodInfo[] reflectionMethods = - { - typeof(object).GetMethod("GetType"), - typeof(System.Runtime.InteropServices._Exception).GetMethod("GetType"), - typeof(Exception).GetMethod("GetType") - }; - - private readonly HostTarget hostTarget; - private readonly MethodInfo method; - private readonly object[] args; - - public MethodBindSuccess(HostTarget hostTarget, MethodInfo method, object[] args) - { - this.hostTarget = hostTarget; - this.method = method; - this.args = args; - } - - #region MethodBindResult overrides - - public override object RawResult => method; - - public override bool IsPreferredMethod(HostItem hostItem, string name) - { - return IsUnblockedMethod(hostItem) && (method.GetScriptName(hostItem) == name); - } - - public override bool IsUnblockedMethod(HostItem hostItem) - { - return !method.IsBlockedFromScript(hostItem, hostItem.DefaultAccess); - } - - public override object Invoke(HostItem hostItem) - { - if (reflectionMethods.Contains(method, MemberComparer.Instance)) - { - hostItem.Engine.CheckReflection(); - } - - return InvokeHelpers.InvokeMethod(hostItem, method, hostTarget.InvokeTarget, args, method.GetScriptMemberFlags(hostItem)); - } - - #endregion - } - - #endregion - - #region Nested type: MethodBindFailure - - private sealed class MethodBindFailure : MethodBindResult - { - private readonly Func exceptionFactory; - - public MethodBindFailure(Func exceptionFactory) - { - this.exceptionFactory = exceptionFactory; - } - - #region MethodBindResult overrides - - public override object RawResult => exceptionFactory; - - public override bool IsPreferredMethod(HostItem hostItem, string name) - { - return false; - } - - public override bool IsUnblockedMethod(HostItem hostItem) - { - return false; - } - - public override object Invoke(HostItem hostItem) - { - throw exceptionFactory(); - } - - #endregion - } - - #endregion - - #region Nested type: MethodBindingVisitor - - private sealed class MethodBindingVisitor : ExpressionVisitor - { - private readonly object target; - private readonly string name; - private readonly List results = new List(); - - public MethodBindingVisitor(object target, string name, Expression expression) - { - this.target = target; - this.name = name; - - Visit(expression); - if (results.Count != 1) - { - results.Clear(); - AddResult(() => new NotSupportedException(MiscHelpers.FormatInvariant("Invocation of method '{0}' failed (unrecognized binding)", name))); - } - else - { - var method = results[0] as MethodInfo; - if (method != null) - { - Debug.Assert(method.Name == name); - } - } - } - - public object Result => results[0]; - - protected override Expression VisitMethodCall(MethodCallExpression node) - { - if (node.Method.Name == name) - { - AddResult(node.Method); - } - - return base.VisitMethodCall(node); - } - - protected override Expression VisitInvocation(InvocationExpression node) - { - if (target is Delegate targetDelegate) - { - var del = DynamicHelpers.Invoke(node.Expression) as Delegate; - if (del == targetDelegate) - { - AddResult(del.GetType().GetMethod("Invoke")); - } - } - - return base.VisitInvocation(node); - } - - protected override Expression VisitUnary(UnaryExpression node) - { - if (node.NodeType == ExpressionType.Throw) - { - if (DynamicHelpers.Invoke(node.Operand) is Exception) - { - AddResult(() => (Exception)DynamicHelpers.Invoke(node.Operand)); - } - } - - return base.VisitUnary(node); - } - - private void AddResult(MethodInfo method) - { - results.Add(method); - } - - private void AddResult(Func exceptionFactory) - { - results.Add(exceptionFactory); - } - } - - #endregion - } -} +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.Dynamic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Threading; +using Microsoft.CSharp.RuntimeBinder; +using Microsoft.ClearScript.Util; +using Binder = Microsoft.CSharp.RuntimeBinder.Binder; + +namespace Microsoft.ClearScript +{ + internal partial class HostItem + { + #region data + + private static readonly ConcurrentDictionary coreBindCache = new(); + private static long coreBindCount; + + #endregion + + #region internal members + + private object InvokeMethod(string name, object[] args, object[] bindArgs) + { + var typeArgs = GetTypeArgs(args).ToArray(); + if (typeArgs.Length > 0) + { + var mergedArgs = args; + var argOffset = typeArgs.Length; + + args = args.Skip(argOffset).ToArray(); + bindArgs = bindArgs.Skip(argOffset).ToArray(); + + var result = InvokeMethod(name, typeArgs, args, bindArgs); + for (var index = 0; index < args.Length; index++) + { + mergedArgs[argOffset + index] = args[index]; + } + + return result; + } + + return InvokeMethod(name, typeArgs, args, bindArgs); + } + + private object InvokeMethod(string name, Type[] typeArgs, object[] args, object[] bindArgs) + { + var bindResult = BindMethod(name, typeArgs, args, bindArgs); + if (!bindResult.IsSuccess && Target.GetFlags(this).HasAllFlags(HostTargetFlags.AllowExtensionMethods)) + { + var targetArg = Target.Target.ToEnumerable(); + var extensionArgs = targetArg.Concat(args).ToArray(); + + var targetBindArg = new object[] { Target }; + var extensionBindArgs = targetBindArg.Concat(bindArgs).ToArray(); + + foreach (var type in ExtensionMethodSummary.Types) + { + var extensionHostItem = (HostItem)Wrap(Engine, HostType.Wrap(type)); + var extensionBindResult = extensionHostItem.BindMethod(name, typeArgs, extensionArgs, extensionBindArgs); + if (extensionBindResult.IsSuccess) + { + var result = extensionBindResult.Invoke(extensionHostItem); + for (var index = 1; index < extensionArgs.Length; index++) + { + args[index - 1] = extensionArgs[index]; + } + + return result; + } + } + } + + return bindResult.Invoke(this); + } + + private static IEnumerable GetTypeArgs(object[] args) + { + foreach (var arg in args) + { + var hostType = arg as HostType; + if (hostType is null) + { + yield break; + } + + var typeArg = hostType.GetTypeArgNoThrow(); + if (typeArg is null) + { + yield break; + } + + yield return typeArg; + } + } + + private MethodBindResult BindMethod(string name, Type[] typeArgs, object[] args, object[] bindArgs) + { + var bindFlags = GetMethodBindFlags(); + + // WARNING: BindSignature holds on to the specified typeArgs; subsequent modification + // will result in bugs that are difficult to diagnose. Create a copy if necessary. + + var signature = new BindSignature(AccessContext, bindFlags, Target, name, typeArgs, bindArgs); + MethodBindResult result; + + if (Engine.TryGetCachedMethodBindResult(signature, out var rawResult)) + { + result = MethodBindResult.Create(name, bindFlags, rawResult, Target, args); + } + else + { + var forceReflection = Engine.DisableDynamicBinding; + + if (forceReflection) + { + result = MethodBindResult.CreateFailure(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}' that matches the specified arguments", name))); + } + else + { + result = BindMethodInternal(signature, AccessContext, bindFlags, Target, name, typeArgs, args, bindArgs); + if (!result.IsPreferredMethod(this, name)) + { + if (result.IsSuccess) + { + result = MethodBindResult.CreateFailure(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}' that matches the specified arguments", name))); + } + + foreach (var altName in GetAltMethodNames(name, bindFlags)) + { + var altResult = BindMethodInternal(null, AccessContext, bindFlags, Target, altName, typeArgs, args, bindArgs); + if (altResult.IsUnblockedMethod(this)) + { + result = altResult; + break; + } + } + } + } + + if (!result.IsSuccess && (forceReflection || Engine.UseReflectionBindFallback)) + { + var reflectionResult = BindMethodUsingReflection(bindFlags, Target, name, typeArgs, args, bindArgs); + if (reflectionResult.IsSuccess || forceReflection) + { + result = reflectionResult; + } + } + + Engine.CacheMethodBindResult(signature, result.RawResult); + } + + return result; + } + + private static MethodBindResult BindMethodInternal(BindSignature signature, Type bindContext, BindingFlags bindFlags, HostTarget target, string name, Type[] typeArgs, object[] args, object[] bindArgs) + { + if (signature is null) + { + // WARNING: BindSignature holds on to the specified typeArgs; subsequent modification + // will result in bugs that are difficult to diagnose. Create a copy if necessary. + + signature = new BindSignature(bindContext, bindFlags, target, name, typeArgs, bindArgs); + } + + MethodBindResult result; + + if (coreBindCache.TryGetValue(signature, out var rawResult)) + { + result = MethodBindResult.Create(name, bindFlags, rawResult, target, args); + } + else + { + result = BindMethodCore(bindContext, bindFlags, target, name, typeArgs, args, bindArgs); + coreBindCache.TryAdd(signature, result.RawResult); + } + + return result; + } + + private static MethodBindResult BindMethodCore(Type bindContext, BindingFlags bindFlags, HostTarget target, string name, Type[] typeArgs, object[] args, object[] bindArgs) + { + Interlocked.Increment(ref coreBindCount); + + // create C# member invocation binder + const CSharpBinderFlags binderFlags = CSharpBinderFlags.InvokeSimpleName | CSharpBinderFlags.ResultDiscarded; + var binder = (InvokeMemberBinder)Binder.InvokeMember(binderFlags, name, typeArgs, bindContext, CreateArgInfoEnum(target, bindArgs)); + + // perform default binding + var rawResult = BindMethodRaw(bindFlags, binder, target, bindArgs); + + var result = MethodBindResult.Create(name, bindFlags, rawResult, target, args); + if (!result.IsSuccess && (target is not HostType) && target.Type.IsInterface) + { + // binding through interface failed; try base interfaces + foreach (var interfaceType in target.Type.GetInterfaces()) + { + var baseInterfaceTarget = HostObject.Wrap(target.InvokeTarget, interfaceType); + rawResult = BindMethodRaw(bindFlags, binder, baseInterfaceTarget, bindArgs); + + var baseInterfaceResult = MethodBindResult.Create(name, bindFlags, rawResult, target, args); + if (baseInterfaceResult.IsSuccess) + { + return baseInterfaceResult; + } + } + + // binding through base interfaces failed; try System.Object + var objectTarget = HostObject.Wrap(target.InvokeTarget, typeof(object)); + rawResult = BindMethodRaw(bindFlags, binder, objectTarget, bindArgs); + + var objectResult = MethodBindResult.Create(name, bindFlags, rawResult, target, args); + if (objectResult.IsSuccess) + { + return objectResult; + } + } + + return result; + } + + private static object BindMethodRaw(BindingFlags bindFlags, InvokeMemberBinder binder, HostTarget target, object[] bindArgs) + { + var expr = DynamicHelpers.Bind(binder, target, bindArgs).Expression; + + // ReSharper disable ConditionIsAlwaysTrueOrFalse + // ReSharper disable HeuristicUnreachableCode + + if (expr is null) + { + return new Func(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}'", binder.Name))); + } + + // ReSharper restore HeuristicUnreachableCode + // ReSharper restore ConditionIsAlwaysTrueOrFalse + + if (expr.NodeType == ExpressionType.Dynamic) + { + // The binding result is a dynamic call, which is indicative of COM interop. This + // sort of binding is not very useful here; it can't be resolved to a MethodInfo + // instance, and caching it is problematic because it includes argument bindings. + // Falling back to reflection should work in most cases because COM interfaces + // support neither generic nor overloaded methods. + + try + { + var method = target.Type.GetMethod(binder.Name, bindFlags); + return (object)method ?? new Func(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}'", binder.Name))); + } + catch (AmbiguousMatchException exception) + { + return new Func(() => new AmbiguousMatchException(exception.Message)); + } + } + + return (new MethodBindingVisitor(target.InvokeTarget, binder.Name, expr)).Result; + } + + private IEnumerable GetAltMethodNames(string name, BindingFlags bindFlags) + { + return GetAltMethodNamesInternal(name, bindFlags).Distinct(); + } + + private IEnumerable GetAltMethodNamesInternal(string name, BindingFlags bindFlags) + { + foreach (var method in Target.Type.GetScriptableMethods(this, name, bindFlags)) + { + var methodName = method.GetShortName(); + if (methodName != name) + { + yield return methodName; + } + } + } + + private static IEnumerable CreateArgInfoEnum(HostTarget target, object[] args) + { + if (target is HostType) + { + yield return CreateStaticTypeArgInfo(); + } + else + { + yield return CreateArgInfo(target.DynamicInvokeTarget); + } + + foreach (var arg in args) + { + yield return CreateArgInfo(arg); + } + } + + private static CSharpArgumentInfo CreateArgInfo(object arg) + { + var flags = CSharpArgumentInfoFlags.None; + if (arg is not null) + { + flags |= CSharpArgumentInfoFlags.UseCompileTimeType; + if (arg is HostObject hostObject) + { + if ((hostObject.Type == typeof(int)) || (hostObject.Type.IsValueType && hostObject.Target.IsZero())) + { + flags |= CSharpArgumentInfoFlags.Constant; + } + } + else if (arg is HostVariable hostVariable) + { + if ((hostVariable.Type == typeof(int)) || (hostVariable.Type.IsValueType && hostVariable.Target.IsZero())) + { + flags |= CSharpArgumentInfoFlags.Constant; + } + } + else if (arg is int || arg.IsZero()) + { + flags |= CSharpArgumentInfoFlags.Constant; + } + else if (arg is IOutArg) + { + flags |= CSharpArgumentInfoFlags.IsOut; + } + else if (arg is IRefArg) + { + flags |= CSharpArgumentInfoFlags.IsRef; + } + } + + return CSharpArgumentInfo.Create(flags, null); + } + + private static CSharpArgumentInfo CreateStaticTypeArgInfo() + { + return CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.IsStaticType, null); + } + + private MethodBindResult BindMethodUsingReflection(BindingFlags bindFlags, HostTarget hostTarget, string name, Type[] typeArgs, object[] args, object[] bindArgs) + { + var candidates = GetReflectionCandidates(bindFlags, hostTarget, name, typeArgs).Distinct().ToArray(); + if (candidates.Length > 0) + { + try + { + var rawResult = TypeHelpers.BindToMember(this, candidates, bindFlags, args, bindArgs); + if (rawResult is not null) + { + return MethodBindResult.Create(name, bindFlags, rawResult, hostTarget, args); + } + } + catch (AmbiguousMatchException) + { + return MethodBindResult.CreateFailure(() => new AmbiguousMatchException(MiscHelpers.FormatInvariant("The object has multiple methods named '{0}' that match the specified arguments", name))); + } + } + + return MethodBindResult.CreateFailure(() => new MissingMethodException(MiscHelpers.FormatInvariant("The object has no method named '{0}' that matches the specified arguments", name))); + } + + private IEnumerable GetReflectionCandidates(BindingFlags bindFlags, HostTarget hostTarget, string name, Type[] typeArgs) + { + foreach (var method in GetReflectionCandidates(bindFlags, hostTarget.Type, name, typeArgs)) + { + yield return method; + } + + if ((hostTarget is not HostType) && hostTarget.Type.IsInterface) + { + foreach (var interfaceType in hostTarget.Type.GetInterfaces()) + { + foreach (var method in GetReflectionCandidates(bindFlags, interfaceType, name, typeArgs)) + { + yield return method; + } + } + + foreach (var method in GetReflectionCandidates(bindFlags, typeof(object), name, typeArgs)) + { + yield return method; + } + } + } + + private IEnumerable GetReflectionCandidates(BindingFlags bindFlags, Type type, string name, Type[] typeArgs) + { + foreach (var method in type.GetScriptableMethods(this, name, bindFlags)) + { + MethodInfo tempMethod = null; + + if (method.ContainsGenericParameters) + { + try + { + tempMethod = method.MakeGenericMethod(typeArgs); + } + catch (ArgumentException) + { + continue; + } + catch (NotSupportedException) + { + continue; + } + } + else if (typeArgs.Length < 1) + { + tempMethod = method; + } + + if ((tempMethod is not null) && !tempMethod.ContainsGenericParameters) + { + yield return tempMethod; + } + } + } + + #endregion + + #region unit test support + + internal static void ClearCoreBindCache() + { + coreBindCache.Clear(); + Interlocked.Exchange(ref coreBindCount, 0); + } + + internal static long GetCoreBindCount() + { + return Interlocked.Read(ref coreBindCount); + } + + #endregion + + #region Nested type: MethodBindResult + + private readonly ref struct MethodBindResult + { + private readonly HostTarget hostTarget; + private readonly MethodInfo method; + private readonly object[] args; + private readonly Func exceptionFactory; + + private static readonly MethodInfo[] reflectionMethods = + { + typeof(object).GetMethod("GetType"), + typeof(System.Runtime.InteropServices._Exception).GetMethod("GetType"), + typeof(Exception).GetMethod("GetType") + }; + + private MethodBindResult(HostTarget hostTarget, MethodInfo method, object[] args) + { + this.hostTarget = hostTarget; + this.method = method; + this.args = args; + exceptionFactory = null; + } + + private MethodBindResult(Func exceptionFactory) + { + hostTarget = null; + method = null; + args = null; + this.exceptionFactory = exceptionFactory; + } + + public static MethodBindResult Create(string name, BindingFlags bindFlags, object rawResult, HostTarget hostTarget, object[] args) + { + var method = rawResult as MethodInfo; + if (method != null) + { + if (method.IsStatic && !bindFlags.HasAllFlags(BindingFlags.Static)) + { + return new MethodBindResult(() => new InvalidOperationException(MiscHelpers.FormatInvariant("Cannot access static method '{0}' in non-static context", method.Name))); + } + + return new MethodBindResult(hostTarget, method, args); + } + + return new MethodBindResult((rawResult as Func) ?? (() => new NotSupportedException(MiscHelpers.FormatInvariant("Invocation of method '{0}' failed (unrecognized binding)", name)))); + } + + public static MethodBindResult CreateFailure(Func exceptionFactory) => new(exceptionFactory); + + public bool IsSuccess => method != null; + + public object RawResult => IsSuccess ? method : exceptionFactory; + + public bool IsPreferredMethod(HostItem hostItem, string name) + { + return IsSuccess && IsUnblockedMethod(hostItem) && (method.GetScriptName(hostItem) == name); + } + + public bool IsUnblockedMethod(HostItem hostItem) + { + return IsSuccess && !method.IsBlockedFromScript(hostItem, hostItem.DefaultAccess); + } + + public object Invoke(HostItem hostItem) + { + if (!IsSuccess) + { + throw exceptionFactory(); + } + + if (reflectionMethods.Contains(method, MemberComparer.Instance)) + { + hostItem.Engine.CheckReflection(); + } + + return InvokeHelpers.InvokeMethod(hostItem, method, hostTarget.InvokeTarget, args, method.GetScriptMemberFlags(hostItem)); + } + } + + #endregion + + #region Nested type: MethodBindingVisitor + + private sealed class MethodBindingVisitor : ExpressionVisitor + { + private readonly object target; + private readonly string name; + private readonly List results = new(); + + public MethodBindingVisitor(object target, string name, Expression expression) + { + this.target = target; + this.name = name; + + Visit(expression); + if (results.Count != 1) + { + results.Clear(); + AddResult(() => new NotSupportedException(MiscHelpers.FormatInvariant("Invocation of method '{0}' failed (unrecognized binding)", name))); + } + else + { + var method = results[0] as MethodInfo; + if (method is not null) + { + Debug.Assert(method.Name == name); + } + } + } + + public object Result => results[0]; + + protected override Expression VisitMethodCall(MethodCallExpression node) + { + if (node.Method.Name == name) + { + AddResult(node.Method); + } + + return base.VisitMethodCall(node); + } + + protected override Expression VisitInvocation(InvocationExpression node) + { + if (target is Delegate targetDelegate) + { + var del = DynamicHelpers.Invoke(node.Expression) as Delegate; + if (del == targetDelegate) + { + AddResult(del.GetType().GetMethod("Invoke")); + } + } + + return base.VisitInvocation(node); + } + + protected override Expression VisitUnary(UnaryExpression node) + { + if (node.NodeType == ExpressionType.Throw) + { + if (DynamicHelpers.Invoke(node.Operand) is Exception) + { + AddResult(() => (Exception)DynamicHelpers.Invoke(node.Operand)); + } + } + + return base.VisitUnary(node); + } + + private void AddResult(MethodInfo method) + { + results.Add(method); + } + + private void AddResult(Func exceptionFactory) + { + results.Add(exceptionFactory); + } + } + + #endregion + } +} diff --git a/ClearScript/HostItem.NetFramework.cs b/ClearScript/HostItem.NetFramework.cs index b58081a8f..c43e09115 100644 --- a/ClearScript/HostItem.NetFramework.cs +++ b/ClearScript/HostItem.NetFramework.cs @@ -1,12 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; -using Microsoft.ClearScript.Util; - namespace Microsoft.ClearScript { internal partial class HostItem @@ -19,43 +13,5 @@ private static HostItem Create(ScriptEngine engine, HostTarget target, HostItemF } #endregion - - #region internal members - - #region member invocation - - private object CreateAsyncEnumerator(IEnumerable enumerable) - { - return HostObject.Wrap(enumerable.GetEnumerator().ToScriptableAsyncEnumerator(Engine), typeof(IScriptableAsyncEnumerator)); - } - - private object CreateAsyncEnumerator() - { - if ((Target is HostObject) || (Target is IHostVariable) || (Target is IByRefArg)) - { - if ((Target.InvokeTarget != null) && Target.Type.IsAssignableToGenericType(typeof(IEnumerable<>), out var typeArgs)) - { - var helpersHostItem = Wrap(Engine, typeof(ScriptableEnumerableHelpers<>).MakeGenericType(typeArgs).InvokeMember("HostType", BindingFlags.Public | BindingFlags.Static | BindingFlags.GetField, null, null, null), HostItemFlags.PrivateAccess); - if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)helpersHostItem).InvokeMethod("GetScriptableAsyncEnumerator", this, Engine))) - { - return enumerator; - } - } - else if (BindSpecialTarget(out IEnumerable _)) - { - var helpersHostItem = Wrap(Engine, ScriptableEnumerableHelpers.HostType, HostItemFlags.PrivateAccess); - if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)helpersHostItem).InvokeMethod("GetScriptableAsyncEnumerator", this, Engine))) - { - return enumerator; - } - } - } - - throw new NotSupportedException("The object is not async-enumerable"); - } - - #endregion - - #endregion } } diff --git a/ClearScript/HostItem.NetStandard.cs b/ClearScript/HostItem.NetStandard.cs index 8161bd6d0..ec7592560 100644 --- a/ClearScript/HostItem.NetStandard.cs +++ b/ClearScript/HostItem.NetStandard.cs @@ -1,12 +1,10 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; -using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using System.Reflection; using System.Runtime.InteropServices; using System.Runtime.InteropServices.Expando; using Microsoft.ClearScript.Util; @@ -30,60 +28,14 @@ private static HostItem Create(ScriptEngine engine, HostTarget target, HostItemF #endregion - #region internal members - - #region member invocation - - private object CreateAsyncEnumerator(IEnumerable enumerable) - { - return HostObject.Wrap(enumerable.GetEnumerator().ToScriptableAsyncEnumerator(Engine), typeof(IScriptableAsyncEnumerator)); - } - - private object CreateAsyncEnumerator() - { - if ((Target is HostObject) || (Target is IHostVariable) || (Target is IByRefArg)) - { - if ((Target.InvokeTarget != null) && Target.Type.IsAssignableToGenericType(typeof(IAsyncEnumerable<>), out var typeArgs)) - { - var helpersHostItem = Wrap(Engine, typeof(ScriptableEnumerableHelpers<>).MakeGenericType(typeArgs).InvokeMember("HostType", BindingFlags.Public | BindingFlags.Static | BindingFlags.GetField, null, null, null), HostItemFlags.PrivateAccess); - if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)helpersHostItem).InvokeMethod("GetScriptableAsyncEnumerator", this, Engine))) - { - return enumerator; - } - } - else if ((Target.InvokeTarget != null) && Target.Type.IsAssignableToGenericType(typeof(IEnumerable<>), out typeArgs)) - { - var helpersHostItem = Wrap(Engine, typeof(ScriptableEnumerableHelpers<>).MakeGenericType(typeArgs).InvokeMember("HostType", BindingFlags.Public | BindingFlags.Static | BindingFlags.GetField, null, null, null), HostItemFlags.PrivateAccess); - if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)helpersHostItem).InvokeMethod("GetScriptableAsyncEnumerator", this, Engine))) - { - return enumerator; - } - } - else if (BindSpecialTarget(out IEnumerable _)) - { - var helpersHostItem = Wrap(Engine, ScriptableEnumerableHelpers.HostType, HostItemFlags.PrivateAccess); - if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)helpersHostItem).InvokeMethod("GetScriptableAsyncEnumerator", this, Engine))) - { - return enumerator; - } - } - } - - throw new NotSupportedException("The object is not async-enumerable"); - } - - #endregion - - #endregion - #region Nested type: DispatchExHostItem private sealed class DispatchExHostItem : ExpandoHostItem { #region data - private static readonly Dictionary patchMap = new Dictionary(); - private readonly List expandoMembers = new List(); + private static readonly Dictionary patchMap = new(); + private readonly List expandoMembers = new(); #endregion @@ -187,10 +139,10 @@ private IEnumerable ReflectMembers private void EnsurePatched() { - using (var unknownScope = Scope.Create(() => Marshal.GetIUnknownForObject(this), pUnknown => Marshal.Release(pUnknown))) + using (var unknownScope = ScopeFactory.Create(static item => Marshal.GetIUnknownForObject(item), static pUnknown => Marshal.Release(pUnknown), this)) { var pUnknown = unknownScope.Value; - using (var dispatchExScope = Scope.Create(() => UnknownHelpers.QueryInterface(pUnknown), pDispatchEx => Marshal.Release(pDispatchEx))) + using (var dispatchExScope = ScopeFactory.Create(static pUnknown => UnknownHelpers.QueryInterface(pUnknown), static pDispatchEx => Marshal.Release(pDispatchEx), pUnknown)) { lock (VTablePatcher.PatchLock) { @@ -247,7 +199,7 @@ private void EnsurePatched() try { var item = Marshal.GetObjectForIUnknown(pThis) as DispatchExHostItem; - if (item == null) + if (item is null) { return origGetMemberProperties(pThis, dispid, fetchFlags, out propFlags); } @@ -352,7 +304,7 @@ protected override void RemoveExpandoMemberName(string name) private int GetDispID(string name, DispatchNameFlags nameFlags, out int dispid) { - var nameComparison = nameFlags.HasFlag(DispatchNameFlags.CaseInsensitive) ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; + var nameComparison = nameFlags.HasAllFlags(DispatchNameFlags.CaseInsensitive) ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; var member = ReflectMembers.Concat(expandoMembers).FirstOrDefault(testMember => string.Equals(testMember.Name, name, nameComparison)); if (!member.IsDefault) @@ -361,7 +313,7 @@ private int GetDispID(string name, DispatchNameFlags nameFlags, out int dispid) return HResult.S_OK; } - if (nameFlags.HasFlag(DispatchNameFlags.Ensure)) + if (nameFlags.HasAllFlags(DispatchNameFlags.Ensure)) { ThisExpando.AddProperty(name); return GetDispID(name, nameFlags & ~DispatchNameFlags.Ensure, out dispid); @@ -373,7 +325,7 @@ private int GetDispID(string name, DispatchNameFlags nameFlags, out int dispid) private int DeleteMemberByName(string name, DispatchNameFlags nameFlags) { - var nameComparison = nameFlags.HasFlag(DispatchNameFlags.CaseInsensitive) ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; + var nameComparison = nameFlags.HasAllFlags(DispatchNameFlags.CaseInsensitive) ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; var member = ReflectMembers.Concat(expandoMembers).FirstOrDefault(testMember => string.Equals(testMember.Name, name, nameComparison)); if (!member.IsDefault && RemoveMember(member.Name)) @@ -451,7 +403,7 @@ private int GetNextDispID(int dispidCurrent, out int dispidNext) private sealed class PatchEntry { // ReSharper disable once CollectionNeverQueried.Local - private readonly List delegates = new List(); + private readonly List delegates = new(); public void AddDelegate(Delegate del) { diff --git a/ClearScript/HostItem.cs b/ClearScript/HostItem.cs index 621a59a3f..cd58fe784 100644 --- a/ClearScript/HostItem.cs +++ b/ClearScript/HostItem.cs @@ -18,7 +18,7 @@ namespace Microsoft.ClearScript { - internal partial class HostItem : DynamicObject, IReflect, IDynamic, IEnumVARIANT, ICustomQueryInterface, IScriptMarshalWrapper, IHostTargetContext + internal partial class HostItem : DynamicObject, IReflect, IDynamic, IEnumVARIANT, ICustomQueryInterface, IHostItem, IHostTargetContext { #region data @@ -68,7 +68,7 @@ public static object Wrap(ScriptEngine engine, object obj, HostItemFlags flags) private static object Wrap(ScriptEngine engine, object obj, Type type, HostItemFlags flags) { - if (obj == null) + if (obj is null) { return null; } @@ -83,7 +83,7 @@ private static object Wrap(ScriptEngine engine, object obj, Type type, HostItemF return BindOrCreate(engine, hostTarget, flags); } - if (type == null) + if (type is null) { type = obj.GetTypeOrTypeInfo(); } @@ -120,9 +120,9 @@ public Invocability Invocability { get { - if (TargetInvocability == null) + if (TargetInvocability is null) { - TargetInvocability = Target.GetInvocability(this, GetCommonBindFlags(), Flags.HasFlag(HostItemFlags.HideDynamicMembers)); + TargetInvocability = Target.GetInvocability(this, GetCommonBindFlags(), Flags.HasAllFlags(HostItemFlags.HideDynamicMembers)); } return TargetInvocability.GetValueOrDefault(); @@ -152,17 +152,17 @@ public object InvokeMember(string name, BindingFlags invokeFlags, object[] args, return result; } - if (TargetDynamic != null) + if (TargetDynamic is not null) { return InvokeDynamicMember(name, invokeFlags, args); } - if (TargetPropertyBag != null) + if (TargetPropertyBag is not null) { return InvokePropertyBagMember(name, invokeFlags, args, bindArgs); } - if (TargetList != null) + if (TargetList is not null) { if (int.TryParse(name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var index)) { @@ -173,19 +173,19 @@ public object InvokeMember(string name, BindingFlags invokeFlags, object[] args, if (!bypassTunneling) { int testLength; - if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if (invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { - testLength = invokeFlags.HasFlag(BindingFlags.GetField) ? 0 : -1; + testLength = invokeFlags.HasAllFlags(BindingFlags.GetField) ? 0 : -1; } else { - testLength = invokeFlags.HasFlag(BindingFlags.SetField) ? 1 : 0; + testLength = invokeFlags.HasAllFlags(BindingFlags.SetField) ? 1 : 0; } if ((args.Length > testLength) && (name != SpecialMemberNames.Default)) { var value = GetHostProperty(name, GetCommonBindFlags(), ArrayHelpers.GetEmptyArray(), ArrayHelpers.GetEmptyArray(), false, out _); - if (!(value is Nonexistent)) + if (value is not Nonexistent) { if (Engine.MarshalToScript(value) is HostItem hostItem) { @@ -364,7 +364,7 @@ private Invocability? TargetInvocability private CustomAttributeLoader CurrentCustomAttributeLoader => Engine.CustomAttributeLoader; - private Type CurrentAccessContext => Flags.HasFlag(HostItemFlags.PrivateAccess) ? Target.Type : Engine.AccessContext; + private Type CurrentAccessContext => Flags.HasAllFlags(HostItemFlags.PrivateAccess) ? Target.Type : Engine.AccessContext; private ScriptAccess CurrentDefaultAccess => Engine.DefaultAccess; @@ -428,7 +428,7 @@ private static bool TargetSupportsExpandoMembers(HostTarget target, HostItemFlag return true; } - if (!flags.HasFlag(HostItemFlags.HideDynamicMembers) && typeof(IDynamicMetaObjectProvider).IsAssignableFrom(target.Type)) + if (!flags.HasAllFlags(HostItemFlags.HideDynamicMembers) && typeof(IDynamicMetaObjectProvider).IsAssignableFrom(target.Type)) { return true; } @@ -438,17 +438,17 @@ private static bool TargetSupportsExpandoMembers(HostTarget target, HostItemFlag private bool CanAddExpandoMembers() { - return (TargetDynamic != null) || ((TargetPropertyBag != null) && !TargetPropertyBag.IsReadOnly) || (TargetDynamicMetaObject != null); + return (TargetDynamic is not null) || ((TargetPropertyBag is not null) && !TargetPropertyBag.IsReadOnly) || (TargetDynamicMetaObject is not null); } private static object BindOrCreate(ScriptEngine engine, object target, Type type, HostItemFlags flags) { - return BindOrCreate(engine, HostObject.Wrap(target, type), flags); + return engine.GetOrCreateHostItem(CanonicalRefTable.GetCanonicalRef(target), type, true, flags, static (engine, target, flags) => Create(engine, target, flags)); } private static object BindOrCreate(ScriptEngine engine, HostTarget target, HostItemFlags flags) { - return engine.GetOrCreateHostItem(target, flags, Create); + return engine.GetOrCreateHostItem(target, flags, static (engine, target, flags) => Create(engine, target, flags)); } private void BindSpecialTarget() @@ -468,7 +468,7 @@ private void BindSpecialTarget() } else { - if (!Flags.HasFlag(HostItemFlags.HideDynamicMembers) && BindSpecialTarget(out IDynamicMetaObjectProvider dynamicMetaObjectProvider)) + if (!Flags.HasAllFlags(HostItemFlags.HideDynamicMembers) && BindSpecialTarget(out IDynamicMetaObjectProvider dynamicMetaObjectProvider)) { var dynamicMetaObject = dynamicMetaObjectProvider.GetMetaObject(Expression.Constant(Target.InvokeTarget)); TargetDynamicMetaObject = new DynamicHostMetaObject(dynamicMetaObjectProvider, dynamicMetaObject); @@ -497,7 +497,7 @@ private bool BindSpecialTarget(CollateralObject property) where private bool BindSpecialTarget(out T specialTarget) where T : class { - if (Target.InvokeTarget == null) + if (Target.InvokeTarget is null) { specialTarget = null; return false; @@ -528,23 +528,23 @@ private bool BindSpecialTarget(out T specialTarget) where T : class if (typeof(IList).IsAssignableFrom(Target.Type)) { specialTarget = new HostList(Engine, (IList)Target.InvokeTarget, typeArgs[0]) as T; - return specialTarget != null; + return specialTarget is not null; } - specialTarget = typeof(HostList<>).MakeGenericType(typeArgs).CreateInstance(Engine, Target.InvokeTarget) as T; - return specialTarget != null; + specialTarget = Activator.CreateInstance(typeof(HostList<>).MakeGenericType(typeArgs), Engine, Target.InvokeTarget) as T; + return specialTarget is not null; } if (typeof(IList).IsAssignableFrom(Target.Type)) { specialTarget = new HostList(Engine, (IList)Target.InvokeTarget, typeof(object)) as T; - return specialTarget != null; + return specialTarget is not null; } if (Target.Type.IsAssignableToGenericType(typeof(IReadOnlyList<>), out typeArgs)) { - specialTarget = typeof(ReadOnlyHostList<>).MakeGenericType(typeArgs).CreateInstance(Engine, Target.InvokeTarget) as T; - return specialTarget != null; + specialTarget = Activator.CreateInstance(typeof(ReadOnlyHostList<>).MakeGenericType(typeArgs), Engine, Target.InvokeTarget) as T; + return specialTarget is not null; } specialTarget = null; @@ -557,7 +557,7 @@ private bool BindSpecialTarget(out T specialTarget) where T : class if (typeof(T).IsAssignableFrom(Target.Type)) { specialTarget = Target.InvokeTarget as T; - return specialTarget != null; + return specialTarget is not null; } specialTarget = null; @@ -566,7 +566,7 @@ private bool BindSpecialTarget(out T specialTarget) where T : class private void BindTargetMemberData() { - if ((targetMemberData == null) || (CustomAttributeLoader != CurrentCustomAttributeLoader) || (AccessContext != CurrentAccessContext) || (DefaultAccess != CurrentDefaultAccess) || (TargetFlags != CurrentTargetFlags)) + if ((targetMemberData is null) || (CustomAttributeLoader != CurrentCustomAttributeLoader) || (AccessContext != CurrentAccessContext) || (DefaultAccess != CurrentDefaultAccess) || (TargetFlags != CurrentTargetFlags)) { if (Target is HostMethod) { @@ -591,7 +591,7 @@ private void BindTargetMemberData() if (Target is HostObject hostObject) { - if ((TargetDynamic == null) && (TargetPropertyBag == null) && (TargetList == null) && (TargetDynamicMetaObject == null)) + if ((TargetDynamic is null) && (TargetPropertyBag is null) && (TargetList is null) && (TargetDynamicMetaObject is null)) { // host objects without dynamic members can share their member data targetMemberData = Engine.GetSharedHostObjectMemberData(hostObject, CurrentCustomAttributeLoader, CurrentAccessContext, CurrentDefaultAccess, CurrentTargetFlags); @@ -615,7 +615,7 @@ private static bool TargetSupportsSpecialTargets(HostTarget target) private string[] GetLocalEventNames() { - if (TypeEventNames == null) + if (TypeEventNames is null) { var localEvents = Target.Type.GetScriptableEvents(this, GetCommonBindFlags()); TypeEventNames = localEvents.Select(eventInfo => eventInfo.GetScriptName(this)).ToArray(); @@ -626,7 +626,7 @@ private string[] GetLocalEventNames() private string[] GetLocalFieldNames() { - if (TypeFieldNames == null) + if (TypeFieldNames is null) { var localFields = Target.Type.GetScriptableFields(this, GetCommonBindFlags()); TypeFieldNames = localFields.Select(field => field.GetScriptName(this)).ToArray(); @@ -637,7 +637,7 @@ private string[] GetLocalFieldNames() private string[] GetLocalMethodNames() { - if (TypeMethodNames == null) + if (TypeMethodNames is null) { var localMethods = Target.Type.GetScriptableMethods(this, GetMethodBindFlags()); TypeMethodNames = localMethods.Select(method => method.GetScriptName(this)).ToArray(); @@ -648,7 +648,7 @@ private string[] GetLocalMethodNames() private string[] GetLocalPropertyNames() { - if (TypePropertyNames == null) + if (TypePropertyNames is null) { var localProperties = Target.Type.GetScriptableProperties(this, GetCommonBindFlags()); TypePropertyNames = localProperties.Select(property => property.GetScriptName(this)).ToArray(); @@ -659,7 +659,7 @@ private string[] GetLocalPropertyNames() private string[] GetAllFieldNames() { - if ((TargetDynamic == null) && (TargetPropertyBag == null)) + if ((TargetDynamic is null) && (TargetPropertyBag is null)) { return GetLocalFieldNames().Concat(GetLocalEventNames()).Distinct().ToArray(); } @@ -672,10 +672,10 @@ private string[] GetAllMethodNames(out string[] ownMethodNames) ownMethodNames = null; var names = Target.GetAuxMethodNames(this, GetMethodBindFlags()).AsEnumerable() ?? Enumerable.Empty(); - if ((TargetDynamic == null) && (TargetPropertyBag == null)) + if ((TargetDynamic is null) && (TargetPropertyBag is null)) { names = names.Concat(GetLocalMethodNames()); - if (TargetFlags.HasFlag(HostTargetFlags.AllowExtensionMethods)) + if (TargetFlags.HasAllFlags(HostTargetFlags.AllowExtensionMethods)) { var extensionMethodSummary = Engine.ExtensionMethodSummary; ExtensionMethodSummary = extensionMethodSummary; @@ -690,7 +690,7 @@ private string[] GetAllMethodNames(out string[] ownMethodNames) } var result = names.Distinct().ToArray(); - if (ownMethodNames == null) + if (ownMethodNames is null) { ownMethodNames = result; } @@ -701,12 +701,12 @@ private string[] GetAllMethodNames(out string[] ownMethodNames) private string[] GetAllPropertyNames() { var names = Target.GetAuxPropertyNames(this, GetCommonBindFlags()).AsEnumerable() ?? Enumerable.Empty(); - if (TargetDynamic != null) + if (TargetDynamic is not null) { names = names.Concat(TargetDynamic.GetPropertyNames()); names = names.Concat(TargetDynamic.GetPropertyIndices().Select(index => index.ToString(CultureInfo.InvariantCulture))); } - else if (TargetPropertyBag != null) + else if (TargetPropertyBag is not null) { names = names.Concat(TargetPropertyBag.Keys); } @@ -714,7 +714,7 @@ private string[] GetAllPropertyNames() { names = names.Concat(GetLocalPropertyNames()); - if (TargetList != null) + if (TargetList is not null) { CachedListCount = TargetList.Count; if (CachedListCount > 0) @@ -723,13 +723,13 @@ private string[] GetAllPropertyNames() } } - if (TargetDynamicMetaObject != null) + if (TargetDynamicMetaObject is not null) { names = names.Concat(TargetDynamicMetaObject.GetDynamicMemberNames()); } } - if (ExpandoMemberNames != null) + if (ExpandoMemberNames is not null) { names = names.Except(ExpandoMemberNames); } @@ -739,7 +739,7 @@ private string[] GetAllPropertyNames() private void UpdateFieldNames(out bool updated) { - if (AllFieldNames == null) + if (AllFieldNames is null) { AllFieldNames = GetAllFieldNames(); updated = true; @@ -752,8 +752,8 @@ private void UpdateFieldNames(out bool updated) private void UpdateMethodNames(out bool updated) { - if ((AllMethodNames == null) || - (TargetFlags.HasFlag(HostTargetFlags.AllowExtensionMethods) && (ExtensionMethodSummary != Engine.ExtensionMethodSummary))) + if ((AllMethodNames is null) || + (TargetFlags.HasAllFlags(HostTargetFlags.AllowExtensionMethods) && (ExtensionMethodSummary != Engine.ExtensionMethodSummary))) { AllMethodNames = GetAllMethodNames(out var ownMethodNames); OwnMethodNames = ownMethodNames; @@ -767,11 +767,11 @@ private void UpdateMethodNames(out bool updated) private void UpdatePropertyNames(out bool updated) { - if ((AllPropertyNames == null) || - (TargetDynamic != null) || - (TargetPropertyBag != null) || - (TargetDynamicMetaObject != null) || - ((TargetList != null) && (CachedListCount != TargetList.Count))) + if ((AllPropertyNames is null) || + (TargetDynamic is not null) || + (TargetPropertyBag is not null) || + (TargetDynamicMetaObject is not null) || + ((TargetList is not null) && (CachedListCount != TargetList.Count))) { AllPropertyNames = GetAllPropertyNames(); updated = true; @@ -798,7 +798,7 @@ private void UpdateEnumerationSettingsToken(out bool updated) protected virtual void AddExpandoMemberName(string name) { - if (ExpandoMemberNames == null) + if (ExpandoMemberNames is null) { ExpandoMemberNames = new HashSet(); } @@ -821,22 +821,22 @@ protected virtual void RemoveExpandoMemberName(string name) private StringComparer MemberNameComparer => UseCaseInsensitiveMemberBinding ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal; - private T HostInvoke(Func func) + private TResult HostInvoke(Func func, in TArg arg) { BindTargetMemberData(); - return Engine.HostInvoke(func); + return Engine.HostInvoke(func, arg); } private BindingFlags GetCommonBindFlags() { var bindFlags = BindingFlags.Public | BindingFlags.NonPublic; - if (TargetFlags.HasFlag(HostTargetFlags.AllowStaticMembers)) + if (TargetFlags.HasAllFlags(HostTargetFlags.AllowStaticMembers)) { bindFlags |= BindingFlags.Static | BindingFlags.FlattenHierarchy; } - if (TargetFlags.HasFlag(HostTargetFlags.AllowInstanceMembers)) + if (TargetFlags.HasAllFlags(HostTargetFlags.AllowInstanceMembers)) { bindFlags |= BindingFlags.Instance; } @@ -878,7 +878,7 @@ private void AdjustInvokeFlags(ref BindingFlags invokeFlags) invokeFlags |= onFlags; invokeFlags &= ~offFlags; - if (TargetFlags.HasFlag(HostTargetFlags.AllowStaticMembers)) + if (TargetFlags.HasAllFlags(HostTargetFlags.AllowStaticMembers)) { invokeFlags |= BindingFlags.Static | BindingFlags.FlattenHierarchy; } @@ -887,7 +887,7 @@ private void AdjustInvokeFlags(ref BindingFlags invokeFlags) invokeFlags &= ~BindingFlags.Static; } - if (TargetFlags.HasFlag(HostTargetFlags.AllowInstanceMembers)) + if (TargetFlags.HasAllFlags(HostTargetFlags.AllowInstanceMembers)) { invokeFlags |= BindingFlags.Instance; } @@ -905,7 +905,7 @@ private void AdjustInvokeFlags(ref BindingFlags invokeFlags) invokeFlags &= ~BindingFlags.IgnoreCase; } - if (invokeFlags.HasFlag(BindingFlags.GetProperty)) + if (invokeFlags.HasAllFlags(BindingFlags.GetProperty)) { invokeFlags |= BindingFlags.GetField; } @@ -923,52 +923,57 @@ private object InvokeReflectMember(string name, BindingFlags invokeFlags, object private object InvokeReflectMember(string name, BindingFlags invokeFlags, object[] wrappedArgs, CultureInfo culture, string[] namedParams, out bool isCacheable) { - var resultIsCacheable = false; - var result = Engine.MarshalToScript(HostInvoke(() => - { - var args = Engine.MarshalToHost(wrappedArgs, false); + var ctx = (self: this, name, invokeFlags, wrappedArgs, culture, namedParams, isCacheable: false); - var argOffset = 0; - if ((namedParams != null) && (namedParams.Length > 0) && (namedParams[0] == SpecialParamNames.This)) + var result = Engine.MarshalToScript(HostInvoke( + static pCtx => { - args = args.Skip(1).ToArray(); - argOffset = 1; - } + ref var ctx = ref pCtx.AsRef(); + var args = ctx.self.Engine.MarshalToHost(ctx.wrappedArgs, false); - var bindArgs = args; - if ((args.Length > 0) && (invokeFlags.HasFlag(BindingFlags.InvokeMethod) || invokeFlags.HasFlag(BindingFlags.CreateInstance))) - { - bindArgs = Engine.MarshalToHost(wrappedArgs, true); - if (argOffset > 0) + var argOffset = 0; + if ((ctx.namedParams is not null) && (ctx.namedParams.Length > 0) && (ctx.namedParams[0] == SpecialParamNames.This)) { - bindArgs = bindArgs.Skip(argOffset).ToArray(); + args = args.Skip(1).ToArray(); + argOffset = 1; } - var savedArgs = (object[])args.Clone(); - var tempResult = InvokeMember(name, invokeFlags, args, bindArgs, culture, false, out resultIsCacheable); - - for (var index = 0; index < args.Length; index++) + var bindArgs = args; + if ((args.Length > 0) && (ctx.invokeFlags.HasAllFlags(BindingFlags.InvokeMethod) || ctx.invokeFlags.HasAllFlags(BindingFlags.CreateInstance))) { - var arg = args[index]; - if (!ReferenceEquals(arg, savedArgs[index])) + bindArgs = ctx.self.Engine.MarshalToHost(ctx.wrappedArgs, true); + if (argOffset > 0) { - wrappedArgs[argOffset + index] = Engine.MarshalToScript(arg); + bindArgs = bindArgs.Skip(argOffset).ToArray(); } - } - return tempResult; - } + var savedArgs = (object[])args.Clone(); + var tempResult = ctx.self.InvokeMember(ctx.name, ctx.invokeFlags, args, bindArgs, ctx.culture, false, out ctx.isCacheable); - return InvokeMember(name, invokeFlags, args, bindArgs, culture, false, out resultIsCacheable); - })); + for (var index = 0; index < args.Length; index++) + { + var arg = args[index]; + if (!ReferenceEquals(arg, savedArgs[index])) + { + ctx.wrappedArgs[argOffset + index] = ctx.self.Engine.MarshalToScript(arg); + } + } - isCacheable = resultIsCacheable; + return tempResult; + } + + return ctx.self.InvokeMember(ctx.name, ctx.invokeFlags, args, bindArgs, ctx.culture, false, out ctx.isCacheable); + }, + StructPtr.FromRef(ref ctx) + )); + + isCacheable = ctx.isCacheable; return result; } private object InvokeDynamicMember(string name, BindingFlags invokeFlags, object[] args) { - if (invokeFlags.HasFlag(BindingFlags.CreateInstance)) + if (invokeFlags.HasAllFlags(BindingFlags.CreateInstance)) { if (name == SpecialMemberNames.Default) { @@ -978,7 +983,7 @@ private object InvokeDynamicMember(string name, BindingFlags invokeFlags, object throw new InvalidOperationException("Invalid constructor invocation"); } - if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if (invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { if (name == SpecialMemberNames.Default) { @@ -988,7 +993,7 @@ private object InvokeDynamicMember(string name, BindingFlags invokeFlags, object } catch { - if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField) && (args.Length < 1)) { return Target; } @@ -1003,7 +1008,7 @@ private object InvokeDynamicMember(string name, BindingFlags invokeFlags, object } catch { - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { return TargetDynamic.GetProperty(name, args); } @@ -1012,12 +1017,12 @@ private object InvokeDynamicMember(string name, BindingFlags invokeFlags, object } } - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { return TargetDynamic.GetProperty(name, args); } - if (invokeFlags.HasFlag(BindingFlags.SetField)) + if (invokeFlags.HasAllFlags(BindingFlags.SetField)) { if (args.Length > 0) { @@ -1033,13 +1038,13 @@ private object InvokeDynamicMember(string name, BindingFlags invokeFlags, object private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, object[] args, object[] bindArgs) { - if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if (invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { object value; if (name == SpecialMemberNames.Default) { - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { if (args.Length < 1) { @@ -1075,7 +1080,7 @@ private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, ob return result; } - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { if (args.Length < 1) { @@ -1084,7 +1089,7 @@ private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, ob if (args.Length == 1) { - if (value == null) + if (value is null) { throw new InvalidOperationException("Cannot invoke a null property value"); } @@ -1096,7 +1101,7 @@ private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, ob throw new NotSupportedException("The object does not support the requested invocation operation"); } - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { if (name == SpecialMemberNames.Default) { @@ -1126,7 +1131,7 @@ private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, ob throw new InvalidOperationException("Invalid argument count"); } - if (invokeFlags.HasFlag(BindingFlags.SetField)) + if (invokeFlags.HasAllFlags(BindingFlags.SetField)) { if (name == SpecialMemberNames.Default) { @@ -1147,7 +1152,7 @@ private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, ob { if (TargetPropertyBag.TryGetValue(name, out var value)) { - if (value == null) + if (value is null) { throw new InvalidOperationException("Cannot invoke a null property value"); } @@ -1166,14 +1171,14 @@ private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, ob private object InvokeListElement(int index, BindingFlags invokeFlags, object[] args, object[] bindArgs) { - if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if (invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { if (InvokeHelpers.TryInvokeObject(this, TargetList[index], invokeFlags, args, bindArgs, true, out var result)) { return result; } - if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField) && (args.Length < 1)) { return TargetList[index]; } @@ -1181,7 +1186,7 @@ private object InvokeListElement(int index, BindingFlags invokeFlags, object[] a throw new NotSupportedException("The object does not support the requested invocation operation"); } - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { if (args.Length < 1) { @@ -1191,7 +1196,7 @@ private object InvokeListElement(int index, BindingFlags invokeFlags, object[] a throw new InvalidOperationException("Invalid argument count"); } - if (invokeFlags.HasFlag(BindingFlags.SetField)) + if (invokeFlags.HasAllFlags(BindingFlags.SetField)) { if (args.Length == 1) { @@ -1209,7 +1214,7 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[] isCacheable = false; object result; - if (invokeFlags.HasFlag(BindingFlags.CreateInstance)) + if (invokeFlags.HasAllFlags(BindingFlags.CreateInstance)) { if (name == SpecialMemberNames.Default) { @@ -1223,7 +1228,7 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[] if (hostType.TryInvoke(this, BindingFlags.InvokeMethod, typeArgs, typeArgs, out result)) { hostType = result as HostType; - if (hostType != null) + if (hostType is not null) { args = args.Skip(typeArgs.Length).ToArray(); bindArgs = bindArgs.Skip(typeArgs.Length).ToArray(); @@ -1262,7 +1267,7 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[] return type.CreateInstance(this, Target, args, bindArgs); } - if (TargetDynamicMetaObject != null) + if (TargetDynamicMetaObject is not null) { if (TargetDynamicMetaObject.TryCreateInstance(args, out result)) { @@ -1274,19 +1279,19 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[] throw new InvalidOperationException("Invalid constructor invocation"); } - if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if (invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { if (name == SpecialMemberNames.Default) { - if (InvokeHelpers.TryInvokeObject(this, Target, invokeFlags, args, bindArgs, TargetDynamicMetaObject != null, out result)) + if (InvokeHelpers.TryInvokeObject(this, Target, invokeFlags, args, bindArgs, TargetDynamicMetaObject is not null, out result)) { return result; } - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { result = GetHostProperty(name, invokeFlags, args, bindArgs, true, out isCacheable); - if (!(result is Nonexistent)) + if (result is not Nonexistent) { return result; } @@ -1296,7 +1301,7 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[] return Target; } - if (TargetDynamicMetaObject != null) + if (TargetDynamicMetaObject is not null) { // dynamic target; don't throw for default indexed property retrieval failure @@ -1317,7 +1322,7 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[] return CreateAsyncEnumerator(); } - if ((TargetDynamicMetaObject != null) && TargetDynamicMetaObject.HasMember(name, invokeFlags.HasFlag(BindingFlags.IgnoreCase))) + if ((TargetDynamicMetaObject is not null) && TargetDynamicMetaObject.HasMember(name, invokeFlags.HasAllFlags(BindingFlags.IgnoreCase))) { if (TargetDynamicMetaObject.TryInvokeMember(this, name, invokeFlags, args, out result)) { @@ -1345,7 +1350,7 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[] try { - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { return GetHostProperty(name, invokeFlags, args, bindArgs, true, out isCacheable); } @@ -1365,7 +1370,7 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[] } } - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { return GetHostProperty(name, invokeFlags, args, bindArgs, true, out isCacheable); } @@ -1373,12 +1378,12 @@ private object InvokeHostMember(string name, BindingFlags invokeFlags, object[] throw new MissingMethodException(MiscHelpers.FormatInvariant("The object has no suitable method named '{0}'", name)); } - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { return GetHostProperty(name, invokeFlags, args, bindArgs, true, out isCacheable); } - if (invokeFlags.HasFlag(BindingFlags.SetField)) + if (invokeFlags.HasAllFlags(BindingFlags.SetField)) { return SetHostProperty(name, invokeFlags, args, bindArgs); } @@ -1407,7 +1412,7 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a if (name == SpecialMemberNames.Default) { var defaultProperty = Target.Type.GetScriptableDefaultProperty(this, invokeFlags, args, bindArgs); - if (defaultProperty != null) + if (defaultProperty is not null) { return GetHostProperty(signature, defaultProperty, invokeFlags, args); } @@ -1436,7 +1441,7 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a } } - if (TargetDynamicMetaObject != null) + if (TargetDynamicMetaObject is not null) { if (TargetDynamicMetaObject.TryGetIndex(args, out var result)) { @@ -1457,12 +1462,12 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a return CreateAsyncEnumerator(); } - if ((TargetDynamicMetaObject != null) && (args.Length < 1)) + if ((TargetDynamicMetaObject is not null) && (args.Length < 1)) { int index; object result; - if (TargetDynamicMetaObject.HasMember(name, invokeFlags.HasFlag(BindingFlags.IgnoreCase))) + if (TargetDynamicMetaObject.HasMember(name, invokeFlags.HasAllFlags(BindingFlags.IgnoreCase))) { if (TargetDynamicMetaObject.TryGetMember(name, out result)) { @@ -1484,7 +1489,7 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a if (includeBoundMembers) { - if (HostMethodMap == null) + if (HostMethodMap is null) { HostMethodMap = new Dictionary(MemberNameComparer); } @@ -1516,7 +1521,7 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a } var property = Target.Type.GetScriptableProperty(this, name, invokeFlags, args, bindArgs); - if (property != null) + if (property is not null) { return GetHostProperty(signature, property, invokeFlags, args); } @@ -1527,14 +1532,14 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a } var eventInfo = Target.Type.GetScriptableEvent(this, name, invokeFlags); - if (eventInfo != null) + if (eventInfo is not null) { - isCacheable = (TargetDynamicMetaObject == null); + isCacheable = (TargetDynamicMetaObject is null); return typeof(EventSource<>).MakeSpecificType(eventInfo.EventHandlerType).CreateInstance(BindingFlags.NonPublic, Engine, Target.InvokeTarget, eventInfo); } var field = Target.Type.GetScriptableField(this, name, invokeFlags); - if (field != null) + if (field is not null) { return GetHostField(signature, field, out isCacheable); } @@ -1543,7 +1548,7 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a { if (Target.Type.GetScriptableProperties(this, name, invokeFlags).Any()) { - if (HostIndexedPropertyMap == null) + if (HostIndexedPropertyMap is null) { HostIndexedPropertyMap = new Dictionary(); } @@ -1558,9 +1563,9 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a } var method = ThisReflect.GetMethods(GetMethodBindFlags()).FirstOrDefault(testMethod => string.Equals(testMethod.Name, name, MemberNameComparison)); - if (method != null) + if (method is not null) { - if (HostMethodMap == null) + if (HostMethodMap is null) { HostMethodMap = new Dictionary(MemberNameComparer); } @@ -1571,7 +1576,7 @@ private object GetHostProperty(string name, BindingFlags invokeFlags, object[] a HostMethodMap.Add(name, hostMethod); } - isCacheable = (TargetDynamicMetaObject == null); + isCacheable = (TargetDynamicMetaObject is null); return hostMethod; } } @@ -1586,9 +1591,9 @@ private object GetHostProperty(BindSignature signature, PropertyInfo property, B Engine.CheckReflection(); } - if ((property.GetIndexParameters().Length > 0) && (args.Length < 1) && !invokeFlags.HasFlag(BindingFlags.SuppressChangeType)) + if ((property.GetIndexParameters().Length > 0) && (args.Length < 1) && !invokeFlags.HasAllFlags(BindingFlags.SuppressChangeType)) { - if (HostIndexedPropertyMap == null) + if (HostIndexedPropertyMap is null) { HostIndexedPropertyMap = new Dictionary(); } @@ -1604,7 +1609,7 @@ private object GetHostProperty(BindSignature signature, PropertyInfo property, B } var getMethod = property.GetMethod; - if ((getMethod == null) || !getMethod.IsAccessible(this) || getMethod.IsBlockedFromScript(this, property.GetScriptAccess(this, DefaultAccess), false)) + if ((getMethod is null) || !getMethod.IsAccessible(this) || getMethod.IsBlockedFromScript(this, property.GetScriptAccess(this, DefaultAccess), false)) { throw new UnauthorizedAccessException("The property get method is unavailable or inaccessible"); } @@ -1627,7 +1632,7 @@ private object GetHostField(BindSignature signature, FieldInfo field, out bool i private object GetHostFieldWorker(FieldInfo field, out bool isCacheable) { var result = field.GetValue(Target.InvokeTarget); - isCacheable = (TargetDynamicMetaObject == null) && (field.IsLiteral || field.IsInitOnly); + isCacheable = (TargetDynamicMetaObject is null) && (field.IsLiteral || field.IsInitOnly); return Engine.PrepareResult(result, field.FieldType, field.GetScriptMemberFlags(this), false); } @@ -1657,7 +1662,7 @@ private object SetHostProperty(string name, BindingFlags invokeFlags, object[] a object result; var defaultProperty = Target.Type.GetScriptableDefaultProperty(this, invokeFlags, args.Take(args.Length - 1).ToArray(), bindArgs.Take(bindArgs.Length - 1).ToArray()); - if (defaultProperty != null) + if (defaultProperty is not null) { return SetHostProperty(signature, defaultProperty, args, bindArgs); } @@ -1693,7 +1698,7 @@ private object SetHostProperty(string name, BindingFlags invokeFlags, object[] a } } - if (TargetDynamicMetaObject != null) + if (TargetDynamicMetaObject is not null) { if (TargetDynamicMetaObject.TrySetIndex(args.Take(args.Length - 1).ToArray(), args[args.Length - 1], out result)) { @@ -1711,7 +1716,7 @@ private object SetHostProperty(string name, BindingFlags invokeFlags, object[] a throw new InvalidOperationException("Invalid property assignment"); } - if ((TargetDynamicMetaObject != null) && (args.Length == 1)) + if ((TargetDynamicMetaObject is not null) && (args.Length == 1)) { if (TargetDynamicMetaObject.TrySetMember(name, args[0], out var result)) { @@ -1738,13 +1743,13 @@ private object SetHostProperty(string name, BindingFlags invokeFlags, object[] a } var property = Target.Type.GetScriptableProperty(this, name, invokeFlags, args.Take(args.Length - 1).ToArray(), bindArgs.Take(bindArgs.Length - 1).ToArray()); - if (property != null) + if (property is not null) { return SetHostProperty(signature, property, args, bindArgs); } var field = Target.Type.GetScriptableField(this, name, invokeFlags); - if (field != null) + if (field is not null) { return SetHostField(signature, field, args); } @@ -1761,7 +1766,7 @@ private object SetHostProperty(BindSignature signature, PropertyInfo property, o } var setMethod = property.SetMethod; - if ((setMethod == null) || !setMethod.IsAccessible(this) || setMethod.IsBlockedFromScript(this, scriptAccess, false)) + if ((setMethod is null) || !setMethod.IsAccessible(this) || setMethod.IsBlockedFromScript(this, scriptAccess, false)) { throw new UnauthorizedAccessException("The property set method is unavailable or inaccessible"); } @@ -1784,14 +1789,14 @@ private object SetHostPropertyWorker(PropertyInfo property, MethodInfo setMethod } // ReSharper disable once SuspiciousTypeConversion.Global - if ((value != null) && (Engine is IVBScriptEngineTag)) + if ((value is not null) && (Engine is IVBScriptEngineTag)) { // special case to emulate VBScript's default property handling if (value is IWindowsScriptItemTag) { var defaultValue = ((IDynamic)value).GetProperty(SpecialMemberNames.Default); - if (!(defaultValue is Undefined)) + if (defaultValue is not Undefined) { value = defaultValue; } @@ -1800,7 +1805,7 @@ private object SetHostPropertyWorker(PropertyInfo property, MethodInfo setMethod { if (Wrap(Engine, bindArgs[bindArgs.Length - 1]) is HostItem hostItem) { - if (MiscHelpers.Try(out var defaultValue, () => ((IDynamic)hostItem).GetProperty(SpecialMemberNames.Default)) && (defaultValue != null)) + if (MiscHelpers.Try(out var defaultValue, static hostItem => ((IDynamic)hostItem).GetProperty(SpecialMemberNames.Default), hostItem) && (defaultValue is not null)) { value = defaultValue; } @@ -1826,7 +1831,7 @@ private object SetHostPropertyWorker(PropertyInfo property, MethodInfo setMethod return value; } - throw new ArgumentException("Invalid property assignment"); + throw new ArgumentException("Invalid property assignment", nameof(args)); } private object SetHostField(BindSignature signature, FieldInfo field, object[] args) @@ -1854,7 +1859,7 @@ private object SetHostFieldWorker(FieldInfo field, object[] args) return value; } - throw new ArgumentException("Invalid field assignment"); + throw new ArgumentException("Invalid field assignment", nameof(args)); } private static object CreateScriptableEnumerator(IEnumerable enumerable) @@ -1866,10 +1871,10 @@ private object CreateScriptableEnumerator() { if ((Target is HostObject) || (Target is IHostVariable) || (Target is IByRefArg)) { - if ((Target.InvokeTarget != null) && Target.Type.IsAssignableToGenericType(typeof(IEnumerable<>), out var typeArgs)) + if ((Target.InvokeTarget is not null) && Target.Type.IsAssignableToGenericType(typeof(IEnumerable<>), out var typeArgs)) { var helpersHostItem = Wrap(Engine, typeof(ScriptableEnumerableHelpers<>).MakeGenericType(typeArgs).InvokeMember("HostType", BindingFlags.Public | BindingFlags.Static | BindingFlags.GetField, null, null, null), HostItemFlags.PrivateAccess); - if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)helpersHostItem).InvokeMethod("GetScriptableEnumerator", this))) + if (MiscHelpers.Try(out var enumerator, static ctx => ((IDynamic)ctx.helpersHostItem).InvokeMethod("GetScriptableEnumerator", ctx.self), (self: this, helpersHostItem))) { return enumerator; } @@ -1877,7 +1882,7 @@ private object CreateScriptableEnumerator() else if (BindSpecialTarget(out IEnumerable _)) { var helpersHostItem = Wrap(Engine, ScriptableEnumerableHelpers.HostType, HostItemFlags.PrivateAccess); - if (MiscHelpers.Try(out var enumerator, () => ((IDynamic)helpersHostItem).InvokeMethod("GetScriptableEnumerator", this))) + if (MiscHelpers.Try(out var enumerator, static ctx => ((IDynamic)ctx.helpersHostItem).InvokeMethod("GetScriptableEnumerator", ctx.self), (self: this, helpersHostItem))) { return enumerator; } @@ -1887,6 +1892,45 @@ private object CreateScriptableEnumerator() throw new NotSupportedException("The object is not enumerable"); } + private object CreateAsyncEnumerator(IEnumerable enumerable) + { + // ReSharper disable once NotDisposedResource + return HostObject.Wrap(new ScriptableAsyncEnumeratorOnEnumerator(Engine, enumerable.GetEnumerator()), typeof(IScriptableAsyncEnumerator)); + } + + private object CreateAsyncEnumerator() + { + if ((Target is HostObject) || (Target is IHostVariable) || (Target is IByRefArg)) + { + if ((Target.InvokeTarget is not null) && Target.Type.IsAssignableToGenericType(typeof(IAsyncEnumerable<>), out var typeArgs)) + { + var helpersHostItem = Wrap(Engine, typeof(ScriptableEnumerableHelpers<>).MakeGenericType(typeArgs).InvokeMember("HostType", BindingFlags.Public | BindingFlags.Static | BindingFlags.GetField, null, null, null), HostItemFlags.PrivateAccess); + if (MiscHelpers.Try(out var enumerator, static ctx => ((IDynamic)ctx.helpersHostItem).InvokeMethod("GetScriptableAsyncEnumerator", ctx.self, ctx.self.Engine), (self: this, helpersHostItem))) + { + return enumerator; + } + } + else if ((Target.InvokeTarget is not null) && Target.Type.IsAssignableToGenericType(typeof(IEnumerable<>), out typeArgs)) + { + var helpersHostItem = Wrap(Engine, typeof(ScriptableEnumerableHelpers<>).MakeGenericType(typeArgs).InvokeMember("HostType", BindingFlags.Public | BindingFlags.Static | BindingFlags.GetField, null, null, null), HostItemFlags.PrivateAccess); + if (MiscHelpers.Try(out var enumerator, static ctx => ((IDynamic)ctx.helpersHostItem).InvokeMethod("GetScriptableAsyncEnumerator", ctx.self, ctx.self.Engine), (self: this, helpersHostItem))) + { + return enumerator; + } + } + else if (BindSpecialTarget(out IEnumerable _)) + { + var helpersHostItem = Wrap(Engine, ScriptableEnumerableHelpers.HostType, HostItemFlags.PrivateAccess); + if (MiscHelpers.Try(out var enumerator, static ctx => ((IDynamic)ctx.helpersHostItem).InvokeMethod("GetScriptableAsyncEnumerator", ctx.self, ctx.self.Engine), (self: this, helpersHostItem))) + { + return enumerator; + } + } + } + + throw new NotSupportedException("The object is not async-enumerable"); + } + #endregion #endregion @@ -2014,16 +2058,19 @@ FieldInfo IReflect.GetField(string name, BindingFlags bindFlags) FieldInfo[] IReflect.GetFields(BindingFlags bindFlags) { - return HostInvoke(() => - { - UpdateFieldNames(out var updated); - if (updated || (AllFields == null)) + return HostInvoke( + static self => { - AllFields = MemberMap.GetFields(AllFieldNames); - } + self.UpdateFieldNames(out var updated); + if (updated || (self.AllFields is null)) + { + self.AllFields = MemberMap.GetFields(self.AllFieldNames); + } - return AllFields; - }); + return self.AllFields; + }, + this + ); } MemberInfo[] IReflect.GetMember(string name, BindingFlags bindFlags) @@ -2059,30 +2106,36 @@ MethodInfo IReflect.GetMethod(string name, BindingFlags bindFlags, Binder binder MethodInfo[] IReflect.GetMethods(BindingFlags bindFlags) { - return HostInvoke(() => - { - UpdateMethodNames(out var updated); - if (updated || (AllMethods == null)) + return HostInvoke( + static self => { - AllMethods = MemberMap.GetMethods(AllMethodNames); - } + self.UpdateMethodNames(out var updated); + if (updated || (self.AllMethods is null)) + { + self.AllMethods = MemberMap.GetMethods(self.AllMethodNames); + } - return AllMethods; - }); + return self.AllMethods; + }, + this + ); } PropertyInfo[] IReflect.GetProperties(BindingFlags bindFlags) { - return HostInvoke(() => - { - UpdatePropertyNames(out var updated); - if (updated || (AllProperties == null)) + return HostInvoke( + static self => { - AllProperties = MemberMap.GetProperties(AllPropertyNames); - } + self.UpdatePropertyNames(out var updated); + if (updated || (self.AllProperties is null)) + { + self.AllProperties = MemberMap.GetProperties(self.AllPropertyNames); + } - return AllProperties; - }); + return self.AllProperties; + }, + this + ); } PropertyInfo IReflect.GetProperty(string name, BindingFlags bindFlags, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) @@ -2134,53 +2187,59 @@ void IDynamic.SetProperty(string name, object[] args) bool IDynamic.DeleteProperty(string name) { - return HostInvoke(() => - { - if (TargetDynamic != null) - { - return TargetDynamic.DeleteProperty(name); - } - - if (TargetPropertyBag != null) + return HostInvoke( + static ctx => { - return TargetPropertyBag.Remove(name); - } - - if (TargetDynamicMetaObject != null) - { - if (TargetDynamicMetaObject.TryDeleteMember(name, out var result) && result) + if (ctx.self.TargetDynamic is not null) { - return true; + return ctx.self.TargetDynamic.DeleteProperty(ctx.name); } - if (TargetDynamicMetaObject.TryDeleteIndex(new object[] { name }, out result)) + if (ctx.self.TargetPropertyBag is not null) { - return result; + return ctx.self.TargetPropertyBag.Remove(ctx.name); } - throw new InvalidOperationException("Invalid dynamic member deletion"); - } + if (ctx.self.TargetDynamicMetaObject is not null) + { + if (ctx.self.TargetDynamicMetaObject.TryDeleteMember(ctx.name, out var result) && result) + { + return true; + } + + if (ctx.self.TargetDynamicMetaObject.TryDeleteIndex(new object[] { ctx.name }, out result)) + { + return result; + } + + throw new InvalidOperationException("Invalid dynamic member deletion"); + } - throw new NotSupportedException("The object does not support dynamic members"); - }); + throw new NotSupportedException("The object does not support dynamic members"); + }, + (self: this, name) + ); } string[] IDynamic.GetPropertyNames() { - return HostInvoke(() => - { - UpdateFieldNames(out var updatedFieldNames); - UpdateMethodNames(out var updatedMethodNames); - UpdatePropertyNames(out var updatedPropertyNames); - UpdateEnumerationSettingsToken(out var updatedEnumerationSettingsToken); - - if (updatedFieldNames || updatedMethodNames || updatedPropertyNames || updatedEnumerationSettingsToken || (AllMemberNames == null)) + return HostInvoke( + static self => { - AllMemberNames = AllFieldNames.Concat(EnumeratedMethodNames).Concat(AllPropertyNames).ExcludeIndices().Distinct().ToArray(); - } + self.UpdateFieldNames(out var updatedFieldNames); + self.UpdateMethodNames(out var updatedMethodNames); + self.UpdatePropertyNames(out var updatedPropertyNames); + self.UpdateEnumerationSettingsToken(out var updatedEnumerationSettingsToken); + + if (updatedFieldNames || updatedMethodNames || updatedPropertyNames || updatedEnumerationSettingsToken || (self.AllMemberNames is null)) + { + self.AllMemberNames = self.AllFieldNames.Concat(self.EnumeratedMethodNames).Concat(self.AllPropertyNames).ExcludeIndices().Distinct().ToArray(); + } - return AllMemberNames; - }); + return self.AllMemberNames; + }, + this + ); } object IDynamic.GetProperty(int index) @@ -2195,49 +2254,55 @@ void IDynamic.SetProperty(int index, object value) bool IDynamic.DeleteProperty(int index) { - return HostInvoke(() => - { - if (TargetDynamic != null) - { - return TargetDynamic.DeleteProperty(index); - } - - if (TargetPropertyBag != null) + return HostInvoke( + static ctx => { - return TargetPropertyBag.Remove(index.ToString(CultureInfo.InvariantCulture)); - } - - if (TargetDynamicMetaObject != null) - { - if (TargetDynamicMetaObject.TryDeleteMember(index.ToString(CultureInfo.InvariantCulture), out var result) && result) + if (ctx.self.TargetDynamic is not null) { - return true; + return ctx.self.TargetDynamic.DeleteProperty(ctx.index); } - if (TargetDynamicMetaObject.TryDeleteIndex(new object[] { index }, out result)) + if (ctx.self.TargetPropertyBag is not null) { - return result; + return ctx.self.TargetPropertyBag.Remove(ctx.index.ToString(CultureInfo.InvariantCulture)); } - throw new InvalidOperationException("Invalid dynamic member deletion"); - } + if (ctx.self.TargetDynamicMetaObject is not null) + { + if (ctx.self.TargetDynamicMetaObject.TryDeleteMember(ctx.index.ToString(CultureInfo.InvariantCulture), out var result) && result) + { + return true; + } - return false; - }); + if (ctx.self.TargetDynamicMetaObject.TryDeleteIndex(new object[] { ctx.index }, out result)) + { + return result; + } + + throw new InvalidOperationException("Invalid dynamic member deletion"); + } + + return false; + }, + (self: this, index) + ); } int[] IDynamic.GetPropertyIndices() { - return HostInvoke(() => - { - UpdatePropertyNames(out var updated); - if (updated || (PropertyIndices == null)) + return HostInvoke( + static self => { - PropertyIndices = AllPropertyNames.GetIndices().Distinct().ToArray(); - } + self.UpdatePropertyNames(out var updated); + if (updated || (self.PropertyIndices is null)) + { + self.PropertyIndices = self.AllPropertyNames.GetIndices().Distinct().ToArray(); + } - return PropertyIndices; - }); + return self.PropertyIndices; + }, + this + ); } object IDynamic.Invoke(bool asConstructor, params object[] args) @@ -2256,54 +2321,63 @@ object IDynamic.InvokeMethod(string name, params object[] args) int IEnumVARIANT.Next(int count, object[] elements, IntPtr pCountFetched) { - return HostInvoke(() => - { - var index = 0; - - // ReSharper disable once ConditionIsAlwaysTrueOrFalse - if (elements != null) + return HostInvoke( + static ctx => { - var maxCount = Math.Min(count, elements.Length); - if (index < maxCount) + var index = 0; + + // ReSharper disable once ConditionIsAlwaysTrueOrFalse + if (ctx.elements is not null) { - var currentName = (TargetEnumerator is IScriptableEnumerator) ? "ScriptableCurrent" : "Current"; - while ((index < maxCount) && TargetEnumerator.MoveNext()) + var maxCount = Math.Min(ctx.count, ctx.elements.Length); + if (index < maxCount) { - elements[index++] = ThisDynamic.GetProperty(currentName); + var currentName = (ctx.self.TargetEnumerator is IScriptableEnumerator) ? "ScriptableCurrent" : "Current"; + while ((index < maxCount) && ctx.self.TargetEnumerator.MoveNext()) + { + ctx.elements[index++] = ctx.self.ThisDynamic.GetProperty(currentName); + } } } - } - if (pCountFetched != IntPtr.Zero) - { - Marshal.WriteInt32(pCountFetched, index); - } + if (ctx.pCountFetched != IntPtr.Zero) + { + Marshal.WriteInt32(ctx.pCountFetched, index); + } - return (index == count) ? HResult.S_OK : HResult.S_FALSE; - }); + return (index == ctx.count) ? HResult.S_OK : HResult.S_FALSE; + }, + (self: this, count, elements, pCountFetched) + ); } int IEnumVARIANT.Skip(int count) { - return HostInvoke(() => - { - var index = 0; - while ((index < count) && TargetEnumerator.MoveNext()) + return HostInvoke( + static ctx => { - index++; - } + var index = 0; + while ((index < ctx.count) && ctx.self.TargetEnumerator.MoveNext()) + { + index++; + } - return (index == count) ? HResult.S_OK : HResult.S_FALSE; - }); + return (index == ctx.count) ? HResult.S_OK : HResult.S_FALSE; + }, + (self: this, count) + ); } int IEnumVARIANT.Reset() { - return HostInvoke(() => - { - TargetEnumerator.Reset(); - return HResult.S_OK; - }); + return HostInvoke( + static self => + { + self.TargetEnumerator.Reset(); + return HResult.S_OK; + }, + this + ); } IEnumVARIANT IEnumVARIANT.Clone() @@ -2401,30 +2475,36 @@ public ExpandoHostItem(ScriptEngine engine, HostTarget target, HostItemFlags fla FieldInfo IExpando.AddField(string name) { - return HostInvoke(() => - { - if (CanAddExpandoMembers()) + return HostInvoke( + static ctx => { - AddExpandoMemberName(name); - return MemberMap.GetField(name); - } + if (ctx.self.CanAddExpandoMembers()) + { + ctx.self.AddExpandoMemberName(ctx.name); + return MemberMap.GetField(ctx.name); + } - throw new NotSupportedException("The object does not support dynamic fields"); - }); + throw new NotSupportedException("The object does not support dynamic fields"); + }, + (self: this, name) + ); } PropertyInfo IExpando.AddProperty(string name) { - return HostInvoke(() => - { - if (CanAddExpandoMembers()) + return HostInvoke( + static ctx => { - AddExpandoMemberName(name); - return MemberMap.GetProperty(name); - } + if (ctx.self.CanAddExpandoMembers()) + { + ctx.self.AddExpandoMemberName(ctx.name); + return MemberMap.GetProperty(ctx.name); + } - throw new NotSupportedException("The object does not support dynamic properties"); - }); + throw new NotSupportedException("The object does not support dynamic properties"); + }, + (self: this, name) + ); } MethodInfo IExpando.AddMethod(string name, Delegate method) @@ -2439,59 +2519,62 @@ void IExpando.RemoveMember(MemberInfo member) protected virtual bool RemoveMember(string name) { - return HostInvoke(() => - { - if (TargetDynamic != null) + return HostInvoke( + static ctx => { - if (int.TryParse(name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var index)) + if (ctx.self.TargetDynamic is not null) { - if (TargetDynamic.DeleteProperty(index)) + if (int.TryParse(ctx.name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var index)) { - RemoveExpandoMemberName(index.ToString(CultureInfo.InvariantCulture)); + if (ctx.self.TargetDynamic.DeleteProperty(index)) + { + ctx.self.RemoveExpandoMemberName(index.ToString(CultureInfo.InvariantCulture)); + return true; + } + } + else if (ctx.self.TargetDynamic.DeleteProperty(ctx.name)) + { + ctx.self.RemoveExpandoMemberName(ctx.name); return true; } } - else if (TargetDynamic.DeleteProperty(name)) + else if (ctx.self.TargetPropertyBag is not null) { - RemoveExpandoMemberName(name); - return true; - } - } - else if (TargetPropertyBag != null) - { - if (TargetPropertyBag.Remove(name)) - { - RemoveExpandoMemberName(name); - return true; + if (ctx.self.TargetPropertyBag.Remove(ctx.name)) + { + ctx.self.RemoveExpandoMemberName(ctx.name); + return true; + } } - } - else if (TargetDynamicMetaObject != null) - { - if (TargetDynamicMetaObject.TryDeleteMember(name, out var result) && result) + else if (ctx.self.TargetDynamicMetaObject is not null) { - RemoveExpandoMemberName(name); - return true; - } + if (ctx.self.TargetDynamicMetaObject.TryDeleteMember(ctx.name, out var result) && result) + { + ctx.self.RemoveExpandoMemberName(ctx.name); + return true; + } - if (int.TryParse(name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var index) && TargetDynamicMetaObject.TryDeleteIndex(new object[] { index }, out result)) - { - RemoveExpandoMemberName(index.ToString(CultureInfo.InvariantCulture)); - return true; - } + if (int.TryParse(ctx.name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var index) && ctx.self.TargetDynamicMetaObject.TryDeleteIndex(new object[] { index }, out result)) + { + ctx.self.RemoveExpandoMemberName(index.ToString(CultureInfo.InvariantCulture)); + return true; + } - if (TargetDynamicMetaObject.TryDeleteIndex(new object[] { name }, out result)) + if (ctx.self.TargetDynamicMetaObject.TryDeleteIndex(new object[] { ctx.name }, out result)) + { + ctx.self.RemoveExpandoMemberName(ctx.name); + return true; + } + } + else { - RemoveExpandoMemberName(name); - return true; + throw new NotSupportedException("The object does not support dynamic members"); } - } - else - { - throw new NotSupportedException("The object does not support dynamic members"); - } - return false; - }); + return false; + }, + (self: this, name) + ); } #endregion diff --git a/ClearScript/HostItemCollateral.cs b/ClearScript/HostItemCollateral.cs index a97d8cbf0..3b385f6be 100644 --- a/ClearScript/HostItemCollateral.cs +++ b/ClearScript/HostItemCollateral.cs @@ -11,25 +11,25 @@ internal sealed class HostItemCollateral { #region special targets - public readonly CollateralObject TargetDynamic = new CollateralObject(); - public readonly CollateralObject TargetPropertyBag = new CollateralObject(); - public readonly CollateralObject TargetList = new CollateralObject(); - public readonly CollateralObject TargetDynamicMetaObject = new CollateralObject(); - public readonly CollateralObject TargetEnumerator = new CollateralObject(); + public readonly CollateralObject TargetDynamic = new(); + public readonly CollateralObject TargetPropertyBag = new(); + public readonly CollateralObject TargetList = new(); + public readonly CollateralObject TargetDynamicMetaObject = new(); + public readonly CollateralObject TargetEnumerator = new(); #endregion #region dynamic collateral - public readonly CollateralObject> ExpandoMemberNames = new CollateralObject>(); - public readonly CollateralObject ListData = new CollateralObject(); + public readonly CollateralObject> ExpandoMemberNames = new(); + public readonly CollateralObject ListData = new(); #endregion #region tear-off member cache - public readonly CollateralObject> HostMethodMap = new CollateralObject>(); - public readonly CollateralObject> HostIndexedPropertyMap = new CollateralObject>(); + public readonly CollateralObject> HostMethodMap = new(); + public readonly CollateralObject> HostIndexedPropertyMap = new(); #endregion diff --git a/ClearScript/HostItemFlags.cs b/ClearScript/HostItemFlags.cs index b6e0fcc89..e338e525c 100644 --- a/ClearScript/HostItemFlags.cs +++ b/ClearScript/HostItemFlags.cs @@ -43,4 +43,10 @@ public enum HostItemFlags /// DirectAccess = 0x00000008 } + + internal static class HostItemFlagsHelpers + { + public static bool HasAllFlags(this HostItemFlags value, HostItemFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this HostItemFlags value, HostItemFlags flags) => (value & flags) != 0; + } } diff --git a/ClearScript/HostObject.cs b/ClearScript/HostObject.cs index fea3d6ce0..8c9d51874 100644 --- a/ClearScript/HostObject.cs +++ b/ClearScript/HostObject.cs @@ -20,10 +20,14 @@ internal sealed class HostObject : HostTarget #region constructors - private HostObject(object target, Type type) + private HostObject(object target, Type type, bool isCanonicalRef) { - target = CanonicalRefTable.GetCanonicalRef(target); - if (type == null) + if (!isCanonicalRef) + { + target = CanonicalRefTable.GetCanonicalRef(target); + } + + if (type is null) { type = target.GetType(); } @@ -52,17 +56,22 @@ public static HostObject Wrap(object target) public static HostObject Wrap(object target, Type type) { - return (target != null) ? new HostObject(target, type) : null; + return Wrap(target, type, false); + } + + public static HostObject Wrap(object target, Type type, bool isCanonicalRef) + { + return (target is not null) ? new HostObject(target, type, isCanonicalRef) : null; } public static object WrapResult(object result, Type type, bool wrapNull) { - if ((result is HostItem) || (result is HostTarget)) + if ((result is IScriptMarshalWrapper) || (result is HostTarget)) { return result; } - if (result == null) + if (result is null) { return wrapNull ? GetNullWrapper(type) : null; } @@ -149,7 +158,7 @@ public override Invocability GetInvocability(IHostContext context, BindingFlags private static class NullWrapper { - public static readonly HostObject Value = new HostObject(null, typeof(T)); + public static readonly HostObject Value = new(null, typeof(T), true); } // ReSharper restore UnusedMember.Local diff --git a/ClearScript/HostTargetFlags.cs b/ClearScript/HostTargetFlags.cs index baa321121..2b168d97d 100644 --- a/ClearScript/HostTargetFlags.cs +++ b/ClearScript/HostTargetFlags.cs @@ -13,4 +13,10 @@ internal enum HostTargetFlags AllowInstanceMembers = 0x00000002, AllowExtensionMethods = 0x00000004 } + + internal static class HostTargetFlagsHelpers + { + public static bool HasAllFlags(this HostTargetFlags value, HostTargetFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this HostTargetFlags value, HostTargetFlags flags) => (value & flags) != 0; + } } diff --git a/ClearScript/HostType.cs b/ClearScript/HostType.cs index 7de99ebdc..812a95db5 100644 --- a/ClearScript/HostType.cs +++ b/ClearScript/HostType.cs @@ -18,7 +18,7 @@ private HostType(Type type) private HostType(Type[] types) { - Debug.Assert((types != null) && (types.Length > 0)); + Debug.Assert((types is not null) && (types.Length > 0)); var nestingGroups = types.GroupBy(type => type.IsNested).ToIList(); if (nestingGroups.Count != 1) @@ -53,12 +53,12 @@ private HostType(Type[] types) public static HostType Wrap(Type type) { - return (type != null) ? new HostType(type) : null; + return (type is not null) ? new HostType(type) : null; } public static HostType Wrap(Type[] types) { - return ((types != null) && (types.Length > 0)) ? new HostType(types) : null; + return ((types is not null) && (types.Length > 0)) ? new HostType(types) : null; } public Type[] Types { get; } @@ -66,7 +66,7 @@ public static HostType Wrap(Type[] types) public Type GetSpecificType() { var type = GetSpecificTypeNoThrow(); - if (type == null) + if (type is null) { throw new InvalidOperationException(MiscHelpers.FormatInvariant("'{0}' requires type arguments", Types[0].GetRootName())); } @@ -94,7 +94,7 @@ public Type GetTypeArg() public Type GetTypeArgNoThrow() { var type = GetSpecificTypeNoThrow(); - return ((type == null) || type.IsStatic() || type.IsUnknownCOMObject()) ? null : type; + return ((type is null) || type.IsStatic() || type.IsUnknownCOMObject()) ? null : type; } private Type GetSpecificTypeNoThrow() @@ -107,7 +107,7 @@ private Type GetSpecificTypeNoThrow() public override string ToString() { var type = GetSpecificTypeNoThrow(); - if (type != null) + if (type is not null) { return MiscHelpers.FormatInvariant("HostType:{0}", type.GetFriendlyName()); } @@ -145,13 +145,13 @@ public override object InvokeTarget public override HostTargetFlags GetFlags(IHostContext context) { var type = GetSpecificTypeNoThrow(); - return (type != null) ? HostTargetFlags.AllowStaticMembers : HostTargetFlags.None; + return (type is not null) ? HostTargetFlags.AllowStaticMembers : HostTargetFlags.None; } public override string[] GetAuxPropertyNames(IHostContext context, BindingFlags bindFlags) { var type = GetSpecificTypeNoThrow(); - if (type != null) + if (type is not null) { return type.GetScriptableNestedTypes(context, bindFlags).Select(testType => testType.GetRootName()).Distinct().ToArray(); } @@ -162,20 +162,20 @@ public override string[] GetAuxPropertyNames(IHostContext context, BindingFlags public override bool TryInvokeAuxMember(IHostContext context, string name, BindingFlags invokeFlags, object[] args, object[] bindArgs, out object result) { var type = GetSpecificTypeNoThrow(); - if (type != null) + if (type is not null) { var nestedTypes = type.GetScriptableNestedTypes(context, invokeFlags).Where(testType => string.Equals(testType.GetRootName(), name, invokeFlags.GetMemberNameComparison())).ToIList(); if (nestedTypes.Count > 0) { var tempResult = Wrap(nestedTypes.Select(testType => testType.ApplyTypeArguments(type.GetGenericArguments())).ToArray()); - if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if (invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { if (tempResult.TryInvoke(context, invokeFlags, args, bindArgs, out result)) { return true; } - if (!invokeFlags.HasFlag(BindingFlags.GetField) && !invokeFlags.HasFlag(BindingFlags.GetProperty)) + if (!invokeFlags.HasAllFlags(BindingFlags.GetField) && !invokeFlags.HasAllFlags(BindingFlags.GetProperty)) { return false; } @@ -192,7 +192,7 @@ public override bool TryInvokeAuxMember(IHostContext context, string name, Bindi public override bool TryInvoke(IHostContext context, BindingFlags invokeFlags, object[] args, object[] bindArgs, out object result) { - if (!invokeFlags.HasFlag(BindingFlags.InvokeMethod) || (args.Length < 1)) + if (!invokeFlags.HasAllFlags(BindingFlags.InvokeMethod) || (args.Length < 1)) { result = null; return false; @@ -200,14 +200,14 @@ public override bool TryInvoke(IHostContext context, BindingFlags invokeFlags, o if (!args.All(arg => arg is HostType)) { - throw new ArgumentException("Invalid generic type argument"); + throw new ArgumentException("Invalid generic type argument", nameof(args)); } var templates = Types.Where(type => !type.IsSpecific()).ToArray(); var typeArgs = args.Cast().Select(hostType => hostType.GetTypeArg()).ToArray(); var template = templates.FirstOrDefault(testTemplate => testTemplate.GetGenericParamCount() == typeArgs.Length); - if (template == null) + if (template is null) { throw new TypeLoadException(MiscHelpers.FormatInvariant("Could not find a matching generic type definition for '{0}'", templates[0].GetRootName())); } @@ -227,10 +227,10 @@ public override Invocability GetInvocability(IHostContext context, BindingFlags void IScriptableObject.OnExposedToScriptCode(ScriptEngine engine) { - if (engine != null) + if (engine is not null) { var specificType = GetSpecificTypeNoThrow(); - if (specificType != null) + if (specificType is not null) { engine.ProcessExtensionMethodType(specificType); } diff --git a/ClearScript/HostTypeCollection.cs b/ClearScript/HostTypeCollection.cs index 68f035665..3afa8ddb7 100644 --- a/ClearScript/HostTypeCollection.cs +++ b/ClearScript/HostTypeCollection.cs @@ -8,7 +8,6 @@ using System.Runtime.InteropServices.ComTypes; using Microsoft.ClearScript.Util; using Microsoft.ClearScript.Util.COM; -using TYPEKIND = System.Runtime.InteropServices.ComTypes.TYPEKIND; namespace Microsoft.ClearScript { @@ -27,8 +26,8 @@ namespace Microsoft.ClearScript /// public class HostTypeCollection : PropertyBag { - private static readonly Predicate defaultFilter = type => true; - private static readonly TypeComparer typeComparer = new TypeComparer(); + private static readonly Predicate defaultFilter = _ => true; + private static readonly TypeComparer typeComparer = new(); /// /// Initializes a new host type collection. @@ -179,7 +178,7 @@ public PropertyBag GetNamespaceNode(string name) } namespaceNode = node as PropertyBag; - if (namespaceNode == null) + if (namespaceNode is null) { return null; } @@ -202,7 +201,7 @@ private PropertyBag AddEnumTypeInfoInternal(ITypeInfo typeInfo) typeInfo.GetRefTypeInfo(unchecked((int)attrScope.Value.tdescAlias.lpValue.ToInt64()), out var refTypeInfo); var node = AddEnumTypeInfoInternal(refTypeInfo); - if (node != null) + if (node is not null) { var locator = typeInfo.GetManagedName(); @@ -210,7 +209,7 @@ private PropertyBag AddEnumTypeInfoInternal(ITypeInfo typeInfo) if (segments.Length > 0) { var namespaceNode = GetOrCreateNamespaceNode(locator); - if (namespaceNode != null) + if (namespaceNode is not null) { namespaceNode.SetPropertyNoCheck(segments.Last(), node); return node; @@ -221,7 +220,7 @@ private PropertyBag AddEnumTypeInfoInternal(ITypeInfo typeInfo) else if (attrScope.Value.typekind == TYPEKIND.TKIND_ENUM) { var node = GetOrCreateEnumTypeInfoNode(typeInfo); - if (node != null) + if (node is not null) { var count = attrScope.Value.cVars; for (var index = 0; index < count; index++) @@ -267,7 +266,7 @@ private PropertyBag GetOrCreateEnumTypeInfoNode(ITypeInfo typeInfo) else { innerNode = node as PropertyBag; - if (innerNode == null) + if (innerNode is null) { throw new OperationCanceledException(MiscHelpers.FormatInvariant("Enumeration conflicts with '{0}' at '{1}'", node.GetFriendlyName(), locator)); } @@ -285,7 +284,7 @@ private void AddType(HostType hostType) foreach (var type in hostType.Types) { var namespaceNode = GetOrCreateNamespaceNode(type); - if (namespaceNode != null) + if (namespaceNode is not null) { AddTypeToNamespaceNode(namespaceNode, type); } @@ -318,7 +317,7 @@ private PropertyBag GetOrCreateNamespaceNode(string locator) else { innerNode = node as PropertyBag; - if (innerNode == null) + if (innerNode is null) { throw new OperationCanceledException(MiscHelpers.FormatInvariant("Namespace conflicts with '{0}' at '{1}'", node.GetFriendlyName(), locator)); } diff --git a/ClearScript/HostVariable.cs b/ClearScript/HostVariable.cs index 8e8250bbc..bd118b26a 100644 --- a/ClearScript/HostVariable.cs +++ b/ClearScript/HostVariable.cs @@ -33,12 +33,12 @@ public HostVariable(T initValue) throw new NotSupportedException("Unsupported variable type"); } - if (typeof(HostItem).IsAssignableFrom(typeof(T)) || typeof(HostTarget).IsAssignableFrom(typeof(T))) + if (typeof(IHostItem).IsAssignableFrom(typeof(T)) || typeof(HostTarget).IsAssignableFrom(typeof(T))) { throw new NotSupportedException("Unsupported variable type"); } - if ((initValue is HostItem) || (initValue is HostTarget)) + if ((initValue is IHostItem) || (initValue is HostTarget)) { throw new NotSupportedException("Unsupported value type"); } @@ -110,14 +110,14 @@ public override bool TryInvokeAuxMember(IHostContext context, string name, Bindi } else if (string.Equals(name, "value", invokeFlags.GetMemberNameComparison())) { - if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if (invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { if (InvokeHelpers.TryInvokeObject(context, Value, invokeFlags, args, bindArgs, typeof(IDynamicMetaObjectProvider).IsAssignableFrom(typeof(T)), out result)) { return true; } - if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField) && (args.Length < 1)) { result = context.Engine.PrepareResult(Value, ScriptMemberFlags.None, false); return true; @@ -167,7 +167,7 @@ object IHostVariable.Value throw new InvalidOperationException("Assignment invalid due to type mismatch"); } - if ((value is HostItem) || (value is HostTarget)) + if ((value is IHostItem) || (value is HostTarget)) { throw new NotSupportedException("Unsupported value type"); } diff --git a/ClearScript/IScriptEngine.cs b/ClearScript/IScriptEngine.cs index 4712b2781..5616c26de 100644 --- a/ClearScript/IScriptEngine.cs +++ b/ClearScript/IScriptEngine.cs @@ -171,7 +171,7 @@ public interface IScriptEngine : IDisposable /// on the specific behavior of reflection-based method binding. /// /// - /// This property has no effect when is set to + /// This property has no effect when is set to /// true. /// /// @@ -199,6 +199,17 @@ public interface IScriptEngine : IDisposable /// object UndefinedImportValue { get; set; } + /// + /// Gets or sets the script engine's null import value. + /// + /// + /// Some script languages support one or more special null values that represent + /// empty or unassigned object references. When such a value is marshaled to the host, the + /// script engine maps it to the value of this property. The default value is simply + /// null. + /// + object NullImportValue { get; set; } + /// /// Gets or sets the script engine's null export value. /// @@ -212,9 +223,9 @@ public interface IScriptEngine : IDisposable /// Nothing.Value. /// /// - /// Note that , - /// , and - /// MarshalNullAsDispatch + /// Note that , + /// , and + /// MarshalNullAsDispatch /// all take precedence over this property. /// /// diff --git a/ClearScript/IScriptObject.cs b/ClearScript/IScriptObject.cs index d28ac13ec..641df4517 100644 --- a/ClearScript/IScriptObject.cs +++ b/ClearScript/IScriptObject.cs @@ -39,7 +39,7 @@ public interface IScriptObject : IDisposable /// Removes a named script object property. /// /// The name of the property to remove. - /// True if the property was removed successfully, false otherwise. + /// True if the property was removed, false otherwise. bool DeleteProperty(string name); /// @@ -73,7 +73,7 @@ public interface IScriptObject : IDisposable /// Removes an indexed script object property. /// /// The index of the property to remove. - /// True if the property was removed successfully, false otherwise. + /// True if the property was removed, false otherwise. bool DeleteProperty(int index); /// diff --git a/ClearScript/Invocability.cs b/ClearScript/Invocability.cs index beaf07c87..043d1c378 100644 --- a/ClearScript/Invocability.cs +++ b/ClearScript/Invocability.cs @@ -5,7 +5,7 @@ namespace Microsoft.ClearScript { internal enum Invocability { - // IMPORTANT: maintain bitwise equivalence with native enum IHostObjectUtil::Invocability + // IMPORTANT: maintain bitwise equivalence with native enum HostObjectUtil::Invocability None, Delegate, Dynamic, diff --git a/ClearScript/JavaScript/CommonJSManager.cs b/ClearScript/JavaScript/CommonJSManager.cs index 27c6eafa1..d57259697 100644 --- a/ClearScript/JavaScript/CommonJSManager.cs +++ b/ClearScript/JavaScript/CommonJSManager.cs @@ -13,8 +13,8 @@ internal sealed class CommonJSManager { private readonly ScriptEngine engine; private readonly ScriptObject createModule; - private readonly List moduleCache = new List(); - private static readonly DocumentInfo createModuleInfo = new DocumentInfo("CommonJS-createModule [internal]"); + private readonly List moduleCache = new(); + private static readonly DocumentInfo createModuleInfo = new("CommonJS-createModule [internal]"); public CommonJSManager(ScriptEngine engine) { @@ -62,7 +62,7 @@ public Module GetOrCreateModule(UniqueDocumentInfo documentInfo, string code) var codeDigest = code.GetDigest(); var cachedModule = GetCachedModule(documentInfo, codeDigest); - if (cachedModule != null) + if (cachedModule is not null) { return cachedModule; } @@ -73,7 +73,7 @@ public Module GetOrCreateModule(UniqueDocumentInfo documentInfo, string code) public Module GetOrCreateModule(UniqueDocumentInfo documentInfo, UIntPtr codeDigest, Func evaluator) { var cachedModule = GetCachedModule(documentInfo, codeDigest); - if (cachedModule != null) + if (cachedModule is not null) { return cachedModule; } @@ -100,7 +100,7 @@ private Module GetCachedModule(UniqueDocumentInfo documentInfo, UIntPtr codeDige private Module CacheModule(Module module) { var cachedModule = moduleCache.FirstOrDefault(testModule => (testModule.DocumentInfo.UniqueId == module.DocumentInfo.UniqueId) && (testModule.CodeDigest == module.CodeDigest)); - if (cachedModule != null) + if (cachedModule is not null) { return cachedModule; } @@ -162,19 +162,19 @@ public static string GetAugmentedCode(string code) public object Process(out object marshaledExports) { - if (module == null) + if (module is null) { - var id = (DocumentInfo.Uri != null) ? DocumentInfo.Uri.AbsoluteUri : DocumentInfo.UniqueName; - var uri = (DocumentInfo.Uri != null) ? id : null; + var id = (DocumentInfo.Uri is not null) ? DocumentInfo.Uri.AbsoluteUri : DocumentInfo.UniqueName; + var uri = (DocumentInfo.Uri is not null) ? id : null; Action hostInitialize = Initialize; Func hostRequire = Require; Func initializeContext = InitializeContext; module = manager.createModule.Invoke(false, id, uri, hostInitialize, hostRequire, initializeContext, typeof(CommonJSLegacyModule).ToHostType(engine)); } - if (function == null) + if (function is null) { - function = (ScriptObject)engine.MarshalToHost(engine.ScriptInvoke(() => Evaluator()), false); + function = (ScriptObject)engine.MarshalToHost(engine.ScriptInvoke(static self => self.Evaluator(), this), false); } object result; @@ -223,7 +223,7 @@ private object Require(string specifier) } var uri = document.Info.Uri; - var name = (uri != null) ? (uri.IsFile ? uri.LocalPath : uri.AbsoluteUri) : document.Info.Name; + var name = (uri is not null) ? (uri.IsFile ? uri.LocalPath : uri.AbsoluteUri) : document.Info.Name; throw new FileLoadException($"Unsupported document category '{document.Info.Category}'", name); } @@ -231,7 +231,7 @@ private ScriptObject InitializeContext(ScriptObject context) { var callback = DocumentInfo.ContextCallback ?? engine.DocumentSettings.ContextCallback; var properties = callback?.Invoke(DocumentInfo.Info); - if (properties != null) + if (properties is not null) { foreach (var pair in properties) { diff --git a/ClearScript/JavaScript/IArrayBuffer.cs b/ClearScript/JavaScript/IArrayBuffer.cs index a4ec13f02..d89568bd7 100644 --- a/ClearScript/JavaScript/IArrayBuffer.cs +++ b/ClearScript/JavaScript/IArrayBuffer.cs @@ -32,6 +32,16 @@ public interface IArrayBuffer : IJavaScriptObject /// The number of bytes copied. ulong ReadBytes(ulong offset, ulong count, byte[] destination, ulong destinationIndex); + /// + /// Copies bytes from the ArrayBuffer into the specified byte span. + /// + /// The offset within the ArrayBuffer of the first byte to copy. + /// The maximum number of bytes to copy. + /// The byte span into which to copy the bytes. + /// The index within at which to store the first copied byte. + /// The number of bytes copied. + ulong ReadBytes(ulong offset, ulong count, Span destination, ulong destinationIndex); + /// /// Copies bytes from the specified byte array into the ArrayBuffer. /// @@ -42,6 +52,16 @@ public interface IArrayBuffer : IJavaScriptObject /// The number of bytes copied. ulong WriteBytes(byte[] source, ulong sourceIndex, ulong count, ulong offset); + /// + /// Copies bytes from the specified byte span into the ArrayBuffer. + /// + /// The byte span from which to copy the bytes. + /// The index within of the first byte to copy. + /// The maximum number of bytes to copy. + /// The offset within the ArrayBuffer at which to store the first copied byte. + /// The number of bytes copied. + ulong WriteBytes(ReadOnlySpan source, ulong sourceIndex, ulong count, ulong offset); + /// /// Invokes a delegate that returns no value, giving it direct access to the ArrayBuffer's contents. /// @@ -56,14 +76,42 @@ public interface IArrayBuffer : IJavaScriptObject /// /// Invokes a delegate that returns a value, giving it direct access to the ArrayBuffer's contents. /// - /// The delegate's return type. + /// The delegate's return type. + /// The delegate to invoke. + /// The delegate's return value. + /// + /// This method invokes the specified delegate, passing in the memory address of the + /// ArrayBuffer's contents. This memory address is valid only while the delegate is + /// executing. The delegate must not access memory outside the ArrayBuffer's range. + /// + TResult InvokeWithDirectAccess(Func func); + + /// + /// Invokes a delegate that takes an argument and returns no value, giving it direct access to the ArrayBuffer's contents. + /// + /// The delegate's argument type. + /// The delegate to invoke. + /// The argument to pass to the delegate. + /// + /// This method invokes the specified delegate, passing in the memory address of the + /// ArrayBuffer's contents. This memory address is valid only while the delegate is + /// executing. The delegate must not access memory outside the ArrayBuffer's range. + /// + void InvokeWithDirectAccess(Action action, in TArg arg); + + /// + /// Invokes a delegate that takes an argument and returns a value, giving it direct access to the ArrayBuffer's contents. + /// + /// The delegate's argument type. + /// The delegate's return type. /// The delegate to invoke. + /// The argument to pass to the delegate. /// The delegate's return value. /// /// This method invokes the specified delegate, passing in the memory address of the /// ArrayBuffer's contents. This memory address is valid only while the delegate is /// executing. The delegate must not access memory outside the ArrayBuffer's range. /// - T InvokeWithDirectAccess(Func func); + TResult InvokeWithDirectAccess(Func func, in TArg arg); } } diff --git a/ClearScript/JavaScript/IArrayBufferView.cs b/ClearScript/JavaScript/IArrayBufferView.cs index 311b016e3..6d386bb73 100644 --- a/ClearScript/JavaScript/IArrayBufferView.cs +++ b/ClearScript/JavaScript/IArrayBufferView.cs @@ -43,6 +43,16 @@ public interface IArrayBufferView : IJavaScriptObject /// The number of bytes copied. ulong ReadBytes(ulong offset, ulong count, byte[] destination, ulong destinationIndex); + /// + /// Copies bytes from the view into the specified byte span. + /// + /// The offset within the view of the first byte to copy. + /// The maximum number of bytes to copy. + /// The byte span into which to copy the bytes. + /// The index within at which to store the first copied byte. + /// The number of bytes copied. + ulong ReadBytes(ulong offset, ulong count, Span destination, ulong destinationIndex); + /// /// Copies bytes from the specified byte array into the view. /// @@ -53,6 +63,16 @@ public interface IArrayBufferView : IJavaScriptObject /// The number of bytes copied. ulong WriteBytes(byte[] source, ulong sourceIndex, ulong count, ulong offset); + /// + /// Copies bytes from the specified byte span into the view. + /// + /// The byte span from which to copy the bytes. + /// The index within of the first byte to copy. + /// The maximum number of bytes to copy. + /// The offset within the view at which to store the first copied byte. + /// The number of bytes copied. + ulong WriteBytes(ReadOnlySpan source, ulong sourceIndex, ulong count, ulong offset); + /// /// Invokes a delegate that returns no value, giving it direct access to the view's contents. /// @@ -67,14 +87,42 @@ public interface IArrayBufferView : IJavaScriptObject /// /// Invokes a delegate that returns a value, giving it direct access to the view's contents. /// - /// The delegate's return type. + /// The delegate's return type. + /// The delegate to invoke. + /// The delegate's return value. + /// + /// This method invokes the specified delegate, passing in the memory address of the view's + /// contents. This memory address is valid only while the delegate is executing. The + /// delegate must not access memory outside the view's range. + /// + TResult InvokeWithDirectAccess(Func func); + + /// + /// Invokes a delegate that takes an argument and returns no value, giving it direct access to the view's contents. + /// + /// The delegate's argument type. + /// The delegate to invoke. + /// The argument to pass to the delegate. + /// + /// This method invokes the specified delegate, passing in the memory address of the view's + /// contents. This memory address is valid only while the delegate is executing. The + /// delegate must not access memory outside the view's range. + /// + void InvokeWithDirectAccess(Action action, in TArg arg); + + /// + /// Invokes a delegate that takes an argument and returns a value, giving it direct access to the view's contents. + /// + /// The delegate's argument type. + /// The delegate's return type. /// The delegate to invoke. + /// The argument to pass to the delegate. /// The delegate's return value. /// /// This method invokes the specified delegate, passing in the memory address of the view's /// contents. This memory address is valid only while the delegate is executing. The /// delegate must not access memory outside the view's range. /// - T InvokeWithDirectAccess(Func func); + TResult InvokeWithDirectAccess(Func func, in TArg arg); } } diff --git a/ClearScript/JavaScript/IJavaScriptEngine.NetStandard.cs b/ClearScript/JavaScript/IJavaScriptEngine.NetStandard.cs deleted file mode 100644 index 227fcc555..000000000 --- a/ClearScript/JavaScript/IJavaScriptEngine.NetStandard.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System.Threading.Tasks; - -namespace Microsoft.ClearScript.JavaScript -{ - internal partial interface IJavaScriptEngine - { - object CreatePromiseForValueTask(ValueTask valueTask); - object CreatePromiseForValueTask(ValueTask valueTask); - } -} diff --git a/ClearScript/JavaScript/IJavaScriptEngine.cs b/ClearScript/JavaScript/IJavaScriptEngine.cs index c7d2f9aba..fad6f7204 100644 --- a/ClearScript/JavaScript/IJavaScriptEngine.cs +++ b/ClearScript/JavaScript/IJavaScriptEngine.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System.Threading.Tasks; @@ -16,6 +16,9 @@ internal partial interface IJavaScriptEngine : IScriptEngine object CreatePromiseForTask(Task task); object CreatePromiseForTask(Task task); + object CreatePromiseForValueTask(ValueTask valueTask); + object CreatePromiseForValueTask(ValueTask valueTask); + Task CreateTaskForPromise(ScriptObject promise); } } diff --git a/ClearScript/JavaScript/ITypedArray.cs b/ClearScript/JavaScript/ITypedArray.cs index 3153fbc9d..92161879b 100644 --- a/ClearScript/JavaScript/ITypedArray.cs +++ b/ClearScript/JavaScript/ITypedArray.cs @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; + namespace Microsoft.ClearScript.JavaScript { /// @@ -15,6 +17,8 @@ public interface ITypedArray : IArrayBufferView ulong Length { get; } } + // ReSharper disable GrammarMistakeInComment + /// /// Represents a JavaScript typed array. /// @@ -76,7 +80,7 @@ public interface ITypedArray : IArrayBufferView /// /// /// - public interface ITypedArray : ITypedArray + public interface ITypedArray : ITypedArray where T : unmanaged { /// /// Creates an array containing a copy of the typed array's contents. @@ -94,6 +98,16 @@ public interface ITypedArray : ITypedArray /// The number of elements copied. ulong Read(ulong index, ulong length, T[] destination, ulong destinationIndex); + /// + /// Copies elements from the typed array into the specified span. + /// + /// The index within the typed array of the first element to copy. + /// The maximum number of elements to copy. + /// The span into which to copy the elements. + /// The index within at which to store the first copied element. + /// The number of elements copied. + ulong Read(ulong index, ulong length, Span destination, ulong destinationIndex); + /// /// Copies elements from the specified array into the typed array. /// @@ -103,5 +117,17 @@ public interface ITypedArray : ITypedArray /// The index within the typed array at which to store the first copied element. /// The number of elements copied. ulong Write(T[] source, ulong sourceIndex, ulong length, ulong index); + + /// + /// Copies elements from the specified span into the typed array. + /// + /// The span from which to copy the elements. + /// The index within of the first element to copy. + /// The maximum number of elements to copy. + /// The index within the typed array at which to store the first copied element. + /// The number of elements copied. + ulong Write(ReadOnlySpan source, ulong sourceIndex, ulong length, ulong index); } + + // ReSharper restore GrammarMistakeInComment } diff --git a/ClearScript/JavaScript/JavaScriptExtensions.NetStandard.cs b/ClearScript/JavaScript/JavaScriptExtensions.NetStandard.cs deleted file mode 100644 index 0aaa4412f..000000000 --- a/ClearScript/JavaScript/JavaScriptExtensions.NetStandard.cs +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.ClearScript.Util; - -namespace Microsoft.ClearScript.JavaScript -{ - public static partial class JavaScriptExtensions - { - /// - /// Converts a instance to a - /// promise - /// for use with script code currently running on the calling thread. - /// - /// The task's result type. - /// The task to convert to a promise. - /// A promise that represents the task's asynchronous operation. - /// - /// This method is not available on .NET Framework or Universal Windows Platform (UWP). - /// - public static object ToPromise(this ValueTask valueTask) - { - return valueTask.ToPromise(ScriptEngine.Current); - } - - /// - /// Converts a instance to a - /// promise - /// for use with script code running in the specified script engine. - /// - /// The task's result type. - /// The task to convert to a promise. - /// The script engine in which the promise will be used. - /// A promise that represents the task's asynchronous operation. - /// - /// This method is not available on .NET Framework or Universal Windows Platform (UWP). - /// - public static object ToPromise(this ValueTask valueTask, ScriptEngine engine) - { - MiscHelpers.VerifyNonNullArgument(valueTask, nameof(valueTask)); - MiscHelpers.VerifyNonNullArgument(engine, nameof(engine)); - - var javaScriptEngine = engine as IJavaScriptEngine; - if ((javaScriptEngine == null) || (javaScriptEngine.BaseLanguageVersion < 6)) - { - throw new NotSupportedException("The script engine does not support promises"); - } - - return javaScriptEngine.CreatePromiseForValueTask(valueTask); - } - - /// - /// Converts a instance to a - /// promise - /// for use with script code currently running on the calling thread. - /// - /// The task to convert to a promise. - /// A promise that represents the task's asynchronous operation. - /// - /// This method is not available on .NET Framework or Universal Windows Platform (UWP). - /// - public static object ToPromise(this ValueTask valueTask) - { - return valueTask.ToPromise(ScriptEngine.Current); - } - - /// - /// Converts a instance to a - /// promise - /// for use with script code running in the specified script engine. - /// - /// The task to convert to a promise. - /// The script engine in which the promise will be used. - /// A promise that represents the task's asynchronous operation. - /// - /// This method is not available on .NET Framework or Universal Windows Platform (UWP). - /// - public static object ToPromise(this ValueTask valueTask, ScriptEngine engine) - { - MiscHelpers.VerifyNonNullArgument(valueTask, nameof(valueTask)); - MiscHelpers.VerifyNonNullArgument(engine, nameof(engine)); - - var javaScriptEngine = engine as IJavaScriptEngine; - if ((javaScriptEngine == null) || (javaScriptEngine.BaseLanguageVersion < 6)) - { - throw new NotSupportedException("The script engine does not support promises"); - } - - return javaScriptEngine.CreatePromiseForValueTask(valueTask); - } - - /// - /// Supports managed asynchronous iteration over an - /// async-iterable - /// script object. - /// - /// An async-iterable script object (see remarks). - /// An IAsyncEnumerator<Object> implementation that supports managed asynchronous iteration over . - /// - /// If the argument implements IAsyncEnumerator<Object>, this method returns it as is. - /// - public static IAsyncEnumerable ToAsyncEnumerable(this object asyncIterable) - { - MiscHelpers.VerifyNonNullArgument(asyncIterable, nameof(asyncIterable)); - return asyncIterable as IAsyncEnumerable ?? asyncIterable.ToAsyncEnumerableInternal(); - } - - private static async IAsyncEnumerable ToAsyncEnumerableInternal(this object asyncIterable) - { - if (asyncIterable is IEnumerable objectEnumerable) - { - foreach (var item in objectEnumerable) - { - yield return item; - } - } - else if (asyncIterable is ScriptObject scriptObject) - { - if (scriptObject.Engine is IJavaScriptEngine javaScriptEngine && (javaScriptEngine.BaseLanguageVersion >= 6)) - { - var engineInternal = (ScriptObject)javaScriptEngine.Global["EngineInternal"]; - if (engineInternal.InvokeMethod("getAsyncIterator", scriptObject) is ScriptObject asyncIterator) - { - while (await asyncIterator.InvokeMethod("next").ToTask().ConfigureAwait(false) is ScriptObject result && !Equals(result["done"], true)) - { - yield return result["value"]; - } - } - else if (engineInternal.InvokeMethod("getIterator", scriptObject) is ScriptObject iterator) - { - while (iterator.InvokeMethod("next") is ScriptObject result && !Equals(result["done"], true)) - { - yield return result["value"]; - } - } - else - { - throw new ArgumentException("The object is not async-iterable", nameof(asyncIterable)); - } - } - else - { - throw new NotSupportedException("The script engine does not support async iteration"); - } - } - else if (asyncIterable is IEnumerable enumerable) - { - foreach (var item in enumerable) - { - yield return item; - } - } - else - { - throw new ArgumentException("The object is not async-iterable", nameof(asyncIterable)); - } - } - } -} diff --git a/ClearScript/JavaScript/JavaScriptExtensions.cs b/ClearScript/JavaScript/JavaScriptExtensions.cs index 862d079e6..9cc760765 100644 --- a/ClearScript/JavaScript/JavaScriptExtensions.cs +++ b/ClearScript/JavaScript/JavaScriptExtensions.cs @@ -44,7 +44,7 @@ public static object ToPromise(this Task task, ScriptEngine engine) MiscHelpers.VerifyNonNullArgument(engine, nameof(engine)); var javaScriptEngine = engine as IJavaScriptEngine; - if ((javaScriptEngine == null) || (javaScriptEngine.BaseLanguageVersion < 6)) + if ((javaScriptEngine is null) || (javaScriptEngine.BaseLanguageVersion < 6)) { throw new NotSupportedException("The script engine does not support promises"); } @@ -78,7 +78,7 @@ public static object ToPromise(this Task task, ScriptEngine engine) MiscHelpers.VerifyNonNullArgument(engine, nameof(engine)); var javaScriptEngine = engine as IJavaScriptEngine; - if ((javaScriptEngine == null) || (javaScriptEngine.BaseLanguageVersion < 6)) + if ((javaScriptEngine is null) || (javaScriptEngine.BaseLanguageVersion < 6)) { throw new NotSupportedException("The script engine does not support promises"); } @@ -86,6 +86,76 @@ public static object ToPromise(this Task task, ScriptEngine engine) return javaScriptEngine.CreatePromiseForTask(task); } + /// + /// Converts a instance to a + /// promise + /// for use with script code currently running on the calling thread. + /// + /// The task's result type. + /// The task to convert to a promise. + /// A promise that represents the task's asynchronous operation. + public static object ToPromise(this ValueTask valueTask) + { + return valueTask.ToPromise(ScriptEngine.Current); + } + + /// + /// Converts a instance to a + /// promise + /// for use with script code running in the specified script engine. + /// + /// The task's result type. + /// The task to convert to a promise. + /// The script engine in which the promise will be used. + /// A promise that represents the task's asynchronous operation. + public static object ToPromise(this ValueTask valueTask, ScriptEngine engine) + { + MiscHelpers.VerifyNonNullArgument(valueTask, nameof(valueTask)); + MiscHelpers.VerifyNonNullArgument(engine, nameof(engine)); + + var javaScriptEngine = engine as IJavaScriptEngine; + if ((javaScriptEngine is null) || (javaScriptEngine.BaseLanguageVersion < 6)) + { + throw new NotSupportedException("The script engine does not support promises"); + } + + return javaScriptEngine.CreatePromiseForValueTask(valueTask); + } + + /// + /// Converts a instance to a + /// promise + /// for use with script code currently running on the calling thread. + /// + /// The task to convert to a promise. + /// A promise that represents the task's asynchronous operation. + public static object ToPromise(this ValueTask valueTask) + { + return valueTask.ToPromise(ScriptEngine.Current); + } + + /// + /// Converts a instance to a + /// promise + /// for use with script code running in the specified script engine. + /// + /// The task to convert to a promise. + /// The script engine in which the promise will be used. + /// A promise that represents the task's asynchronous operation. + public static object ToPromise(this ValueTask valueTask, ScriptEngine engine) + { + MiscHelpers.VerifyNonNullArgument(valueTask, nameof(valueTask)); + MiscHelpers.VerifyNonNullArgument(engine, nameof(engine)); + + var javaScriptEngine = engine as IJavaScriptEngine; + if ((javaScriptEngine is null) || (javaScriptEngine.BaseLanguageVersion < 6)) + { + throw new NotSupportedException("The script engine does not support promises"); + } + + return javaScriptEngine.CreatePromiseForValueTask(valueTask); + } + /// /// Converts a /// promise @@ -127,16 +197,32 @@ public static IEnumerable ToEnumerable(this object iterable) return iterable as IEnumerable ?? iterable.ToEnumerableInternal(); } + /// + /// Supports managed asynchronous iteration over an + /// async-iterable + /// script object. + /// + /// An async-iterable script object (see remarks). + /// An IAsyncEnumerator<Object> implementation that supports managed asynchronous iteration over . + /// + /// If the argument implements IAsyncEnumerator<Object>, this method returns it as is. + /// + public static IAsyncEnumerable ToAsyncEnumerable(this object asyncIterable) + { + MiscHelpers.VerifyNonNullArgument(asyncIterable, nameof(asyncIterable)); + return asyncIterable as IAsyncEnumerable ?? asyncIterable.ToAsyncEnumerableInternal(); + } + private static Task ToTaskInternal(this object promise) { var scriptObject = promise as ScriptObject; - if (scriptObject == null) + if (scriptObject is null) { throw new ArgumentException("The object is not a promise", nameof(promise)); } var javaScriptEngine = scriptObject.Engine as IJavaScriptEngine; - if ((javaScriptEngine == null) || (javaScriptEngine.BaseLanguageVersion < 6)) + if ((javaScriptEngine is null) || (javaScriptEngine.BaseLanguageVersion < 6)) { throw new NotSupportedException("The script engine does not support promises"); } @@ -180,5 +266,56 @@ private static IEnumerable ToEnumerableInternal(this object iterable) throw new ArgumentException("The object is not iterable", nameof(iterable)); } } + + private static async IAsyncEnumerable ToAsyncEnumerableInternal(this object asyncIterable) + { + if (asyncIterable is IEnumerable objectEnumerable) + { + foreach (var item in objectEnumerable) + { + yield return item; + } + } + else if (asyncIterable is ScriptObject scriptObject) + { + if (scriptObject.Engine is IJavaScriptEngine javaScriptEngine && (javaScriptEngine.BaseLanguageVersion >= 6)) + { + var engineInternal = (ScriptObject)javaScriptEngine.Global["EngineInternal"]; + if (engineInternal.InvokeMethod("getAsyncIterator", scriptObject) is ScriptObject asyncIterator) + { + while (await asyncIterator.InvokeMethod("next").ToTask().ConfigureAwait(false) is ScriptObject result && !Equals(result["done"], true)) + { + yield return result["value"]; + } + } + else if (engineInternal.InvokeMethod("getIterator", scriptObject) is ScriptObject iterator) + { + while (iterator.InvokeMethod("next") is ScriptObject result && !Equals(result["done"], true)) + { + yield return result["value"]; + } + } + else + { + throw new ArgumentException("The object is not async-iterable", nameof(asyncIterable)); + } + } + else + { + throw new NotSupportedException("The script engine does not support async iteration"); + } + } + else if (asyncIterable is IEnumerable enumerable) + { + foreach (var item in enumerable) + { + yield return item; + } + } + else + { + throw new ArgumentException("The object is not async-iterable", nameof(asyncIterable)); + } + } } } diff --git a/ClearScript/JavaScript/JavaScriptObjectFlags.cs b/ClearScript/JavaScript/JavaScriptObjectFlags.cs index d5363fbfe..06925383b 100644 --- a/ClearScript/JavaScript/JavaScriptObjectFlags.cs +++ b/ClearScript/JavaScript/JavaScriptObjectFlags.cs @@ -39,6 +39,27 @@ public enum JavaScriptObjectFlags /// or /// async generator function. /// - Generator = 0x00000004 + Generator = 0x00000004, + + /// + /// Indicates that the object is a + /// promise + /// that is not yet settled. If the object is a promise and this attribute is not present, + /// then the promise is fulfilled unless is present. + /// + Pending = 0x00000008, + + /// + /// Indicates that the object is a rejected + /// promise. + /// This attribute has no meaning if is present. + /// + Rejected = 0x00000010 + } + + internal static class JavaScriptObjectFlagsHelpers + { + public static bool HasAllFlags(this JavaScriptObjectFlags value, JavaScriptObjectFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this JavaScriptObjectFlags value, JavaScriptObjectFlags flags) => (value & flags) != 0; } } diff --git a/ClearScript/JavaScript/JsonModuleManager.cs b/ClearScript/JavaScript/JsonModuleManager.cs index 1c1138393..01bde0565 100644 --- a/ClearScript/JavaScript/JsonModuleManager.cs +++ b/ClearScript/JavaScript/JsonModuleManager.cs @@ -11,7 +11,7 @@ namespace Microsoft.ClearScript.JavaScript internal sealed class JsonModuleManager { private readonly ScriptEngine engine; - private readonly List moduleCache = new List(); + private readonly List moduleCache = new(); public JsonModuleManager(ScriptEngine engine) { @@ -25,7 +25,7 @@ public Module GetOrCreateModule(UniqueDocumentInfo documentInfo, string json) var jsonDigest = json.GetDigest(); var cachedModule = GetCachedModule(documentInfo, jsonDigest); - if (cachedModule != null) + if (cachedModule is not null) { return cachedModule; } @@ -52,7 +52,7 @@ private Module GetCachedModule(UniqueDocumentInfo documentInfo, UIntPtr jsonDige private Module CacheModule(Module module) { var cachedModule = moduleCache.FirstOrDefault(testModule => (testModule.DocumentInfo.UniqueId == module.DocumentInfo.UniqueId) && (testModule.JsonDigest == module.JsonDigest)); - if (cachedModule != null) + if (cachedModule is not null) { return cachedModule; } diff --git a/ClearScript/JavaScript/ModuleCategory.cs b/ClearScript/JavaScript/ModuleCategory.cs index e632ad88e..ef70e672f 100644 --- a/ClearScript/JavaScript/ModuleCategory.cs +++ b/ClearScript/JavaScript/ModuleCategory.cs @@ -22,7 +22,7 @@ public static class ModuleCategory private sealed class StandardModule : DocumentCategory { - public static readonly StandardModule Instance = new StandardModule(); + public static readonly StandardModule Instance = new(); private StandardModule() { @@ -52,7 +52,7 @@ public override string ToString() private sealed class CommonJSModule : DocumentCategory { - public static readonly CommonJSModule Instance = new CommonJSModule(); + public static readonly CommonJSModule Instance = new(); private CommonJSModule() { diff --git a/ClearScript/Properties/AssemblyInfo.Core.cs b/ClearScript/Properties/AssemblyInfo.Core.cs index d8a69089a..a19649c42 100644 --- a/ClearScript/Properties/AssemblyInfo.Core.cs +++ b/ClearScript/Properties/AssemblyInfo.Core.cs @@ -18,15 +18,15 @@ [assembly: InternalsVisibleTo("ClearScriptTest")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("7.4.5")] -[assembly: AssemblyFileVersion("7.4.5")] -[assembly: AssemblyInformationalVersion("7.4.5")] +[assembly: AssemblyVersion("7.5.0")] +[assembly: AssemblyFileVersion("7.5.0")] +[assembly: AssemblyInformationalVersion("7.5.0")] namespace Microsoft.ClearScript.Properties { internal static class ClearScriptVersion { - public const string Triad = "7.4.5"; - public const string Informational = "7.4.5"; + public const string Triad = "7.5.0"; + public const string Informational = "7.5.0"; } } diff --git a/ClearScript/Properties/AssemblyInfo.V8.ICUData.cs b/ClearScript/Properties/AssemblyInfo.V8.ICUData.cs index 10c1e3a00..99b3cb154 100644 --- a/ClearScript/Properties/AssemblyInfo.V8.ICUData.cs +++ b/ClearScript/Properties/AssemblyInfo.V8.ICUData.cs @@ -15,6 +15,6 @@ [assembly: InternalsVisibleTo("ClearScript.V8")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("7.4.5")] -[assembly: AssemblyFileVersion("7.4.5")] -[assembly: AssemblyInformationalVersion("7.4.5")] +[assembly: AssemblyVersion("7.5.0")] +[assembly: AssemblyFileVersion("7.5.0")] +[assembly: AssemblyInformationalVersion("7.5.0")] diff --git a/ClearScript/Properties/AssemblyInfo.V8.cs b/ClearScript/Properties/AssemblyInfo.V8.cs index 1dd534aed..8e7c54260 100644 --- a/ClearScript/Properties/AssemblyInfo.V8.cs +++ b/ClearScript/Properties/AssemblyInfo.V8.cs @@ -15,6 +15,6 @@ [assembly: InternalsVisibleTo("ClearScriptTest")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("7.4.5")] -[assembly: AssemblyFileVersion("7.4.5")] -[assembly: AssemblyInformationalVersion("7.4.5")] +[assembly: AssemblyVersion("7.5.0")] +[assembly: AssemblyFileVersion("7.5.0")] +[assembly: AssemblyInformationalVersion("7.5.0")] diff --git a/ClearScript/Properties/AssemblyInfo.Windows.Core.cs b/ClearScript/Properties/AssemblyInfo.Windows.Core.cs index 2c7ce94dc..2e01f30fb 100644 --- a/ClearScript/Properties/AssemblyInfo.Windows.Core.cs +++ b/ClearScript/Properties/AssemblyInfo.Windows.Core.cs @@ -16,6 +16,6 @@ [assembly: InternalsVisibleTo("ClearScriptTest")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("7.4.5")] -[assembly: AssemblyFileVersion("7.4.5")] -[assembly: AssemblyInformationalVersion("7.4.5")] +[assembly: AssemblyVersion("7.5.0")] +[assembly: AssemblyFileVersion("7.5.0")] +[assembly: AssemblyInformationalVersion("7.5.0")] diff --git a/ClearScript/Properties/AssemblyInfo.Windows.cs b/ClearScript/Properties/AssemblyInfo.Windows.cs index a4e269be3..6784b89b7 100644 --- a/ClearScript/Properties/AssemblyInfo.Windows.cs +++ b/ClearScript/Properties/AssemblyInfo.Windows.cs @@ -15,6 +15,6 @@ [assembly: InternalsVisibleTo("ClearScriptTest")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("7.4.5")] -[assembly: AssemblyFileVersion("7.4.5")] -[assembly: AssemblyInformationalVersion("7.4.5")] +[assembly: AssemblyVersion("7.5.0")] +[assembly: AssemblyFileVersion("7.5.0")] +[assembly: AssemblyInformationalVersion("7.5.0")] diff --git a/ClearScript/PropertyBag.cs b/ClearScript/PropertyBag.cs index bd8068bdb..941dbe9f0 100644 --- a/ClearScript/PropertyBag.cs +++ b/ClearScript/PropertyBag.cs @@ -36,7 +36,7 @@ public class PropertyBag : IPropertyBag, INotifyPropertyChanged, IScriptableObje private readonly IDictionary dictionary; private readonly bool isReadOnly; - private readonly ConcurrentWeakSet engineSet = new ConcurrentWeakSet(); + private readonly ConcurrentWeakSet engineSet = new(); #endregion @@ -188,6 +188,7 @@ private void NotifyExposedToScriptCode(object value) [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member requires explicit implementation to resolve ambiguity.")] IEnumerator IEnumerable.GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return dictionary.GetEnumerator(); } @@ -198,6 +199,7 @@ IEnumerator IEnumerable.GetEnumerator() [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member requires explicit implementation to resolve ambiguity.")] IEnumerator> IEnumerable>.GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return dictionary.GetEnumerator(); } @@ -279,7 +281,7 @@ public void Add(string key, object value) /// Removes a property from the . /// /// The name of the property to remove. - /// True if the property was successfully found and removed, false otherwise. + /// True if the property was found and removed, false otherwise. public bool Remove(string key) { CheckReadOnly(); @@ -339,7 +341,7 @@ public object this[string key] [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes", Justification = "This member is not expected to be re-implemented in derived classes.")] void IScriptableObject.OnExposedToScriptCode(ScriptEngine engine) { - if ((engine != null) && engineSet.TryAdd(engine)) + if ((engine is not null) && engineSet.TryAdd(engine)) { foreach (var scriptableObject in Values.OfType()) { diff --git a/ClearScript/ScriptEngine.cs b/ClearScript/ScriptEngine.cs index b4a75e37c..55bb52406 100644 --- a/ClearScript/ScriptEngine.cs +++ b/ClearScript/ScriptEngine.cs @@ -24,10 +24,10 @@ public abstract class ScriptEngine : IScriptEngine, IHostContext private CustomAttributeLoader customAttributeLoader; private DocumentSettings documentSettings; - private readonly DocumentSettings defaultDocumentSettings = new DocumentSettings(); + private readonly DocumentSettings defaultDocumentSettings = new(); private static readonly IUniqueNameManager nameManager = new UniqueNameManager(); - private static readonly object nullHostObjectProxy = new object(); + private static readonly object nullHostObjectProxy = new(); [ThreadStatic] private static ScriptEngine currentEngine; #endregion @@ -139,15 +139,18 @@ public bool DisableExtensionMethods var newExtensionMethodTable = value ? emptyExtensionMethodTable : realExtensionMethodTable; if (newExtensionMethodTable != extensionMethodTable) { - ScriptInvoke(() => - { - if (newExtensionMethodTable != extensionMethodTable) + ScriptInvoke( + static ctx => { - extensionMethodTable = newExtensionMethodTable; - ClearMethodBindCache(); - OnAccessSettingsChanged(); - } - }); + if (ctx.newExtensionMethodTable != ctx.self.extensionMethodTable) + { + ctx.self.extensionMethodTable = ctx.newExtensionMethodTable; + ctx.self.ClearMethodBindCache(); + ctx.self.OnAccessSettingsChanged(); + } + }, + (self: this, newExtensionMethodTable) + ); } } } @@ -182,6 +185,9 @@ public bool DisableExtensionMethods /// public object UndefinedImportValue { get; set; } = Undefined.Value; + /// + public object NullImportValue { get; set; } + /// public object NullExportValue { get; set; } @@ -344,11 +350,11 @@ public void AddHostType(string itemName, HostItemFlags flags, string typeName, s /// public void AddHostTypes(params Type[] types) { - if (types != null) + if (types is not null) { foreach (var type in types) { - if (type != null) + if (type is not null) { AddHostType(type); } @@ -536,13 +542,13 @@ internal object PrepareResult(T result, ScriptMemberFlags flags, bool isListI internal virtual object PrepareResult(object result, Type type, ScriptMemberFlags flags, bool isListIndexResult) { - var wrapNull = flags.HasFlag(ScriptMemberFlags.WrapNullResult) || EnableNullResultWrapping; - if (wrapNull && (result == null)) + var wrapNull = flags.HasAllFlags(ScriptMemberFlags.WrapNullResult) || EnableNullResultWrapping; + if (wrapNull && (result is null)) { return HostObject.WrapResult(null, type, true); } - if (!flags.HasFlag(ScriptMemberFlags.ExposeRuntimeType) && !DisableTypeRestriction && (!isListIndexResult || !DisableListIndexTypeRestriction)) + if (!flags.HasAllFlags(ScriptMemberFlags.ExposeRuntimeType) && !DisableTypeRestriction && (!isListIndexResult || !DisableListIndexTypeRestriction)) { return HostObject.WrapResult(result, type, wrapNull); } @@ -602,7 +608,7 @@ internal string GetCommandResultString(object result) return null; } - if (marshaledResult == null) + if (marshaledResult is null) { return "[null]"; } @@ -626,7 +632,7 @@ internal void RequestInterrupt() // method provides an alternate mechanism based on IActiveScriptSiteInterruptPoll. var tempScriptFrame = CurrentScriptFrame; - if (tempScriptFrame != null) + if (tempScriptFrame is not null) { tempScriptFrame.InterruptRequested = true; } @@ -655,20 +661,30 @@ internal virtual void HostInvoke(Action action) action(); } - internal virtual T HostInvoke(Func func) + internal virtual void HostInvoke(Action action, in TArg arg) + { + action(arg); + } + + internal virtual TResult HostInvoke(Func func) { return func(); } + internal virtual TResult HostInvoke(Func func, in TArg arg) + { + return func(arg); + } + #endregion #region script-side invocation internal ScriptFrame CurrentScriptFrame { get; private set; } - internal IDisposable CreateEngineScope() + internal ValueScope CreateEngineScope() { - return Scope.Create(() => MiscHelpers.Exchange(ref currentEngine, this), previousEngine => currentEngine = previousEngine); + return ScopeFactory.Create(static engine => MiscHelpers.Exchange(ref currentEngine, engine), static previousEngine => currentEngine = previousEngine, this); } internal virtual void ScriptInvoke(Action action) @@ -679,7 +695,15 @@ internal virtual void ScriptInvoke(Action action) } } - internal virtual T ScriptInvoke(Func func) + internal virtual void ScriptInvoke(Action action, in TArg arg) + { + using (CreateEngineScope()) + { + ScriptInvokeInternal(action, arg); + } + } + + internal virtual TResult ScriptInvoke(Func func) { using (CreateEngineScope()) { @@ -687,6 +711,14 @@ internal virtual T ScriptInvoke(Func func) } } + internal virtual TResult ScriptInvoke(Func func, in TArg arg) + { + using (CreateEngineScope()) + { + return ScriptInvokeInternal(func, arg); + } + } + internal void ScriptInvokeInternal(Action action) { var previousScriptFrame = CurrentScriptFrame; @@ -702,7 +734,22 @@ internal void ScriptInvokeInternal(Action action) } } - internal T ScriptInvokeInternal(Func func) + internal void ScriptInvokeInternal(Action action, in TArg arg) + { + var previousScriptFrame = CurrentScriptFrame; + CurrentScriptFrame = new ScriptFrame(); + + try + { + action(arg); + } + finally + { + CurrentScriptFrame = previousScriptFrame; + } + } + + internal TResult ScriptInvokeInternal(Func func) { var previousScriptFrame = CurrentScriptFrame; CurrentScriptFrame = new ScriptFrame(); @@ -717,9 +764,24 @@ internal T ScriptInvokeInternal(Func func) } } + internal TResult ScriptInvokeInternal(Func func, in TArg arg) + { + var previousScriptFrame = CurrentScriptFrame; + CurrentScriptFrame = new ScriptFrame(); + + try + { + return func(arg); + } + finally + { + CurrentScriptFrame = previousScriptFrame; + } + } + internal void ThrowScriptError() { - if (CurrentScriptFrame != null) + if (CurrentScriptFrame is not null) { ThrowScriptError(CurrentScriptFrame.ScriptError); } @@ -727,7 +789,7 @@ internal void ThrowScriptError() internal static void ThrowScriptError(IScriptEngineException scriptError) { - if (scriptError != null) + if (scriptError is not null) { if (scriptError is ScriptInterruptedException) { @@ -756,7 +818,7 @@ internal virtual T SyncInvoke(Func func) #region enumeration settings - internal object EnumerationSettingsToken { get; private set; } = new object(); + internal object EnumerationSettingsToken { get; private set; } = new(); internal void OnEnumerationSettingsChanged() { @@ -767,7 +829,7 @@ internal void OnEnumerationSettingsChanged() #region extension method table - private static readonly ExtensionMethodTable emptyExtensionMethodTable = new ExtensionMethodTable(); + private static readonly ExtensionMethodTable emptyExtensionMethodTable = new(); private readonly ExtensionMethodTable realExtensionMethodTable; private ExtensionMethodTable extensionMethodTable; @@ -797,7 +859,7 @@ internal void RebuildExtensionMethodSummary() #region constructor bind cache - private readonly Dictionary constructorBindCache = new Dictionary(); + private readonly Dictionary constructorBindCache = new(); internal void CacheConstructorBindResult(BindSignature signature, ConstructorInfo result) { @@ -818,7 +880,7 @@ private void ClearConstructorBindCache() #region method bind cache - private readonly Dictionary methodBindCache = new Dictionary(); + private readonly Dictionary methodBindCache = new(); internal void CacheMethodBindResult(BindSignature signature, object result) { @@ -839,8 +901,8 @@ private void ClearMethodBindCache() #region property bind cache - private readonly Dictionary propertyGetBindCache = new Dictionary(); - private readonly Dictionary propertySetBindCache = new Dictionary(); + private readonly Dictionary propertyGetBindCache = new(); + private readonly Dictionary propertySetBindCache = new(); internal void CachePropertyGetBindResult(BindSignature signature, MemberInfo property) { @@ -872,14 +934,19 @@ private void ClearPropertyBindCache() #region host item cache - private readonly ConditionalWeakTable> hostObjectHostItemCache = new ConditionalWeakTable>(); - private readonly ConditionalWeakTable> hostTypeHostItemCache = new ConditionalWeakTable>(); + private readonly ConditionalWeakTable>> hostObjectHostItemCache = new(); + private readonly ConditionalWeakTable>> hostTypeHostItemCache = new(); + + internal HostItem GetOrCreateHostItem(object target, Type type, bool isCanonicalRef, HostItemFlags flags, HostItem.CreateFunc createHostItem) + { + return GetOrCreateHostItemForHostObject(null, target, type, isCanonicalRef, flags, createHostItem); + } internal HostItem GetOrCreateHostItem(HostTarget target, HostItemFlags flags, HostItem.CreateFunc createHostItem) { if (target is HostObject hostObject) { - return GetOrCreateHostItemForHostObject(hostObject, hostObject.Target, flags, createHostItem); + return GetOrCreateHostItemForHostObject(hostObject, hostObject.Target, hostObject.Type, true, flags, createHostItem); } if (target is HostType hostType) @@ -889,46 +956,45 @@ internal HostItem GetOrCreateHostItem(HostTarget target, HostItemFlags flags, Ho if (target is HostMethod hostMethod) { - return GetOrCreateHostItemForHostObject(hostMethod, hostMethod, flags, createHostItem); + return GetOrCreateHostItemForHostObject(hostMethod, hostMethod, hostMethod.Type, true, flags, createHostItem); } if (target is HostVariable hostVariable) { - return GetOrCreateHostItemForHostObject(hostVariable, hostVariable, flags, createHostItem); + return GetOrCreateHostItemForHostObject(hostVariable, hostVariable, hostVariable.Type, true, flags, createHostItem); } if (target is HostIndexedProperty hostIndexedProperty) { - return GetOrCreateHostItemForHostObject(hostIndexedProperty, hostIndexedProperty, flags, createHostItem); + return GetOrCreateHostItemForHostObject(hostIndexedProperty, hostIndexedProperty, hostIndexedProperty.Type, true, flags, createHostItem); } return CreateHostItem(target, flags, createHostItem, null); } - private HostItem GetOrCreateHostItemForHostObject(HostTarget hostTarget, object target, HostItemFlags flags, HostItem.CreateFunc createHostItem) + private HostItem GetOrCreateHostItemForHostObject(HostTarget hostTarget, object target, Type type, bool isCanonicalRef, HostItemFlags flags, HostItem.CreateFunc createHostItem) { var cacheEntry = hostObjectHostItemCache.GetOrCreateValue(target ?? nullHostObjectProxy); - List activeWeakRefs = null; + List> activeWeakRefs = null; var staleWeakRefCount = 0; foreach (var weakRef in cacheEntry) { - var hostItem = weakRef.Target as HostItem; - if (hostItem == null) + if (!weakRef.TryGetTarget(out var hostItem)) { staleWeakRefCount++; } else { - if ((hostItem.Target.Type == hostTarget.Type) && (hostItem.Flags == flags)) + if ((hostItem.Target.Type == type) && (hostItem.Flags == flags)) { return hostItem; } - if (activeWeakRefs == null) + if (activeWeakRefs is null) { - activeWeakRefs = new List(cacheEntry.Count); + activeWeakRefs = new List>(cacheEntry.Count); } activeWeakRefs.Add(weakRef); @@ -938,14 +1004,14 @@ private HostItem GetOrCreateHostItemForHostObject(HostTarget hostTarget, object if (staleWeakRefCount > 4) { cacheEntry.Clear(); - if (activeWeakRefs != null) + if (activeWeakRefs is not null) { cacheEntry.Capacity = activeWeakRefs.Count + 1; cacheEntry.AddRange(activeWeakRefs); } } - return CreateHostItem(hostTarget, flags, createHostItem, cacheEntry); + return CreateHostItem(hostTarget ?? HostObject.Wrap(target, type, isCanonicalRef), flags, createHostItem, cacheEntry); } private HostItem GetOrCreateHostItemForHostType(HostType hostType, HostItemFlags flags, HostItem.CreateFunc createHostItem) @@ -957,13 +1023,12 @@ private HostItem GetOrCreateHostItemForHostType(HostType hostType, HostItemFlags var cacheEntry = hostTypeHostItemCache.GetOrCreateValue(hostType.Types[0]); - List activeWeakRefs = null; + List> activeWeakRefs = null; var staleWeakRefCount = 0; foreach (var weakRef in cacheEntry) { - var hostItem = weakRef.Target as HostItem; - if (hostItem == null) + if (!weakRef.TryGetTarget(out var hostItem)) { staleWeakRefCount++; } @@ -974,9 +1039,9 @@ private HostItem GetOrCreateHostItemForHostType(HostType hostType, HostItemFlags return hostItem; } - if (activeWeakRefs == null) + if (activeWeakRefs is null) { - activeWeakRefs = new List(cacheEntry.Count); + activeWeakRefs = new List>(cacheEntry.Count); } activeWeakRefs.Add(weakRef); @@ -986,7 +1051,7 @@ private HostItem GetOrCreateHostItemForHostType(HostType hostType, HostItemFlags if (staleWeakRefCount > 4) { cacheEntry.Clear(); - if (activeWeakRefs != null) + if (activeWeakRefs is not null) { cacheEntry.Capacity = activeWeakRefs.Count + 1; cacheEntry.AddRange(activeWeakRefs); @@ -996,13 +1061,13 @@ private HostItem GetOrCreateHostItemForHostType(HostType hostType, HostItemFlags return CreateHostItem(hostType, flags, createHostItem, cacheEntry); } - private HostItem CreateHostItem(HostTarget hostTarget, HostItemFlags flags, HostItem.CreateFunc createHostItem, List cacheEntry) + private HostItem CreateHostItem(HostTarget hostTarget, HostItemFlags flags, HostItem.CreateFunc createHostItem, List> cacheEntry) { var newHostItem = createHostItem(this, hostTarget, flags); - if (cacheEntry != null) + if (cacheEntry is not null) { - cacheEntry.Add(new WeakReference(newHostItem)); + cacheEntry.Add(new WeakReference(newHostItem)); } if (hostTarget.Target is IScriptableObject scriptableObject) @@ -1023,23 +1088,22 @@ private HostItem CreateHostItem(HostTarget hostTarget, HostItemFlags flags, Host #region shared host target member data - internal readonly HostTargetMemberData SharedHostMethodMemberData = new HostTargetMemberData(); - internal readonly HostTargetMemberData SharedHostIndexedPropertyMemberData = new HostTargetMemberData(); - internal readonly HostTargetMemberData SharedScriptMethodMemberData = new HostTargetMemberData(); + internal readonly HostTargetMemberData SharedHostMethodMemberData = new(); + internal readonly HostTargetMemberData SharedHostIndexedPropertyMemberData = new(); + internal readonly HostTargetMemberData SharedScriptMethodMemberData = new(); - private readonly ConditionalWeakTable> sharedHostObjectMemberDataCache = new ConditionalWeakTable>(); + private readonly ConditionalWeakTable>> sharedHostObjectMemberDataCache = new(); internal HostTargetMemberData GetSharedHostObjectMemberData(HostObject target, CustomAttributeLoader targetCustomAttributeLoader, Type targetAccessContext, ScriptAccess targetDefaultAccess, HostTargetFlags targetFlags) { var cacheEntry = sharedHostObjectMemberDataCache.GetOrCreateValue(target.Type); - List activeWeakRefs = null; + List> activeWeakRefs = null; var staleWeakRefCount = 0; foreach (var weakRef in cacheEntry) { - var memberData = weakRef.Target as HostTargetMemberDataWithContext; - if (memberData == null) + if (!weakRef.TryGetTarget(out var memberData)) { staleWeakRefCount++; } @@ -1050,9 +1114,9 @@ internal HostTargetMemberData GetSharedHostObjectMemberData(HostObject target, C return memberData; } - if (activeWeakRefs == null) + if (activeWeakRefs is null) { - activeWeakRefs = new List(cacheEntry.Count); + activeWeakRefs = new List>(cacheEntry.Count); } activeWeakRefs.Add(weakRef); @@ -1062,7 +1126,7 @@ internal HostTargetMemberData GetSharedHostObjectMemberData(HostObject target, C if (staleWeakRefCount > 4) { cacheEntry.Clear(); - if (activeWeakRefs != null) + if (activeWeakRefs is not null) { cacheEntry.Capacity = activeWeakRefs.Count + 1; cacheEntry.AddRange(activeWeakRefs); @@ -1070,7 +1134,7 @@ internal HostTargetMemberData GetSharedHostObjectMemberData(HostObject target, C } var newMemberData = new HostTargetMemberDataWithContext(targetCustomAttributeLoader, targetAccessContext, targetDefaultAccess, targetFlags); - cacheEntry.Add(new WeakReference(newMemberData)); + cacheEntry.Add(new WeakReference(newMemberData)); return newMemberData; } @@ -1078,7 +1142,7 @@ internal HostTargetMemberData GetSharedHostObjectMemberData(HostObject target, C #region event connections - private readonly EventConnectionMap eventConnectionMap = new EventConnectionMap(); + private readonly EventConnectionMap eventConnectionMap = new(); internal EventConnection CreateEventConnection(Type handlerType, object source, EventInfo eventInfo, Delegate handler) { @@ -1171,8 +1235,8 @@ internal sealed class ScriptFrame private sealed class EventConnectionMap : IDisposable { - private readonly HashSet map = new HashSet(); - private readonly InterlockedOneWayFlag disposedFlag = new InterlockedOneWayFlag(); + private readonly HashSet map = new(); + private readonly InterlockedOneWayFlag disposedFlag = new(); internal EventConnection Create(ScriptEngine engine, Type handlerType, object source, EventInfo eventInfo, Delegate handler) { diff --git a/ClearScript/ScriptEngineException.cs b/ClearScript/ScriptEngineException.cs index 81d1a1da4..dcc3c5927 100644 --- a/ClearScript/ScriptEngineException.cs +++ b/ClearScript/ScriptEngineException.cs @@ -44,7 +44,7 @@ public ScriptEngineException() /// /// The error message. public ScriptEngineException(string message) - : base(MiscHelpers.EnsureNonBlank(message, defaultMessage)) + : base(message.ToNonBlank(defaultMessage)) { errorDetails = base.Message; } @@ -55,7 +55,7 @@ public ScriptEngineException(string message) /// The error message. /// The exception that caused the current exception to be thrown. public ScriptEngineException(string message, Exception innerException) - : base(MiscHelpers.EnsureNonBlank(message, defaultMessage), innerException) + : base(message.ToNonBlank(defaultMessage), innerException) { errorDetails = base.Message; } @@ -75,10 +75,10 @@ protected ScriptEngineException(SerializationInfo info, StreamingContext context } internal ScriptEngineException(string engineName, string message, string errorDetails, int errorCode, bool isFatal, bool executionStarted, object scriptException, Exception innerException) - : base(MiscHelpers.EnsureNonBlank(message, defaultMessage), innerException) + : base(message.ToNonBlank(defaultMessage), innerException) { this.engineName = engineName; - this.errorDetails = MiscHelpers.EnsureNonBlank(errorDetails, base.Message); + this.errorDetails = errorDetails.ToNonBlank(base.Message); this.isFatal = isFatal; this.executionStarted = executionStarted; this.scriptException = scriptException; diff --git a/ClearScript/ScriptInterruptedException.cs b/ClearScript/ScriptInterruptedException.cs index 554c37f08..efb634b83 100644 --- a/ClearScript/ScriptInterruptedException.cs +++ b/ClearScript/ScriptInterruptedException.cs @@ -44,7 +44,7 @@ public ScriptInterruptedException() /// /// The error message. public ScriptInterruptedException(string message) - : base(MiscHelpers.EnsureNonBlank(message, defaultMessage)) + : base(message.ToNonBlank(defaultMessage)) { errorDetails = base.Message; } @@ -55,7 +55,7 @@ public ScriptInterruptedException(string message) /// The error message. /// The exception that caused the current exception to be thrown. public ScriptInterruptedException(string message, Exception innerException) - : base(MiscHelpers.EnsureNonBlank(message, defaultMessage), innerException) + : base(message.ToNonBlank(defaultMessage), innerException) { errorDetails = base.Message; } @@ -75,10 +75,10 @@ protected ScriptInterruptedException(SerializationInfo info, StreamingContext co } internal ScriptInterruptedException(string engineName, string message, string errorDetails, int errorCode, bool isFatal, bool executionStarted, object scriptException, Exception innerException) - : base(MiscHelpers.EnsureNonBlank(message, defaultMessage), innerException) + : base(message.ToNonBlank(defaultMessage), innerException) { this.engineName = engineName; - this.errorDetails = MiscHelpers.EnsureNonBlank(errorDetails, base.Message); + this.errorDetails = errorDetails.ToNonBlank(base.Message); this.isFatal = isFatal; this.executionStarted = executionStarted; this.scriptException = scriptException; diff --git a/ClearScript/ScriptItem.cs b/ClearScript/ScriptItem.cs index a2f9f5fe7..e6bb67f26 100644 --- a/ClearScript/ScriptItem.cs +++ b/ClearScript/ScriptItem.cs @@ -23,7 +23,7 @@ internal abstract class ScriptItem : ScriptObject, IExpando, IDynamic, IScriptMa public static void ThrowLastScriptError() { var scriptError = lastScriptError; - if (scriptError != null) + if (scriptError is not null) { if (scriptError is ScriptInterruptedException) { @@ -48,40 +48,43 @@ protected virtual object[] AdjustInvokeArgs(object[] args) private bool TryWrappedBindAndInvoke(DynamicMetaObjectBinder binder, object[] wrappedArgs, out object result) { - object[] args = null; - object[] savedArgs = null; + var ctx = (self: this, binder, wrappedArgs, args: (object[])null, savedArgs: (object[])null, result: (object)null); - object tempResult = null; - var succeeded = Engine.ScriptInvoke(() => - { - args = Engine.MarshalToScript(wrappedArgs); - savedArgs = (object[])args.Clone(); - - if (!TryBindAndInvoke(binder, args, out tempResult)) + var succeeded = Engine.ScriptInvoke( + static pCtx => { - if ((Engine.CurrentScriptFrame != null) && (lastScriptError == null)) + ref var ctx = ref pCtx.AsRef(); + + ctx.args = ctx.self.Engine.MarshalToScript(ctx.wrappedArgs); + ctx.savedArgs = (object[])ctx.args.Clone(); + + if (!ctx.self.TryBindAndInvoke(ctx.binder, ctx.args, out ctx.result)) { - lastScriptError = Engine.CurrentScriptFrame.ScriptError; - } + if ((ctx.self.Engine.CurrentScriptFrame is not null) && (lastScriptError is null)) + { + lastScriptError = ctx.self.Engine.CurrentScriptFrame.ScriptError; + } - return false; - } + return false; + } - return true; - }); + return true; + }, + StructPtr.FromRef(ref ctx) + ); if (succeeded) { - for (var index = 0; index < args.Length; index++) + for (var index = 0; index < ctx.args.Length; index++) { - var arg = args[index]; - if (!ReferenceEquals(arg, savedArgs[index])) + var arg = ctx.args[index]; + if (!ReferenceEquals(arg, ctx.savedArgs[index])) { - wrappedArgs[index] = Engine.MarshalToHost(args[index], false); + wrappedArgs[index] = Engine.MarshalToHost(ctx.args[index], false); } } - result = Engine.MarshalToHost(tempResult, false).ToDynamicResult(Engine); + result = Engine.MarshalToHost(ctx.result, false).ToDynamicResult(Engine); return true; } @@ -92,12 +95,12 @@ private bool TryWrappedBindAndInvoke(DynamicMetaObjectBinder binder, object[] wr private bool TryWrappedInvokeOrInvokeMember(DynamicMetaObjectBinder binder, ParameterInfo[] parameters, object[] args, out object result) { Type[] paramTypes = null; - if ((parameters != null) && (parameters.Length >= args.Length)) + if ((parameters is not null) && (parameters.Length >= args.Length)) { paramTypes = parameters.Skip(parameters.Length - args.Length).Select(param => param.ParameterType).ToArray(); } - if (paramTypes != null) + if (paramTypes is not null) { for (var index = 0; index < paramTypes.Length; index++) { @@ -111,7 +114,7 @@ private bool TryWrappedInvokeOrInvokeMember(DynamicMetaObjectBinder binder, Para if (TryWrappedBindAndInvoke(binder, AdjustInvokeArgs(args), out result)) { - if (paramTypes != null) + if (paramTypes is not null) { for (var index = 0; index < paramTypes.Length; index++) { @@ -274,7 +277,7 @@ public MemberInfo[] GetMembers(BindingFlags bindFlags) public object InvokeMember(string name, BindingFlags invokeFlags, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) { - if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if (invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { if (name == SpecialMemberNames.Default) { @@ -284,7 +287,7 @@ public object InvokeMember(string name, BindingFlags invokeFlags, Binder binder, return InvokeMethod(name, args); } - if (invokeFlags.HasFlag(BindingFlags.GetField)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField)) { if (int.TryParse(name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var index)) { @@ -294,7 +297,7 @@ public object InvokeMember(string name, BindingFlags invokeFlags, Binder binder, return GetProperty(name, args); } - if (invokeFlags.HasFlag(BindingFlags.SetField)) + if (invokeFlags.HasAllFlags(BindingFlags.SetField)) { if (args.Length != 1) { @@ -352,11 +355,8 @@ public object GetProperty(string name, out bool isCacheable, params object[] arg return GetProperty(name, args); } - #endregion - - #region IDynamic implementation - public abstract string[] GetPropertyNames(); + public abstract int[] GetPropertyIndices(); #endregion diff --git a/ClearScript/ScriptMemberFlags.cs b/ClearScript/ScriptMemberFlags.cs index cc1a3fc7f..3b6b24be5 100644 --- a/ClearScript/ScriptMemberFlags.cs +++ b/ClearScript/ScriptMemberFlags.cs @@ -34,4 +34,10 @@ public enum ScriptMemberFlags /// WrapNullResult = 0x00000002 } + + internal static class ScriptMemberFlagsHelpers + { + public static bool HasAllFlags(this ScriptMemberFlags value, ScriptMemberFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this ScriptMemberFlags value, ScriptMemberFlags flags) => (value & flags) != 0; + } } diff --git a/ClearScript/ScriptMethod.cs b/ClearScript/ScriptMethod.cs index 8f43cf870..56d0bf522 100644 --- a/ClearScript/ScriptMethod.cs +++ b/ClearScript/ScriptMethod.cs @@ -110,7 +110,7 @@ MemberInfo[] IReflect.GetMember(string memberName, BindingFlags bindFlags) // script item properties as fields. Apparently VB's dynamic invocation support not // only recognizes IReflect/IExpando but actually favors it over DynamicObject. - return typeof(ScriptMethod).GetMember(MiscHelpers.EnsureNonBlank(memberName, "Invoke"), bindFlags); + return typeof(ScriptMethod).GetMember(memberName.ToNonBlank("Invoke"), bindFlags); } MemberInfo[] IReflect.GetMembers(BindingFlags bindFlags) diff --git a/ClearScript/Undefined.cs b/ClearScript/Undefined.cs index 59799c330..f72625909 100644 --- a/ClearScript/Undefined.cs +++ b/ClearScript/Undefined.cs @@ -17,7 +17,7 @@ public class Undefined /// /// The sole instance of the class. /// - public static readonly Undefined Value = new Undefined(); + public static readonly Undefined Value = new(); private Undefined() { diff --git a/ClearScript/Util/ArrayHelpers.cs b/ClearScript/Util/ArrayHelpers.cs index a4672793a..f9e75c497 100644 --- a/ClearScript/Util/ArrayHelpers.cs +++ b/ClearScript/Util/ArrayHelpers.cs @@ -2,7 +2,9 @@ // Licensed under the MIT license. using System; +using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace Microsoft.ClearScript.Util { @@ -43,6 +45,15 @@ public static T[] GetEmptyArray() return EmptyArray.Value; } + public static async IAsyncEnumerable AsAsyncEnumerable(this T[] array) + { + foreach (var item in array) + { + await Task.CompletedTask; + yield return item; + } + } + #region Nested type: EmptyArray private static class EmptyArray diff --git a/ClearScript/Util/AssemblyHelpers.cs b/ClearScript/Util/AssemblyHelpers.cs index 72657d11b..ca15e00dd 100644 --- a/ClearScript/Util/AssemblyHelpers.cs +++ b/ClearScript/Util/AssemblyHelpers.cs @@ -19,7 +19,7 @@ public static string GetFullAssemblyName(string name) return name; } - if (MiscHelpers.Try(out var assembly, () => Assembly.Load(name))) + if (MiscHelpers.Try(out var assembly, static name => Assembly.Load(name), name)) { return assembly.FullName; } @@ -30,7 +30,7 @@ public static string GetFullAssemblyName(string name) fileName = Path.ChangeExtension(fileName + '.', "dll"); } - if (MiscHelpers.Try(out var assemblyName, () => AssemblyName.GetAssemblyName(fileName))) + if (MiscHelpers.Try(out var assemblyName, static fileName => AssemblyName.GetAssemblyName(fileName), fileName)) { return assemblyName.FullName; } @@ -41,17 +41,17 @@ public static string GetFullAssemblyName(string name) // ReSharper disable AccessToModifiedClosure var path = Path.Combine(dirPath, fileName); - if (File.Exists(path) && MiscHelpers.Try(out assemblyName, () => AssemblyName.GetAssemblyName(path))) + if (File.Exists(path) && MiscHelpers.Try(out assemblyName, static path => AssemblyName.GetAssemblyName(path), path)) { return assemblyName.FullName; } - if (MiscHelpers.Try(out var subDirPaths, () => Directory.EnumerateDirectories(dirPath, "*", SearchOption.AllDirectories))) + if (MiscHelpers.Try(out var subDirPaths, static dirPath => Directory.EnumerateDirectories(dirPath, "*", SearchOption.AllDirectories), dirPath)) { foreach (var subDirPath in subDirPaths) { path = Path.Combine(subDirPath, fileName); - if (File.Exists(path) && MiscHelpers.Try(out assemblyName, () => AssemblyName.GetAssemblyName(path))) + if (File.Exists(path) && MiscHelpers.Try(out assemblyName, static path => AssemblyName.GetAssemblyName(path), path)) { return assemblyName.FullName; } @@ -66,7 +66,7 @@ public static string GetFullAssemblyName(string name) public static Assembly TryLoad(AssemblyName name) { - if (MiscHelpers.Try(out var assembly, () => Assembly.Load(name))) + if (MiscHelpers.Try(out var assembly, static name => Assembly.Load(name), name)) { return assembly; } @@ -117,13 +117,11 @@ public static IEnumerable GetReferencedEnums(this Assembly assembly) private static IEnumerable GetReferencedEnums(Assembly assembly, Type type, HashSet processedTypes) { - if ((type == null) || !type.IsVisible || type.ContainsGenericParameters || processedTypes.Contains(type)) + if ((type is null) || !type.IsVisible || type.ContainsGenericParameters || !processedTypes.Add(type)) { yield break; } - processedTypes.Add(type); - if (type.IsEnum) { yield return type; @@ -161,7 +159,7 @@ private static IEnumerable GetReferencedEnums(Assembly assembly, Type type private static IEnumerable GetReferencedEnums(Assembly assembly, MemberInfo member, HashSet processedTypes) { - if (member == null) + if (member is null) { return Enumerable.Empty(); } @@ -191,7 +189,7 @@ private static IEnumerable GetReferencedEnums(Assembly assembly, MemberInf private static IEnumerable GetReferencedEnums(Assembly assembly, FieldInfo field, HashSet processedTypes) { - if (field == null) + if (field is null) { return Enumerable.Empty(); } @@ -201,7 +199,7 @@ private static IEnumerable GetReferencedEnums(Assembly assembly, FieldInfo private static IEnumerable GetReferencedEnums(Assembly assembly, PropertyInfo property, HashSet processedTypes) { - if (property == null) + if (property is null) { yield break; } @@ -224,7 +222,7 @@ private static IEnumerable GetReferencedEnums(Assembly assembly, PropertyI private static IEnumerable GetReferencedEnums(Assembly assembly, MethodInfo method, HashSet processedTypes) { - if (method == null) + if (method is null) { yield break; } @@ -242,7 +240,7 @@ private static IEnumerable GetReferencedEnums(Assembly assembly, MethodInf private static IEnumerable GetReferencedEnums(Assembly assembly, ParameterInfo param, HashSet processedTypes) { - if (param == null) + if (param is null) { return Enumerable.Empty(); } diff --git a/ClearScript/Util/AssemblyTable.NetFramework.cs b/ClearScript/Util/AssemblyTable.NetFramework.cs index b0571b29e..c7c0cd4ec 100644 --- a/ClearScript/Util/AssemblyTable.NetFramework.cs +++ b/ClearScript/Util/AssemblyTable.NetFramework.cs @@ -3,9 +3,11 @@ using System; using System.Collections.Concurrent; +using System.Collections.Generic; using System.IO; +using System.Linq; using System.Reflection; -using System.Runtime.Serialization.Formatters.Binary; +using System.Xml.Serialization; using Microsoft.Win32; namespace Microsoft.ClearScript.Util @@ -29,9 +31,9 @@ static AssemblyTableImpl() // ReSharper disable HeuristicUnreachableCode LoadAssemblyTable(); - if (table != null) + if (table is not null) { - AppDomain.CurrentDomain.AssemblyLoad += (sender, args) => table.TryAdd(args.LoadedAssembly.GetName().Name, args.LoadedAssembly.FullName); + AppDomain.CurrentDomain.AssemblyLoad += (_, args) => table.TryAdd(args.LoadedAssembly.GetName().Name, args.LoadedAssembly.FullName); AppDomain.CurrentDomain.GetAssemblies().ForEach(assembly => table.TryAdd(assembly.GetName().Name, assembly.FullName)); } @@ -41,7 +43,7 @@ static AssemblyTableImpl() public static string GetFullAssemblyNameImpl(string name) { - return ((table != null) && table.TryGetValue(name, out var fullName)) ? fullName : AssemblyHelpers.GetFullAssemblyName(name); + return ((table is not null) && table.TryGetValue(name, out var fullName)) ? fullName : AssemblyHelpers.GetFullAssemblyName(name); } private static void LoadAssemblyTable() @@ -64,45 +66,53 @@ private static bool ReadAssemblyTable() private static bool ReadAssemblyTable(string rootPath) { - var succeeded = MiscHelpers.Try(() => - { - var filePath = GetFilePath(rootPath); - if (File.Exists(filePath)) + var succeeded = MiscHelpers.Try( + static rootPath => { - using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) + var filePath = GetFilePath(rootPath); + if (File.Exists(filePath)) { - var formatter = new BinaryFormatter(); - table = (ConcurrentDictionary)formatter.Deserialize(stream); + using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + var serializer = new XmlSerializer(typeof(AssemblyTableData)); + table = ((AssemblyTableData)serializer.Deserialize(stream)).CreateTable(); + } } - } - }); + }, + rootPath + ); - return succeeded && (table != null); + return succeeded && (table is not null); } private static bool BuildAssemblyTable() { - var succeeded = MiscHelpers.Try(() => - { - var key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETFramework"); - if (key != null) + var succeeded = MiscHelpers.Try( + static () => { - var dirPath = Path.Combine((string)key.GetValue("InstallRoot"), GetRuntimeVersionDirectoryName()); - - table = new ConcurrentDictionary(); - foreach (var filePath in Directory.EnumerateFiles(dirPath, "*.dll", SearchOption.AllDirectories)) + var key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\.NETFramework"); + if (key is not null) { - var path = filePath; - MiscHelpers.Try(() => + var dirPath = Path.Combine((string)key.GetValue("InstallRoot"), GetRuntimeVersionDirectoryName()); + + table = new ConcurrentDictionary(); + foreach (var filePath in Directory.EnumerateFiles(dirPath, "*.dll", SearchOption.AllDirectories)) { - var assemblyName = Assembly.ReflectionOnlyLoadFrom(path).GetName(); - table.TryAdd(assemblyName.Name, assemblyName.FullName); - }); + var path = filePath; + MiscHelpers.Try( + static path => + { + var assemblyName = Assembly.ReflectionOnlyLoadFrom(path).GetName(); + table.TryAdd(assemblyName.Name, assemblyName.FullName); + }, + path + ); + } } } - }); + ); - return succeeded && (table != null); + return succeeded && (table is not null); } private static void WriteAssemblyTable() @@ -115,15 +125,18 @@ private static void WriteAssemblyTable() private static bool WriteAssemblyTable(string rootPath) { - return MiscHelpers.Try(() => - { - var filePath = GetFilePath(rootPath); - using (var stream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)) + return MiscHelpers.Try( + static rootPath => { - var formatter = new BinaryFormatter(); - formatter.Serialize(stream, table); - } - }); + var filePath = GetFilePath(rootPath); + using (var stream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)) + { + var serializer = new XmlSerializer(typeof(AssemblyTableData)); + serializer.Serialize(stream, new AssemblyTableData(table)); + } + }, + rootPath + ); } private static string GetFilePath(string rootPath) @@ -131,7 +144,7 @@ private static string GetFilePath(string rootPath) var dirPath = Path.Combine(rootPath, GetRuntimeVersionDirectoryName()); Directory.CreateDirectory(dirPath); - return Path.Combine(dirPath, "AssemblyTable.bin"); + return Path.Combine(dirPath, "AssemblyTable.xml"); } private static string GetRuntimeVersionDirectoryName() @@ -142,4 +155,43 @@ private static string GetRuntimeVersionDirectoryName() #endregion } + + /// + [XmlRoot("AssemblyTable")] + public sealed class AssemblyTableData + { + /// + [XmlArray] public List Entries; + + /// + public AssemblyTableData() + { + } + + /// + public AssemblyTableData(ConcurrentDictionary table) + { + Entries = table.Select(pair => new Entry { Name = pair.Key, FullName = pair.Value }).ToList(); + } + + /// + public ConcurrentDictionary CreateTable() + { + return (Entries is null) ? null : new ConcurrentDictionary(Entries.Select(entry => new KeyValuePair(entry.Name, entry.FullName))); + } + + #region Nested type: Entry + + /// + public sealed class Entry + { + /// + [XmlAttribute] public string Name { get; set; } + + /// + [XmlAttribute] public string FullName { get; set; } + } + + #endregion + } } diff --git a/ClearScript/Util/COM/Dispatch.cs b/ClearScript/Util/COM/Dispatch.cs index dc33f4111..a9529beab 100644 --- a/ClearScript/Util/COM/Dispatch.cs +++ b/ClearScript/Util/COM/Dispatch.cs @@ -21,6 +21,12 @@ internal enum DispatchFlags : ushort Construct = 0x4000 } + internal static class DispatchFlagsHelpers + { + public static bool HasAllFlags(this DispatchFlags value, DispatchFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this DispatchFlags value, DispatchFlags flags) => (value & flags) != 0; + } + [Flags] internal enum DispatchNameFlags : uint { @@ -32,6 +38,12 @@ internal enum DispatchNameFlags : uint NoDynamicProperties = 0x00000020 } + internal static class DispatchNameFlagsHelpers + { + public static bool HasAllFlags(this DispatchNameFlags value, DispatchNameFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this DispatchNameFlags value, DispatchNameFlags flags) => (value & flags) != 0; + } + [Flags] internal enum DispatchPropFlags : uint { @@ -55,6 +67,12 @@ internal enum DispatchPropFlags : uint All = CanAll | CannotAll | ExtraAll } + internal static class DispatchPropFlagsHelpers + { + public static bool HasAllFlags(this DispatchPropFlags value, DispatchPropFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this DispatchPropFlags value, DispatchPropFlags flags) => (value & flags) != 0; + } + [Flags] internal enum DispatchEnumFlags : uint { diff --git a/ClearScript/Util/COM/DispatchHelpers.cs b/ClearScript/Util/COM/DispatchHelpers.cs index e1f2a2f2a..f91598141 100644 --- a/ClearScript/Util/COM/DispatchHelpers.cs +++ b/ClearScript/Util/COM/DispatchHelpers.cs @@ -31,7 +31,7 @@ public static ITypeInfo GetTypeInfo(this IDispatch dispatch) public static object GetProperty(this IDispatch dispatch, string name, params object[] args) { - if (!MiscHelpers.Try(out int dispid, () => dispatch.GetDispIDForName(name))) + if (!MiscHelpers.Try(out int dispid, static ctx => ctx.dispatch.GetDispIDForName(ctx.name), (dispatch, name))) { return Nonexistent.Value; } @@ -137,7 +137,7 @@ private static int GetDispIDForName(this IDispatch dispatch, string name) } var member = dispatch.GetMembers().FirstOrDefault(testMember => testMember.Name == name); - if (member == null) + if (member is null) { throw new MissingMemberException(MiscHelpers.FormatInvariant("The object has no property named '{0}'", name)); } @@ -148,7 +148,7 @@ private static int GetDispIDForName(this IDispatch dispatch, string name) private static IEnumerable GetMembersRaw(this IDispatch dispatch) { var typeInfo = dispatch.GetTypeInfo(); - if (typeInfo == null) + if (typeInfo is null) { throw new NotSupportedException("The object does not support late binding"); } @@ -174,7 +174,7 @@ public static ITypeInfo GetTypeInfo(this IDispatchEx dispatchEx) public static object GetProperty(this IDispatchEx dispatchEx, string name, bool ignoreCase, params object[] args) { - if (!MiscHelpers.Try(out int dispid, () => dispatchEx.GetDispIDForName(name, false, ignoreCase))) + if (!MiscHelpers.Try(out int dispid, static ctx => ctx.dispatchEx.GetDispIDForName(ctx.name, false, ctx.ignoreCase), (dispatchEx, name, ignoreCase))) { return Nonexistent.Value; } @@ -295,7 +295,7 @@ private static int GetDispIDForName(this IDispatchEx dispatchEx, string name, bo } var member = dispatchEx.GetMembers().FirstOrDefault(testMember => testMember.Name.Equals(name, ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal)); - if (member != null) + if (member is not null) { return member.DispID; } diff --git a/ClearScript/Util/COM/DispatchMember.cs b/ClearScript/Util/COM/DispatchMember.cs index 8263b203c..05cd9b782 100644 --- a/ClearScript/Util/COM/DispatchMember.cs +++ b/ClearScript/Util/COM/DispatchMember.cs @@ -25,22 +25,22 @@ private DispatchMember(string name, int dispid) public DispatchMember(string name, int dispid, INVOKEKIND invokeKind) : this(name, dispid) { - if (invokeKind.HasFlag(INVOKEKIND.INVOKE_FUNC)) + if (invokeKind.HasAllFlags(INVOKEKIND.INVOKE_FUNC)) { DispatchFlags |= DispatchFlags.Method; } - if (invokeKind.HasFlag(INVOKEKIND.INVOKE_PROPERTYGET)) + if (invokeKind.HasAllFlags(INVOKEKIND.INVOKE_PROPERTYGET)) { DispatchFlags |= DispatchFlags.PropertyGet; } - if (invokeKind.HasFlag(INVOKEKIND.INVOKE_PROPERTYPUT)) + if (invokeKind.HasAllFlags(INVOKEKIND.INVOKE_PROPERTYPUT)) { DispatchFlags |= DispatchFlags.PropertyPut; } - if (invokeKind.HasFlag(INVOKEKIND.INVOKE_PROPERTYPUTREF)) + if (invokeKind.HasAllFlags(INVOKEKIND.INVOKE_PROPERTYPUTREF)) { DispatchFlags |= DispatchFlags.PropertyPutRef; } @@ -49,22 +49,22 @@ public DispatchMember(string name, int dispid, INVOKEKIND invokeKind) public DispatchMember(string name, int dispid, DispatchPropFlags flags) : this(name, dispid) { - if (flags.HasFlag(DispatchPropFlags.CanCall)) + if (flags.HasAllFlags(DispatchPropFlags.CanCall)) { DispatchFlags |= DispatchFlags.Method; } - if (flags.HasFlag(DispatchPropFlags.CanGet)) + if (flags.HasAllFlags(DispatchPropFlags.CanGet)) { DispatchFlags |= DispatchFlags.PropertyGet; } - if (flags.HasFlag(DispatchPropFlags.CanPut)) + if (flags.HasAllFlags(DispatchPropFlags.CanPut)) { DispatchFlags |= DispatchFlags.PropertyPut; } - if (flags.HasFlag(DispatchPropFlags.CanPutRef)) + if (flags.HasAllFlags(DispatchPropFlags.CanPutRef)) { DispatchFlags |= DispatchFlags.PropertyPutRef; } diff --git a/ClearScript/Util/COM/DispatchWrappers.cs b/ClearScript/Util/COM/DispatchWrappers.cs index 8e592406c..97a070b49 100644 --- a/ClearScript/Util/COM/DispatchWrappers.cs +++ b/ClearScript/Util/COM/DispatchWrappers.cs @@ -40,7 +40,7 @@ public object GetProperty(string name, out bool isCacheable, params object[] arg // some objects crash on attempt to retrieve a method as a property member = GetMembers().FirstOrDefault(testMember => testMember.Name == name); - if ((member != null) && member.DispatchFlags == DispatchFlags.Method) + if ((member is not null) && member.DispatchFlags == DispatchFlags.Method) { return new HostMethod(hostItem, name); } @@ -55,12 +55,12 @@ public object GetProperty(string name, out bool isCacheable, params object[] arg { if (args.Length < 1) { - if (member == null) + if (member is null) { member = GetMembers().FirstOrDefault(testMember => testMember.Name == name); } - if ((member != null) && !member.DispatchFlags.HasFlag(DispatchFlags.Method)) + if ((member is not null) && !member.DispatchFlags.HasAllFlags(DispatchFlags.Method)) { return new HostIndexedProperty(hostItem, name); } @@ -149,7 +149,7 @@ public object GetProperty(string name, out bool isCacheable, params object[] arg // some objects crash on attempt to retrieve a method as a property member = dispatchEx.GetMembers().FirstOrDefault(testMember => testMember.Name == name); - if ((member != null) && member.DispatchFlags == DispatchFlags.Method) + if ((member is not null) && member.DispatchFlags == DispatchFlags.Method) { return new HostMethod(hostItem, name); } @@ -164,12 +164,12 @@ public object GetProperty(string name, out bool isCacheable, params object[] arg { if (args.Length < 1) { - if (member == null) + if (member is null) { member = dispatchEx.GetMembers().FirstOrDefault(testMember => testMember.Name == name); } - if ((member != null) && !member.DispatchFlags.HasFlag(DispatchFlags.Method)) + if ((member is not null) && !member.DispatchFlags.HasAllFlags(DispatchFlags.Method)) { return new HostIndexedProperty(hostItem, name); } diff --git a/ClearScript/Util/COM/HResult.cs b/ClearScript/Util/COM/HResult.cs index 75b6ccd3c..7cf02f36d 100644 --- a/ClearScript/Util/COM/HResult.cs +++ b/ClearScript/Util/COM/HResult.cs @@ -55,7 +55,7 @@ public static void Check(uint result) public static void Check(int result) { - if (Succeeded(result) || !MiscHelpers.Try(out var exception, () => Marshal.GetExceptionForHR(result))) + if (Succeeded(result) || !MiscHelpers.Try(out var exception, static result => Marshal.GetExceptionForHR(result), result)) { return; } diff --git a/ClearScript/Util/COM/StructHelpers.cs b/ClearScript/Util/COM/StructHelpers.cs index 8b7279f17..5b1654a87 100644 --- a/ClearScript/Util/COM/StructHelpers.cs +++ b/ClearScript/Util/COM/StructHelpers.cs @@ -16,7 +16,7 @@ internal static class StructHelpers public static IScope CreateScope(GetStruct get, ReleaseStruct release) { get(out var pStruct); - return Scope.Create(() => (T)Marshal.PtrToStructure(pStruct, typeof(T)), value => release(pStruct)); + return Scope.Create(() => (T)Marshal.PtrToStructure(pStruct, typeof(T)), _ => release(pStruct)); } public static IEnumerable GetStructsFromArray(IntPtr pStructs, int count) diff --git a/ClearScript/Util/COM/TypeInfoHelpers.NetFramework.cs b/ClearScript/Util/COM/TypeInfoHelpers.NetFramework.cs index db4c69c78..30cf136f5 100644 --- a/ClearScript/Util/COM/TypeInfoHelpers.NetFramework.cs +++ b/ClearScript/Util/COM/TypeInfoHelpers.NetFramework.cs @@ -10,7 +10,7 @@ namespace Microsoft.ClearScript.Util.COM { internal static partial class TypeInfoHelpers { - private static readonly ConcurrentDictionary managedTypeMap = new ConcurrentDictionary(); + private static readonly ConcurrentDictionary managedTypeMap = new(); public static Type GetManagedType(this ITypeInfo typeInfo) { diff --git a/ClearScript/Util/COM/TypeInfoHelpers.cs b/ClearScript/Util/COM/TypeInfoHelpers.cs index ff765436b..f81184779 100644 --- a/ClearScript/Util/COM/TypeInfoHelpers.cs +++ b/ClearScript/Util/COM/TypeInfoHelpers.cs @@ -18,7 +18,7 @@ namespace Microsoft.ClearScript.Util.COM internal static partial class TypeInfoHelpers { // GUID_ManagedName (um\cor.h) - private static readonly Guid managedNameGuid = new Guid("{0f21f359-ab84-41e8-9a78-36d110e6d2f9}"); + private static readonly Guid managedNameGuid = new("{0f21f359-ab84-41e8-9a78-36d110e6d2f9}"); public static ITypeLib GetContainingTypeLib(this ITypeInfo typeInfo) { diff --git a/ClearScript/Util/COM/TypeLibHelpers.cs b/ClearScript/Util/COM/TypeLibHelpers.cs index 81a81da51..690cd8aa9 100644 --- a/ClearScript/Util/COM/TypeLibHelpers.cs +++ b/ClearScript/Util/COM/TypeLibHelpers.cs @@ -17,7 +17,7 @@ namespace Microsoft.ClearScript.Util.COM internal static class TypeLibHelpers { // GUID_ManagedName (um\cor.h) - private static readonly Guid managedNameGuid = new Guid("{0f21f359-ab84-41e8-9a78-36d110e6d2f9}"); + private static readonly Guid managedNameGuid = new("{0f21f359-ab84-41e8-9a78-36d110e6d2f9}"); public static string GetName(this ITypeLib typeLib) { @@ -92,13 +92,14 @@ public static IEnumerable GetReferencedEnums(this ITypeLib typeLib) private static IEnumerable GetReferencedEnums(ITypeLib typeLib, ITypeInfo typeInfo, Dictionary processedTypeInfo) { - if (typeInfo == null) + if (typeInfo is null) { yield break; } var guid = typeInfo.GetOrCreateGuid(); + // ReSharper disable once CanSimplifyDictionaryLookupWithTryAdd if (processedTypeInfo.ContainsKey(guid)) { yield break; diff --git a/ClearScript/Util/Collateral.cs b/ClearScript/Util/Collateral.cs index 08afae9e3..a2064ae14 100644 --- a/ClearScript/Util/Collateral.cs +++ b/ClearScript/Util/Collateral.cs @@ -9,7 +9,7 @@ internal class CollateralObject where THolder : class where TValue : class { - private readonly ConditionalWeakTable table = new ConditionalWeakTable(); + private readonly ConditionalWeakTable table = new(); public TValue Get(THolder holder) { @@ -24,7 +24,7 @@ public TValue GetOrCreate(THolder holder) public virtual void Set(THolder holder, TValue value) { Clear(holder); - if (value != null) + if (value is not null) { table.Add(holder, value); } @@ -40,7 +40,7 @@ internal sealed class CollateralArray : CollateralObject where T : class { - private readonly object dataLock = new object(); - private List weakRefs = new List(); + private readonly object dataLock = new(); + private List> weakRefs = new(); public int Count => GetItems().Count; @@ -26,7 +26,7 @@ public bool TryAdd(T item) { if (!GetItemsInternal().Contains(item)) { - weakRefs.Add(new WeakReference(item)); + weakRefs.Add(new WeakReference(item)); return true; } @@ -51,10 +51,10 @@ private List GetItems() private List GetItemsInternal() { var items = new List(); - var tempWeakRefs = new List(); + var tempWeakRefs = new List>(); foreach (var weakRef in weakRefs) { - if (weakRef.Target is T item) + if (weakRef.TryGetTarget(out var item)) { items.Add(item); tempWeakRefs.Add(weakRef); diff --git a/ClearScript/Util/DateTimeHelpers.cs b/ClearScript/Util/DateTimeHelpers.cs new file mode 100644 index 000000000..17a4b3b61 --- /dev/null +++ b/ClearScript/Util/DateTimeHelpers.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; + +namespace Microsoft.ClearScript.Util +{ + internal static class DateTimeHelpers + { + private static readonly DateTime unixEpoch = new(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + + public static double ToUnixMilliseconds(this DateTime dateTime) + { + return (dateTime.ToUniversalTime() - unixEpoch).TotalMilliseconds; + } + + public static DateTime FromUnixMilliseconds(double value) + { + return unixEpoch + TimeSpan.FromMilliseconds(value); + } + + } +} diff --git a/ClearScript/Util/DynamicHelpers.cs b/ClearScript/Util/DynamicHelpers.cs index 33c5e1bcf..80f2fae1e 100644 --- a/ClearScript/Util/DynamicHelpers.cs +++ b/ClearScript/Util/DynamicHelpers.cs @@ -26,13 +26,13 @@ public static DynamicMetaObject Bind(DynamicMetaObjectBinder binder, object targ public static object Invoke(Expression expr) { - Debug.Assert(expr != null); + Debug.Assert(expr is not null); return Expression.Lambda(expr).Compile().DynamicInvoke(); } public static object Invoke(Expression expr, IEnumerable parameters, object[] args) { - Debug.Assert(expr != null); + Debug.Assert(expr is not null); return Expression.Lambda(expr, parameters).Compile().DynamicInvoke(args); } @@ -88,7 +88,7 @@ public static bool TryBindAndInvoke(DynamicMetaObjectBinder binder, object targe return true; } } - else if ((args != null) && (args.Length > 0)) + else if ((args is not null) && (args.Length > 0)) { if (binder is GetIndexBinder) { @@ -204,7 +204,7 @@ private static bool TryGetProperty(IReflect target, string name, bool ignoreCase } var property = target.GetProperty(name, flags); - if (property != null) + if (property is not null) { result = property.GetValue(target, args); return true; @@ -216,7 +216,7 @@ private static bool TryGetProperty(IReflect target, string name, bool ignoreCase private static bool TrySetProperty(IReflect target, string name, bool ignoreCase, object[] args, out object result) { - if ((args != null) && (args.Length > 0)) + if ((args is not null) && (args.Length > 0)) { // ReSharper disable once SuspiciousTypeConversion.Global if (target is IDispatchEx dispatchEx) @@ -237,7 +237,7 @@ private static bool TrySetProperty(IReflect target, string name, bool ignoreCase } var property = target.GetProperty(name, flags); - if (property == null) + if (property is null) { if (target is IExpando expando) { @@ -245,7 +245,7 @@ private static bool TrySetProperty(IReflect target, string name, bool ignoreCase } } - if (property != null) + if (property is not null) { property.SetValue(target, args[args.Length - 1], args.Take(args.Length - 1).ToArray()); result = args[args.Length - 1]; @@ -335,7 +335,7 @@ private static bool TryInvokeMethod(IReflect target, string name, bool ignoreCas } var method = target.GetMethod(name, flags); - if (method != null) + if (method is not null) { result = method.Invoke(target, BindingFlags.InvokeMethod | flags, null, args, CultureInfo.InvariantCulture); return true; @@ -488,7 +488,7 @@ private static DynamicMetaObject CreateDynamicTarget(object target) } var hostTarget = target as HostTarget; - if (hostTarget == null) + if (hostTarget is null) { return CreateDynamicMetaObject(target, Expression.Constant(target)); } @@ -523,7 +523,7 @@ private static DynamicMetaObject CreateDynamicArg(object arg) } var hostTarget = arg as HostTarget; - if (hostTarget == null) + if (hostTarget is null) { return CreateDynamicMetaObject(arg, Expression.Constant(arg)); } @@ -563,7 +563,7 @@ private static Expression CreateThrowExpr(string message) where T : Exception var constructor = typeof(T).GetConstructor(new[] { typeof(string) }); Expression exceptionExpr; - if (constructor != null) + if (constructor is not null) { exceptionExpr = Expression.New(constructor, Expression.Constant(message)); } @@ -577,7 +577,7 @@ private static Expression CreateThrowExpr(string message) where T : Exception private static Type GetParamTypeForArg(object arg) { - return (arg != null) ? arg.GetType() : typeof(object); + return (arg is not null) ? arg.GetType() : typeof(object); } #endregion @@ -593,7 +593,7 @@ public DynamicCreateInstanceBinder(string[] paramNames) public override DynamicMetaObject FallbackCreateInstance(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // errorSuggestion is the dynamic instantiation algorithm return errorSuggestion; @@ -618,7 +618,7 @@ public DynamicInvokeBinder(string[] paramNames) public override DynamicMetaObject FallbackInvoke(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // errorSuggestion is the dynamic invocation algorithm return errorSuggestion; @@ -643,7 +643,7 @@ public DynamicGetMemberBinder(string name) public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // errorSuggestion is the dynamic member retrieval algorithm return errorSuggestion; @@ -668,7 +668,7 @@ public DynamicSetMemberBinder(string name) public override DynamicMetaObject FallbackSetMember(DynamicMetaObject target, DynamicMetaObject value, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // errorSuggestion is the dynamic member assignment algorithm return errorSuggestion; @@ -699,7 +699,7 @@ public DynamicInvokeMemberBinder(IHostContext context, string name, BindingFlags public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // errorSuggestion is the dynamic member invocation algorithm return errorSuggestion; @@ -712,7 +712,7 @@ public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target, public override DynamicMetaObject FallbackInvoke(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // behave as in other scenarios, but the observed value is always null return errorSuggestion; @@ -738,7 +738,7 @@ private static object InvokeMemberValue(IHostContext context, object target, Bin return result; } - if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1)) + if (invokeFlags.HasAllFlags(BindingFlags.GetField) && (args.Length < 1)) { return target; } @@ -762,7 +762,7 @@ public DynamicDeleteMemberBinder(string name) public override DynamicMetaObject FallbackDeleteMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // errorSuggestion is the dynamic member deletion algorithm return errorSuggestion; @@ -786,7 +786,7 @@ public DynamicGetIndexBinder(string[] paramNames) public override DynamicMetaObject FallbackGetIndex(DynamicMetaObject target, DynamicMetaObject[] indexes, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // errorSuggestion is the dynamic index retrieval algorithm return errorSuggestion; @@ -811,7 +811,7 @@ public DynamicSetIndexBinder(string[] paramNames) public override DynamicMetaObject FallbackSetIndex(DynamicMetaObject target, DynamicMetaObject[] indexes, DynamicMetaObject value, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // errorSuggestion is the dynamic index assignment algorithm return errorSuggestion; @@ -836,7 +836,7 @@ public DynamicDeleteIndexBinder(string[] paramNames) public override DynamicMetaObject FallbackDeleteIndex(DynamicMetaObject target, DynamicMetaObject[] indices, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { // errorSuggestion is the dynamic index deletion algorithm return errorSuggestion; @@ -860,7 +860,7 @@ public DynamicConvertBinder(Type type, bool @explicit) public override DynamicMetaObject FallbackConvert(DynamicMetaObject target, DynamicMetaObject errorSuggestion) { - if (errorSuggestion != null) + if (errorSuggestion is not null) { return errorSuggestion; } diff --git a/ClearScript/Util/EnumerableHelpers.NetFramework.cs b/ClearScript/Util/EnumerableHelpers.NetFramework.cs deleted file mode 100644 index 486be82cc..000000000 --- a/ClearScript/Util/EnumerableHelpers.NetFramework.cs +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.ClearScript.JavaScript; - -namespace Microsoft.ClearScript.Util -{ - /// - [BypassCustomAttributeLoader] - [DefaultScriptUsage(ScriptAccess.Full)] - public interface IScriptableAsyncEnumerator - { - /// - T ScriptableCurrent { get; } - - /// - object ScriptableMoveNextAsync(); - - /// - object ScriptableDisposeAsync(); - } - - internal static partial class EnumerableHelpers - { - public static IScriptableAsyncEnumerator ToScriptableAsyncEnumerator(this IEnumerator enumerator, ScriptEngine engine) - { - return new ScriptableAsyncEnumeratorOnEnumerator(engine, enumerator); - } - - public static IScriptableAsyncEnumerator ToScriptableAsyncEnumerator(this IEnumerator enumerator, ScriptEngine engine) - { - return new ScriptableAsyncEnumeratorOnEnumerator(engine, enumerator); - } - } - - internal static partial class ScriptableEnumerableHelpers - { - public static object GetScriptableAsyncEnumerator(IEnumerable source, ScriptEngine engine) - { - return HostItem.Wrap(engine, source.GetEnumerator().ToScriptableAsyncEnumerator(engine), typeof(IScriptableAsyncEnumerator)); - } - } - - internal static partial class ScriptableEnumerableHelpers - { - public static object GetScriptableAsyncEnumerator(IEnumerable source, ScriptEngine engine) - { - return HostItem.Wrap(engine, source.GetEnumerator().ToScriptableAsyncEnumerator(engine), typeof(IScriptableAsyncEnumerator)); - } - } - - internal abstract class ScriptableAsyncEnumeratorBase - { - protected static readonly Task CompletedTask = Task.FromResult(0); - } - - internal abstract class ScriptableAsyncEnumerator : ScriptableAsyncEnumeratorBase, IScriptableAsyncEnumerator - { - private readonly ScriptEngine engine; - - protected ScriptableAsyncEnumerator(ScriptEngine engine) - { - this.engine = engine; - } - - public abstract T Current { get; } - - public abstract Task MoveNextAsync(); - - public abstract Task DisposeAsync(); - - #region IScriptableAsyncEnumerator implementation - - public T ScriptableCurrent => Current; - - public object ScriptableMoveNextAsync() - { - return MoveNextAsync().ToPromise(engine); - } - - public object ScriptableDisposeAsync() - { - return DisposeAsync().ToPromise(engine); - } - - #endregion - } - - internal sealed class ScriptableAsyncEnumeratorOnEnumerator : ScriptableAsyncEnumerator - { - private readonly IEnumerator enumerator; - - public ScriptableAsyncEnumeratorOnEnumerator(ScriptEngine engine, IEnumerator enumerator) - : base(engine) - { - this.enumerator = enumerator; - } - - #region ScriptableAsyncEnumerator overrides - - public override object Current => enumerator.Current; - - public override Task MoveNextAsync() - { - return Task.FromResult(enumerator.MoveNext()); - } - - public override Task DisposeAsync() - { - (enumerator as IDisposable)?.Dispose(); - return CompletedTask; - } - - #endregion - } - - internal sealed class ScriptableAsyncEnumeratorOnEnumerator : ScriptableAsyncEnumerator - { - private readonly IEnumerator enumerator; - - public ScriptableAsyncEnumeratorOnEnumerator(ScriptEngine engine, IEnumerator enumerator) - : base(engine) - { - this.enumerator = enumerator; - } - - #region ScriptableAsyncEnumerator overrides - - public override T Current => enumerator.Current; - - public override Task MoveNextAsync() - { - return Task.FromResult(enumerator.MoveNext()); - } - - public override Task DisposeAsync() - { - enumerator.Dispose(); - return CompletedTask; - } - - #endregion - } -} diff --git a/ClearScript/Util/EnumerableHelpers.NetStandard.cs b/ClearScript/Util/EnumerableHelpers.NetStandard.cs deleted file mode 100644 index 7299b1db9..000000000 --- a/ClearScript/Util/EnumerableHelpers.NetStandard.cs +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.ClearScript.JavaScript; - -namespace Microsoft.ClearScript.Util -{ - /// - [BypassCustomAttributeLoader] - [DefaultScriptUsage(ScriptAccess.Full)] - public interface IScriptableAsyncEnumerator : IAsyncEnumerator - { - /// - T ScriptableCurrent { get; } - - /// - object ScriptableMoveNextAsync(); - - /// - object ScriptableDisposeAsync(); - } - - internal static partial class EnumerableHelpers - { - public static IScriptableAsyncEnumerator ToScriptableAsyncEnumerator(this IEnumerator enumerator, ScriptEngine engine) - { - return new ScriptableAsyncEnumeratorOnEnumerator(engine, enumerator); - } - - public static IScriptableAsyncEnumerator ToScriptableAsyncEnumerator(this IEnumerator enumerator, ScriptEngine engine) - { - return new ScriptableAsyncEnumeratorOnEnumerator(engine, enumerator); - } - - public static IScriptableAsyncEnumerator ToScriptableAsyncEnumerator(this IAsyncEnumerator enumerator, ScriptEngine engine) - { - return new ScriptableAsyncEnumeratorOnAsyncEnumerator(engine, enumerator); - } - } - - internal static partial class ScriptableEnumerableHelpers - { - public static object GetScriptableAsyncEnumerator(IEnumerable source, ScriptEngine engine) - { - return HostItem.Wrap(engine, source.GetEnumerator().ToScriptableAsyncEnumerator(engine), typeof(IScriptableAsyncEnumerator)); - } - } - - internal static partial class ScriptableEnumerableHelpers - { - public static object GetScriptableAsyncEnumerator(IEnumerable source, ScriptEngine engine) - { - return HostItem.Wrap(engine, source.GetEnumerator().ToScriptableAsyncEnumerator(engine), typeof(IScriptableAsyncEnumerator)); - } - - public static object GetScriptableAsyncEnumerator(IAsyncEnumerable source, ScriptEngine engine) - { - return HostItem.Wrap(engine, source.GetAsyncEnumerator().ToScriptableAsyncEnumerator(engine), typeof(IScriptableAsyncEnumerator)); - } - } - - internal abstract class ScriptableAsyncEnumerator : IScriptableAsyncEnumerator - { - private readonly ScriptEngine engine; - - protected ScriptableAsyncEnumerator(ScriptEngine engine) - { - this.engine = engine; - } - - #region IScriptableAsyncEnumerator implementation - - public T ScriptableCurrent => Current; - - public object ScriptableMoveNextAsync() - { - return MoveNextAsync().ToPromise(engine); - } - - public object ScriptableDisposeAsync() - { - return DisposeAsync().ToPromise(engine); - } - - #endregion - - #region IAsyncEnumerable implementation - - public abstract T Current { get; } - - public abstract ValueTask MoveNextAsync(); - - #endregion - - #region IAsyncDisposable implementation - - public abstract ValueTask DisposeAsync(); - - #endregion - } - - internal sealed class ScriptableAsyncEnumeratorOnEnumerator : ScriptableAsyncEnumerator - { - private readonly IEnumerator enumerator; - - public ScriptableAsyncEnumeratorOnEnumerator(ScriptEngine engine, IEnumerator enumerator) - : base(engine) - { - this.enumerator = enumerator; - } - - #region ScriptableAsyncEnumerator overrides - - public override object Current => enumerator.Current; - - public override ValueTask MoveNextAsync() - { - return new ValueTask(enumerator.MoveNext()); - } - - public override ValueTask DisposeAsync() - { - (enumerator as IDisposable)?.Dispose(); - return default; - } - - #endregion - } - - internal sealed class ScriptableAsyncEnumeratorOnEnumerator : ScriptableAsyncEnumerator - { - private readonly IEnumerator enumerator; - - public ScriptableAsyncEnumeratorOnEnumerator(ScriptEngine engine, IEnumerator enumerator) - : base(engine) - { - this.enumerator = enumerator; - } - - #region ScriptableAsyncEnumerator overrides - - public override T Current => enumerator.Current; - - public override ValueTask MoveNextAsync() - { - return new ValueTask(enumerator.MoveNext()); - } - - public override ValueTask DisposeAsync() - { - enumerator.Dispose(); - return default; - } - - #endregion - } - - internal sealed class ScriptableAsyncEnumeratorOnAsyncEnumerator : ScriptableAsyncEnumerator - { - private readonly IAsyncEnumerator enumerator; - - public ScriptableAsyncEnumeratorOnAsyncEnumerator(ScriptEngine engine, IAsyncEnumerator enumerator) - : base(engine) - { - this.enumerator = enumerator; - } - - #region ScriptableAsyncEnumerator overrides - - public override T Current => enumerator.Current; - - public override ValueTask MoveNextAsync() - { - return enumerator.MoveNextAsync(); - } - - public override ValueTask DisposeAsync() - { - return enumerator.DisposeAsync(); - } - - #endregion - } -} diff --git a/ClearScript/Util/EnumerableHelpers.cs b/ClearScript/Util/EnumerableHelpers.cs index 3d50ae12d..803341b2d 100644 --- a/ClearScript/Util/EnumerableHelpers.cs +++ b/ClearScript/Util/EnumerableHelpers.cs @@ -7,6 +7,8 @@ using System.Globalization; using System.Linq; using System.Runtime.InteropServices.ComTypes; +using System.Threading.Tasks; +using Microsoft.ClearScript.JavaScript; using Microsoft.ClearScript.Util.COM; namespace Microsoft.ClearScript.Util @@ -35,7 +37,22 @@ public interface IScriptableEnumerator : IScriptableEnumerator, IEnumerat new T ScriptableCurrent { get; } } - internal static partial class EnumerableHelpers + /// + [BypassCustomAttributeLoader] + [DefaultScriptUsage(ScriptAccess.Full)] + public interface IScriptableAsyncEnumerator : IAsyncEnumerator + { + /// + T ScriptableCurrent { get; } + + /// + object ScriptableMoveNextAsync(); + + /// + object ScriptableDisposeAsync(); + } + + internal static class EnumerableHelpers { public static IList ToIList(this IEnumerable source) { @@ -102,19 +119,25 @@ public static IEnumerable GetIndices(this IEnumerable names) [BypassCustomAttributeLoader] [DefaultScriptUsage(ScriptAccess.Full)] - internal static partial class ScriptableEnumerableHelpers + internal static class ScriptableEnumerableHelpers { public static readonly HostType HostType = HostType.Wrap(typeof(ScriptableEnumerableHelpers)); public static object GetScriptableEnumerator(IEnumerable source) { + // ReSharper disable once NotDisposedResource return HostObject.Wrap(new ScriptableEnumeratorOnEnumerator(source.GetEnumerator()), typeof(IScriptableEnumerator)); } + public static object GetScriptableAsyncEnumerator(IEnumerable source, ScriptEngine engine) + { + // ReSharper disable once NotDisposedResource + return HostItem.Wrap(engine, new ScriptableAsyncEnumeratorOnEnumerator(engine, source.GetEnumerator()), typeof(IScriptableAsyncEnumerator)); + } } [BypassCustomAttributeLoader] [DefaultScriptUsage(ScriptAccess.Full)] - internal static partial class ScriptableEnumerableHelpers + internal static class ScriptableEnumerableHelpers { public static readonly HostType HostType = HostType.Wrap(typeof(ScriptableEnumerableHelpers)); @@ -122,6 +145,18 @@ public static object GetScriptableEnumerator(IEnumerable source) { return HostObject.Wrap(new ScriptableEnumeratorOnEnumerator(source.GetEnumerator()), typeof(IScriptableEnumerator)); } + + public static object GetScriptableAsyncEnumerator(IEnumerable source, ScriptEngine engine) + { + // ReSharper disable once NotDisposedResource + return HostItem.Wrap(engine, new ScriptableAsyncEnumeratorOnEnumerator(engine, source.GetEnumerator()), typeof(IScriptableAsyncEnumerator)); + } + + public static object GetScriptableAsyncEnumerator(IAsyncEnumerable source, ScriptEngine engine) + { + // ReSharper disable once NotDisposedResource + return HostItem.Wrap(engine, new ScriptableAsyncEnumeratorOnAsyncEnumerator(engine, source.GetAsyncEnumerator()), typeof(IScriptableAsyncEnumerator)); + } } internal sealed class ScriptableEnumeratorOnEnumerator : IScriptableEnumerator @@ -294,4 +329,127 @@ public void Dispose() #endregion } + + internal abstract class ScriptableAsyncEnumerator : IScriptableAsyncEnumerator + { + private readonly ScriptEngine engine; + + protected ScriptableAsyncEnumerator(ScriptEngine engine) + { + this.engine = engine; + } + + #region IScriptableAsyncEnumerator implementation + + public T ScriptableCurrent => Current; + + public object ScriptableMoveNextAsync() + { + return MoveNextAsync().ToPromise(engine); + } + + public object ScriptableDisposeAsync() + { + return DisposeAsync().ToPromise(engine); + } + + #endregion + + #region IAsyncEnumerable implementation + + public abstract T Current { get; } + + public abstract ValueTask MoveNextAsync(); + + #endregion + + #region IAsyncDisposable implementation + + public abstract ValueTask DisposeAsync(); + + #endregion + } + + internal sealed class ScriptableAsyncEnumeratorOnEnumerator : ScriptableAsyncEnumerator + { + private readonly IEnumerator enumerator; + + public ScriptableAsyncEnumeratorOnEnumerator(ScriptEngine engine, IEnumerator enumerator) + : base(engine) + { + this.enumerator = enumerator; + } + + #region ScriptableAsyncEnumerator overrides + + public override object Current => enumerator.Current; + + public override ValueTask MoveNextAsync() + { + return new ValueTask(enumerator.MoveNext()); + } + + public override ValueTask DisposeAsync() + { + (enumerator as IDisposable)?.Dispose(); + return default; + } + + #endregion + } + + internal sealed class ScriptableAsyncEnumeratorOnEnumerator : ScriptableAsyncEnumerator + { + private readonly IEnumerator enumerator; + + public ScriptableAsyncEnumeratorOnEnumerator(ScriptEngine engine, IEnumerator enumerator) + : base(engine) + { + this.enumerator = enumerator; + } + + #region ScriptableAsyncEnumerator overrides + + public override T Current => enumerator.Current; + + public override ValueTask MoveNextAsync() + { + return new ValueTask(enumerator.MoveNext()); + } + + public override ValueTask DisposeAsync() + { + enumerator.Dispose(); + return default; + } + + #endregion + } + + internal sealed class ScriptableAsyncEnumeratorOnAsyncEnumerator : ScriptableAsyncEnumerator + { + private readonly IAsyncEnumerator enumerator; + + public ScriptableAsyncEnumeratorOnAsyncEnumerator(ScriptEngine engine, IAsyncEnumerator enumerator) + : base(engine) + { + this.enumerator = enumerator; + } + + #region ScriptableAsyncEnumerator overrides + + public override T Current => enumerator.Current; + + public override ValueTask MoveNextAsync() + { + return enumerator.MoveNextAsync(); + } + + public override ValueTask DisposeAsync() + { + return enumerator.DisposeAsync(); + } + + #endregion + } } diff --git a/ClearScript/Util/IHostItem.cs b/ClearScript/Util/IHostItem.cs new file mode 100644 index 000000000..692f17ac6 --- /dev/null +++ b/ClearScript/Util/IHostItem.cs @@ -0,0 +1,9 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.Util +{ + internal interface IHostItem : IScriptMarshalWrapper + { + } +} diff --git a/ClearScript/Util/InvokeHelpers.cs b/ClearScript/Util/InvokeHelpers.cs index 1fc1bacfc..37a6f9740 100644 --- a/ClearScript/Util/InvokeHelpers.cs +++ b/ClearScript/Util/InvokeHelpers.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Dynamic; using System.Linq.Expressions; @@ -13,12 +14,12 @@ internal static class InvokeHelpers { public static object InvokeMethod(IHostContext context, MethodInfo method, object target, object[] args, ScriptMemberFlags flags) { - return InvokeMethodInternal(context, method, target, args, (invokeMethod, invokeTarget, invokeArgs) => invokeMethod.Invoke(invokeTarget, invokeArgs), method.ReturnType, flags); + return InvokeMethodInternal(context, method, target, args, static (method, target, args) => method.Invoke(target, args), method.ReturnType, flags); } public static object InvokeConstructor(IHostContext context, ConstructorInfo constructor, object[] args) { - return InvokeMethodInternal(context, constructor, null, args, (invokeConstructor, invokeTarget, invokeArgs) => invokeConstructor.Invoke(invokeArgs), constructor.DeclaringType, ScriptMemberFlags.None); + return InvokeMethodInternal(context, constructor, null, args, static (constructor, _, args) => constructor.Invoke(args), constructor.DeclaringType, ScriptMemberFlags.None); } public static object InvokeDelegate(IHostContext context, Delegate del, object[] args) @@ -44,7 +45,7 @@ public static bool TryInvokeObject(IHostContext context, object target, BindingF tryDynamic = tryDynamic && typeof(IDynamicMetaObjectProvider).IsAssignableFrom(hostTarget.Type); } - if ((target != null) && invokeFlags.HasFlag(BindingFlags.InvokeMethod)) + if ((target is not null) && invokeFlags.HasAllFlags(BindingFlags.InvokeMethod)) { if (target is ScriptItem scriptItem) { @@ -92,13 +93,13 @@ private static object InvokeMethodInternal(IHostContext context, T method, ob for (var innerIndex = index; innerIndex < args.Length; innerIndex++) { var byRefArg = args[innerIndex] as IByRefArg; - if (byRefArg == null) + if (byRefArg is null) { - tailArgs.SetValue(GetCompatibleArg(param.Name, tailArgType, args[innerIndex]), innerIndex - index); + tailArgs.SetValue(CompatibleArg.Get(param.Name, tailArgType, args[innerIndex]), innerIndex - index); } else { - tailArgs.SetValue(GetCompatibleArg(param.Name, tailArgType, byRefArg.Value), innerIndex - index); + tailArgs.SetValue(CompatibleArg.Get(param.Name, tailArgType, byRefArg.Value), innerIndex - index); byRefArgInfo.Add(new ByRefArgItem(byRefArg, tailArgs, innerIndex - index)); } } @@ -109,22 +110,22 @@ private static object InvokeMethodInternal(IHostContext context, T method, ob } } - if ((index < args.Length) && !(args[index] is Missing)) + if ((index < args.Length) && (args[index] is not Missing)) { var byRefArg = args[index] as IByRefArg; - if (byRefArg == null) + if (byRefArg is null) { - argList.Add(GetCompatibleArg(param, args[index])); + argList.Add(CompatibleArg.Get(param, args[index])); } else { - argList.Add(GetCompatibleArg(param, byRefArg.Value)); + argList.Add(CompatibleArg.Get(param, byRefArg.Value)); byRefArgInfo.Add(new ByRefArgItem(byRefArg, null, index)); } } else if (param.IsOptional) { - if (param.Attributes.HasFlag(ParameterAttributes.HasDefault)) + if (param.Attributes.HasAllFlags(ParameterAttributes.HasDefault)) { try { @@ -180,21 +181,6 @@ private static object InvokeMethodInternal(IHostContext context, T method, ob return context.Engine.PrepareResult(result, returnType, flags, false); } - private static object GetCompatibleArg(ParameterInfo param, object value) - { - return GetCompatibleArg(param.Name, param.ParameterType, value); - } - - private static object GetCompatibleArg(string paramName, Type type, object value) - { - if (!type.IsAssignableFromValue(ref value)) - { - throw new ArgumentException(MiscHelpers.FormatInvariant("Invalid argument specified for parameter '{0}'", paramName)); - } - - return value; - } - #region Nested type: ByRefArgItem private sealed class ByRefArgItem @@ -214,5 +200,47 @@ public ByRefArgItem(IByRefArg arg, Array array, int index) } #endregion + + #region Nested type: CompatibleArg + + private abstract class CompatibleArg + { + private static readonly ConcurrentDictionary map = new(); + + public static object Get(ParameterInfo param, object value) + { + return Get(param.Name, param.ParameterType, value); + } + + public static object Get(string paramName, Type type, object value) + { + return type.IsAssignableFromValue(ref value) ? value : GetImpl(type).Get(paramName, value); + } + public abstract object Get(string paramName, object value); + + private static CompatibleArg GetImpl(Type type) + { + return map.GetOrAdd(type, static type => (CompatibleArg)Activator.CreateInstance(typeof(Impl<>).MakeGenericType(type))); + } + + #region Nested type: Impl + + private sealed class Impl : CompatibleArg + { + public override object Get(string paramName, object value) + { + if (value is T result) + { + return result; + } + + throw new ArgumentException(MiscHelpers.FormatInvariant("Invalid argument specified for parameter '{0}'", paramName)); + } + } + + #endregion + } + + #endregion } } diff --git a/ClearScript/Util/MemberComparer.cs b/ClearScript/Util/MemberComparer.cs index 46bd0c9e2..02657870a 100644 --- a/ClearScript/Util/MemberComparer.cs +++ b/ClearScript/Util/MemberComparer.cs @@ -8,7 +8,7 @@ namespace Microsoft.ClearScript.Util { internal sealed class MemberComparer : EqualityComparer where T : MemberInfo { - public static readonly MemberComparer Instance = new MemberComparer(); + public static readonly MemberComparer Instance = new(); private MemberComparer() { @@ -26,7 +26,7 @@ public override bool Equals(T x, T y) return false; } - return MiscHelpers.Try(out var result, () => UnsafeEquals(x, y)) && result; + return MiscHelpers.Try(out var result, static ctx => UnsafeEquals(ctx.x, ctx.y), (x, y)) && result; } public override int GetHashCode(T obj) diff --git a/ClearScript/Util/MemberHelpers.cs b/ClearScript/Util/MemberHelpers.cs index 15b18f8c7..1edb6b00f 100644 --- a/ClearScript/Util/MemberHelpers.cs +++ b/ClearScript/Util/MemberHelpers.cs @@ -59,7 +59,7 @@ public static bool IsAccessible(this FieldInfo field, IHostContext context) var accessContext = context.AccessContext; - if (accessContext == null) + if (accessContext is null) { return false; } @@ -110,7 +110,7 @@ public static bool IsAccessible(this MethodBase method, IHostContext context) var accessContext = context.AccessContext; - if (accessContext == null) + if (accessContext is null) { return false; } @@ -151,13 +151,13 @@ public static bool IsAccessible(this MethodInfo method, IHostContext context) public static bool IsAccessible(this PropertyInfo property, IHostContext context) { var getMethod = property.GetMethod; - if ((getMethod != null) && getMethod.IsAccessible(context)) + if ((getMethod is not null) && getMethod.IsAccessible(context)) { return true; } var setMethod = property.SetMethod; - if ((setMethod != null) && setMethod.IsAccessible(context)) + if ((setMethod is not null) && setMethod.IsAccessible(context)) { return true; } @@ -176,7 +176,7 @@ public static bool IsAccessible(this Type type, IHostContext context) var accessContext = context.AccessContext; - if (accessContext == null) + if (accessContext is null) { return (visibility == TypeAttributes.NestedPublic) && type.DeclaringType.IsAccessible(context); } @@ -245,7 +245,7 @@ public static bool IsReadOnlyForScript(this MemberInfo member, IHostContext cont public static ScriptAccess GetScriptAccess(this MemberInfo member, IHostContext context, ScriptAccess defaultValue, bool chain = true) { var attribute = member.GetOrLoadCustomAttribute(context); - if (attribute != null) + if (attribute is not null) { return attribute.Access; } @@ -253,7 +253,7 @@ public static ScriptAccess GetScriptAccess(this MemberInfo member, IHostContext if (chain) { var declaringType = member.DeclaringType; - if (declaringType != null) + if (declaringType is not null) { var testType = declaringType; do @@ -261,24 +261,24 @@ public static ScriptAccess GetScriptAccess(this MemberInfo member, IHostContext if (testType.IsNested) { var nestedTypeAttribute = testType.GetOrLoadCustomAttribute(context); - if (nestedTypeAttribute != null) + if (nestedTypeAttribute is not null) { return nestedTypeAttribute.Access; } } var typeAttribute = testType.GetOrLoadCustomAttribute(context); - if (typeAttribute != null) + if (typeAttribute is not null) { return typeAttribute.Access; } testType = testType.DeclaringType; - } while (testType != null); + } while (testType is not null); var assemblyAttribute = declaringType.Assembly.GetOrLoadCustomAttribute(context); - if (assemblyAttribute != null) + if (assemblyAttribute is not null) { return assemblyAttribute.Access; } @@ -290,13 +290,13 @@ public static ScriptAccess GetScriptAccess(this MemberInfo member, IHostContext public static bool IsRestrictedForScript(this MemberInfo member, IHostContext context) { - return !member.GetScriptMemberFlags(context).HasFlag(ScriptMemberFlags.ExposeRuntimeType); + return !member.GetScriptMemberFlags(context).HasAllFlags(ScriptMemberFlags.ExposeRuntimeType); } public static bool IsDispID(this MemberInfo member, IHostContext context, int dispid) { var attribute = member.GetOrLoadCustomAttribute(context); - return (attribute != null) && (attribute.Value == dispid); + return (attribute is not null) && (attribute.Value == dispid); } public static ScriptMemberFlags GetScriptMemberFlags(this MemberInfo member, IHostContext context) diff --git a/ClearScript/Util/MemberMap.cs b/ClearScript/Util/MemberMap.cs index 6cc883533..698a453e8 100644 --- a/ClearScript/Util/MemberMap.cs +++ b/ClearScript/Util/MemberMap.cs @@ -11,9 +11,9 @@ namespace Microsoft.ClearScript.Util { internal static class MemberMap { - private static readonly MemberMapImpl fieldMap = new MemberMapImpl(); - private static readonly MemberMapImpl methodMap = new MemberMapImpl(); - private static readonly MemberMapImpl propertyMap = new MemberMapImpl(); + private static readonly MemberMapImpl fieldMap = new(); + private static readonly MemberMapImpl methodMap = new(); + private static readonly MemberMapImpl propertyMap = new(); public static FieldInfo GetField(string name) { @@ -293,7 +293,7 @@ private class MemberMapBase private sealed class MemberMapImpl : MemberMapBase where T : MemberInfo { - private readonly Dictionary map = new Dictionary(); + private readonly Dictionary> map = new(); private DateTime lastCompactionTime = DateTime.MinValue; public T GetMember(string name) @@ -322,17 +322,16 @@ private T GetMemberInternal(string name) if (map.TryGetValue(name, out var weakRef)) { - member = weakRef.Target as T; - if (member == null) + if (!weakRef.TryGetTarget(out member)) { member = (T)typeof(T).CreateInstance(name); - weakRef.Target = member; + weakRef.SetTarget(member); } } else { member = (T)typeof(T).CreateInstance(name); - map.Add(name, new WeakReference(member)); + map.Add(name, new WeakReference(member)); } return member; @@ -345,7 +344,7 @@ private void CompactIfNecessary() var now = DateTime.UtcNow; if ((lastCompactionTime + CompactionInterval) <= now) { - map.Where(pair => !pair.Value.IsAlive).ToList().ForEach(pair => map.Remove(pair.Key)); + map.Where(pair => !pair.Value.TryGetTarget(out _)).ToList().ForEach(pair => map.Remove(pair.Key)); lastCompactionTime = now; } } diff --git a/ClearScript/Util/MiscHelpers.cs b/ClearScript/Util/MiscHelpers.cs index 45ce56566..126126824 100644 --- a/ClearScript/Util/MiscHelpers.cs +++ b/ClearScript/Util/MiscHelpers.cs @@ -7,6 +7,7 @@ using System.Globalization; using System.IO; using System.Linq; +using System.Numerics; using System.Reflection; using System.Runtime.InteropServices; using System.Text; @@ -14,6 +15,8 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.ClearScript.Properties; +using INVOKEKIND = System.Runtime.InteropServices.ComTypes.INVOKEKIND; +using TYPEFLAGS = System.Runtime.InteropServices.ComTypes.TYPEFLAGS; namespace Microsoft.ClearScript.Util { @@ -21,7 +24,7 @@ internal static class MiscHelpers { #region COM helpers - private static readonly Regex dispIDNameRegex = new Regex(@"^\[DISPID=(-?[0-9]+)\]$"); + private static readonly Regex dispIDNameRegex = new(@"^\[DISPID=(-?[0-9]+)\]$"); public static object CreateCOMObject(string progID, string serverName) { @@ -41,7 +44,7 @@ public static bool TryCreateCOMObject(string progID, string serverName, out T return false; } - return Try(out obj, () => Activator.CreateInstance(type) as T) && (obj != null); + return Try(out obj, () => Activator.CreateInstance(type) as T) && (obj is not null); } public static bool TryCreateCOMObject(Guid clsid, string serverName, out T obj) where T : class @@ -52,7 +55,7 @@ public static bool TryCreateCOMObject(Guid clsid, string serverName, out T ob return false; } - return Try(out obj, () => Activator.CreateInstance(type) as T) && (obj != null); + return Try(out obj, () => Activator.CreateInstance(type) as T) && (obj is not null); } public static Type GetCOMType(string progID, string serverName) @@ -80,13 +83,13 @@ public static Type GetCOMType(Guid clsid, string serverName) public static bool TryGetCOMType(string progID, string serverName, out Type type) { type = Guid.TryParseExact(progID, "B", out var clsid) ? Type.GetTypeFromCLSID(clsid, serverName) : Type.GetTypeFromProgID(progID, serverName); - return type != null; + return type is not null; } public static bool TryGetCOMType(Guid clsid, string serverName, out Type type) { type = Type.GetTypeFromCLSID(clsid, serverName); - return type != null; + return type is not null; } public static string GetDispIDName(int dispid) @@ -112,7 +115,7 @@ public static bool IsDispIDName(this string name, out int dispid) public static void VerifyNonNullArgument(object value, string name) { - if (value == null) + if (value is null) { throw new ArgumentNullException(name); } @@ -132,7 +135,19 @@ public static void VerifyNonBlankArgument(string value, string name, string mess private static readonly char[] searchPathSeparators = { ';' }; - public static string EnsureNonBlank(string input, string alternate) + public static string ToNonNull(this string input, string alternate = "[null]") + { + Debug.Assert(alternate is not null); + return input ?? alternate; + } + + public static string ToNonEmpty(this string input, string alternate) + { + Debug.Assert(!string.IsNullOrEmpty(alternate)); + return string.IsNullOrEmpty(input) ? alternate : input; + } + + public static string ToNonBlank(this string input, string alternate) { Debug.Assert(!string.IsNullOrWhiteSpace(alternate)); return string.IsNullOrWhiteSpace(input) ? alternate : input; @@ -172,9 +187,9 @@ public static string FormatCode(string code) public static string GetUrlOrPath(Uri uri, string alternate) { - Debug.Assert(alternate != null); + Debug.Assert(alternate is not null); - if (uri == null) + if (uri is null) { return alternate; } @@ -264,21 +279,37 @@ public static IEnumerable SplitSearchPath(this string searchPath) public static StringComparison GetMemberNameComparison(this BindingFlags bindFlags) { - return bindFlags.HasFlag(BindingFlags.IgnoreCase) ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; + return bindFlags.HasAllFlags(BindingFlags.IgnoreCase) ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; } public static StringComparer GetMemberNameComparer(this BindingFlags bindFlags) { - return bindFlags.HasFlag(BindingFlags.IgnoreCase) ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal; + return bindFlags.HasAllFlags(BindingFlags.IgnoreCase) ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal; } #endregion + #region enum helpers + + public static bool HasAllFlags(this BindingFlags value, BindingFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this BindingFlags value, BindingFlags flags) => (value & flags) != 0; + + public static bool HasAllFlags(this ParameterAttributes value, ParameterAttributes flags) => (value & flags) == flags; + public static bool HasAnyFlag(this ParameterAttributes value, ParameterAttributes flags) => (value & flags) != 0; + + public static bool HasAllFlags(this TYPEFLAGS value, TYPEFLAGS flags) => (value & flags) == flags; + public static bool HasAnyFlag(this TYPEFLAGS value, TYPEFLAGS flags) => (value & flags) != 0; + + public static bool HasAllFlags(this INVOKEKIND value, INVOKEKIND flags) => (value & flags) == flags; + public static bool HasAnyFlag(this INVOKEKIND value, INVOKEKIND flags) => (value & flags) != 0; + + #endregion + #region numeric index helpers public static bool TryGetNumericIndex(object arg, out int index) { - if (arg != null) + if (arg is not null) { switch (Type.GetTypeCode(arg.GetType())) { @@ -298,7 +329,7 @@ public static bool TryGetNumericIndex(object arg, out int index) public static bool TryGetNumericIndex(object arg, out long index) { - if (arg != null) + if (arg is not null) { switch (Type.GetTypeCode(arg.GetType())) { @@ -335,7 +366,20 @@ public static bool Try(Action action) } } - public static bool Try(out T result, Func func) + public static bool Try(Action action, in TArg arg) + { + try + { + action(arg); + return true; + } + catch + { + return false; + } + } + + public static bool Try(out TResult result, Func func) { try { @@ -349,6 +393,20 @@ public static bool Try(out T result, Func func) } } + public static bool Try(out TResult result, Func func, in TArg arg) + { + try + { + result = func(arg); + return true; + } + catch + { + result = default; + return false; + } + } + public static async Task TryAsync(Task task) { try @@ -379,6 +437,18 @@ public static async Task TryAsync(Holder holder, Task task) #region primitive marshaling + public const float MaxInt32InSingleAsSingle = 16777215.0F; + public const double MaxInt32InSingleAsDouble = 16777215.0D; + public const decimal MaxInt32InSingleAsDecimal = 16777215.0M; + public const int MaxInt32InSingle = (1 << 24) - 1; + + public const double MaxInt64InDoubleAsDouble = 9007199254740991.0D; + public const decimal MaxInt64InDoubleAsDecimal = 9007199254740991.0M; + public const long MaxInt64InDouble = (1L << 53) - 1; + + public static readonly decimal MaxBigIntegerInDecimalAsDecimal = 79228162514264337593543950335.0M; + public static readonly BigInteger MaxBigIntegerInDecimal = (new BigInteger(1) << 96) - 1; + public static bool TryMarshalPrimitiveToHost(object obj, bool disableFloatNarrowing, out object result) { if (obj is IConvertible convertible) @@ -391,7 +461,6 @@ public static bool TryMarshalPrimitiveToHost(object obj, bool disableFloatNarrow return true; case TypeCode.Double: - case TypeCode.Single: result = MarshalDoubleToHost(convertible.ToDouble(CultureInfo.InvariantCulture), disableFloatNarrowing); return true; @@ -404,6 +473,7 @@ public static bool TryMarshalPrimitiveToHost(object obj, bool disableFloatNarrow case TypeCode.UInt32: case TypeCode.Int64: case TypeCode.UInt64: + case TypeCode.Single: case TypeCode.Decimal: result = obj; return true; @@ -418,12 +488,12 @@ public static object MarshalDoubleToHost(double value, bool disableFloatNarrowin { // ReSharper disable CompareOfFloatsByEqualityOperator - if (Math.Round(value) == value) + var truncatedValue = Math.Truncate(value); + if (truncatedValue == value) { - const double maxIntInDouble = (1L << 53) - 1; - if (Math.Abs(value) <= maxIntInDouble) + if (Math.Abs(value) <= MaxInt64InDoubleAsDouble) { - var longValue = Convert.ToInt64(value); + var longValue = (long)truncatedValue; if ((longValue >= int.MinValue) && (longValue <= int.MaxValue)) { return (int)longValue; @@ -434,7 +504,7 @@ public static object MarshalDoubleToHost(double value, bool disableFloatNarrowin } else if (!disableFloatNarrowing) { - var floatValue = Convert.ToSingle(value); + var floatValue = (float)value; if (value == floatValue) { return floatValue; @@ -595,7 +665,7 @@ public static object GetObjectForVariant(IntPtr pVariant) { var result = Marshal.GetObjectForNativeVariant(pVariant); - if ((result == null) && (Marshal.ReadInt16(pVariant) == (short)VarEnum.VT_BSTR)) + if ((result is null) && (Marshal.ReadInt16(pVariant) == (short)VarEnum.VT_BSTR)) { return string.Empty; } diff --git a/ClearScript/Util/NativeCallbackTimer.cs b/ClearScript/Util/NativeCallbackTimer.cs index 66085cb52..79c78ea4b 100644 --- a/ClearScript/Util/NativeCallbackTimer.cs +++ b/ClearScript/Util/NativeCallbackTimer.cs @@ -10,7 +10,7 @@ internal sealed class NativeCallbackTimer : IDisposable { private readonly Timer timer; private readonly INativeCallback callback; - private readonly InterlockedOneWayFlag disposedFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag disposedFlag = new(); public NativeCallbackTimer(int dueTime, int period, INativeCallback callback) { @@ -27,7 +27,7 @@ public bool Change(int dueTime, int period) { if (!disposedFlag.IsSet) { - if (MiscHelpers.Try(out var result, () => timer.Change(dueTime, period))) + if (MiscHelpers.Try(out var result, static ctx => ctx.timer.Change(ctx.dueTime, ctx.period), (timer, dueTime, period))) { return result; } @@ -40,7 +40,7 @@ private void OnTimer(object _) { if (!disposedFlag.IsSet) { - MiscHelpers.Try(callback.Invoke); + MiscHelpers.Try(static callback => callback.Invoke(), callback); } } diff --git a/ClearScript/Util/Nonexistent.cs b/ClearScript/Util/Nonexistent.cs index f6576e6fb..29d874657 100644 --- a/ClearScript/Util/Nonexistent.cs +++ b/ClearScript/Util/Nonexistent.cs @@ -5,7 +5,7 @@ namespace Microsoft.ClearScript.Util { internal sealed class Nonexistent { - public static readonly Nonexistent Value = new Nonexistent(); + public static readonly Nonexistent Value = new(); private Nonexistent() { diff --git a/ClearScript/Util/ObjectHelpers.Common.cs b/ClearScript/Util/ObjectHelpers.Common.cs index bd53aeafa..de2d6cfcd 100644 --- a/ClearScript/Util/ObjectHelpers.Common.cs +++ b/ClearScript/Util/ObjectHelpers.Common.cs @@ -16,17 +16,17 @@ private static bool GetPrimaryInteropAssembly(Guid libid, int major, int minor, using (var containerKey = Registry.ClassesRoot.OpenSubKey("TypeLib", false)) { - if (containerKey != null) + if (containerKey is not null) { var typeLibName = "{" + libid.ToString().ToUpper(CultureInfo.InvariantCulture) + "}"; using (var typeLibKey = containerKey.OpenSubKey(typeLibName)) { - if (typeLibKey != null) + if (typeLibKey is not null) { var versionName = major.ToString("x", CultureInfo.InvariantCulture) + "." + minor.ToString("x", CultureInfo.InvariantCulture); using (var versionKey = typeLibKey.OpenSubKey(versionName, false)) { - if (versionKey != null) + if (versionKey is not null) { name = (string)versionKey.GetValue("PrimaryInteropAssemblyName"); codeBase = (string)versionKey.GetValue("PrimaryInteropAssemblyCodeBase"); @@ -37,7 +37,7 @@ private static bool GetPrimaryInteropAssembly(Guid libid, int major, int minor, } } - return name != null; + return name is not null; } } } diff --git a/ClearScript/Util/ObjectHelpers.cs b/ClearScript/Util/ObjectHelpers.cs index 6ef28333a..e3dd7b11e 100644 --- a/ClearScript/Util/ObjectHelpers.cs +++ b/ClearScript/Util/ObjectHelpers.cs @@ -37,7 +37,7 @@ public static bool IsWholeNumber(this object value) { // ReSharper disable CompareOfFloatsByEqualityOperator - if (value == null) + if (value is null) { return false; } @@ -49,17 +49,17 @@ public static bool IsWholeNumber(this object value) if (value is float floatValue) { - return Math.Round(floatValue) == floatValue; + return Math.Truncate(floatValue) == floatValue; } if (value is double doubleValue) { - return Math.Round(doubleValue) == doubleValue; + return Math.Truncate(doubleValue) == doubleValue; } if (value is decimal decimalValue) { - return Math.Round(decimalValue) == decimalValue; + return Math.Truncate(decimalValue) == decimalValue; } return false; @@ -87,10 +87,10 @@ public static Type GetTypeOrTypeInfo(this object value) // Attempt to acquire COM type information via IDispatch or IProvideClassInfo. dispatch = value as IDispatch; - if (dispatch != null) + if (dispatch is not null) { var tempTypeInfo = dispatch.GetTypeInfo(); - if (tempTypeInfo != null) + if (tempTypeInfo is not null) { typeInfo = GetTypeForTypeInfo(tempTypeInfo); typeInfoKind = tempTypeInfo.GetKind(); @@ -98,7 +98,7 @@ public static Type GetTypeOrTypeInfo(this object value) } } - if (typeInfo == null) + if (typeInfo is null) { if (value is IProvideClassInfo provideClassInfo) { @@ -112,12 +112,12 @@ public static Type GetTypeOrTypeInfo(this object value) } } - if (typeInfo != null) + if (typeInfo is not null) { // If the COM type is a dispatch-only interface, use it. Such interfaces typically // aren't exposed via QueryInterface(), so there's no way to validate them anyway. - if ((dispatch != null) && (typeInfoKind == TYPEKIND.TKIND_DISPATCH) && typeInfoFlags.HasFlag(TYPEFLAGS.TYPEFLAG_FDISPATCHABLE) && !typeInfoFlags.HasFlag(TYPEFLAGS.TYPEFLAG_FDUAL)) + if ((dispatch is not null) && (typeInfoKind == TYPEKIND.TKIND_DISPATCH) && typeInfoFlags.HasAllFlags(TYPEFLAGS.TYPEFLAG_FDISPATCHABLE) && !typeInfoFlags.HasAllFlags(TYPEFLAGS.TYPEFLAG_FDUAL)) { return typeInfo; } @@ -151,13 +151,13 @@ private static Type GetTypeForTypeInfo(ITypeInfo typeInfo) var typeLib = typeInfo.GetContainingTypeLib(out var index); var assembly = LoadPrimaryInteropAssembly(typeLib); - if (assembly != null) + if (assembly is not null) { var name = typeInfo.GetManagedName(); var guid = typeInfo.GetGuid(); var type = assembly.GetType(name, false, true); - if ((type != null) && (type.GUID == guid)) + if ((type is not null) && (type.GUID == guid)) { return type; } @@ -173,7 +173,7 @@ private static Type GetTypeForTypeInfo(ITypeInfo typeInfo) } type = types.FirstOrDefault(testType => (testType.GUID == guid) && (testType.FullName.Equals(name, StringComparison.OrdinalIgnoreCase))); - if (type != null) + if (type is not null) { return type; } @@ -192,7 +192,7 @@ private static Type GetTypeForTypeInfo(ITypeInfo typeInfo) private static Assembly LoadPrimaryInteropAssembly(ITypeLib typeLib) { - if (typeLib == null) + if (typeLib is null) { return null; } @@ -225,9 +225,9 @@ public static string GetFriendlyName(this object value) public static string GetFriendlyName(this object value, Type type) { - if (type == null) + if (type is null) { - if (value == null) + if (value is null) { return "[null]"; } @@ -235,7 +235,7 @@ public static string GetFriendlyName(this object value, Type type) type = value.GetType(); } - if (type.IsArray && (value != null)) + if (type.IsArray && (value is not null)) { var array = (Array)value; var dimensions = Enumerable.Range(0, type.GetArrayRank()); @@ -248,7 +248,7 @@ public static string GetFriendlyName(this object value, Type type) if (value is IDispatch dispatch) { var typeInfo = dispatch.GetTypeInfo(); - if (typeInfo != null) + if (typeInfo is not null) { return typeInfo.GetName(); } @@ -342,7 +342,7 @@ public static T Cast(object value) private static object CastToNullable(object value) { - if (value != null) + if (value is not null) { var valueCastType = typeof(DynamicCaster<>).MakeGenericType(Nullable.GetUnderlyingType(typeof(T))); value = valueCastType.InvokeMember("Cast", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new[] { value }); diff --git a/ClearScript/Util/Scope.cs b/ClearScript/Util/Scope.cs index bd9f168d9..613182da2 100644 --- a/ClearScript/Util/Scope.cs +++ b/ClearScript/Util/Scope.cs @@ -5,21 +5,35 @@ namespace Microsoft.ClearScript.Util { - internal interface IScope: IDisposable + internal interface IScope: IDisposable { - T Value { get; } + TValue Value { get; } } internal static class Scope { public static IDisposable Create(Action enterAction, Action exitAction) { - return new ScopeImpl(enterAction, exitAction); + enterAction?.Invoke(); + return new ScopeImpl(exitAction); } - public static IScope Create(Func enterFunc, Action exitAction) + public static IDisposable Create(Action enterAction, Action exitAction, in TArg arg) { - return new ScopeImpl(enterFunc, exitAction); + enterAction?.Invoke(arg); + return new ScopeImpl(exitAction); + } + + public static IScope Create(Func enterFunc, Action exitAction) + { + var value = (enterFunc is not null) ? enterFunc() : default; + return new ScopeImpl(value, exitAction); + } + + public static IScope Create(Func enterFunc, Action exitAction, in TArg arg) + { + var value = (enterFunc is not null) ? enterFunc(arg) : default; + return new ScopeImpl(value, exitAction); } #region Nested type: ScopeImpl @@ -27,12 +41,11 @@ public static IScope Create(Func enterFunc, Action exitAction) private sealed class ScopeImpl : IDisposable { private readonly Action exitAction; - private readonly OneWayFlag disposedFlag = new OneWayFlag(); + private readonly OneWayFlag disposedFlag = new(); - public ScopeImpl(Action enterAction, Action exitAction) + public ScopeImpl(Action exitAction) { this.exitAction = exitAction; - enterAction?.Invoke(); } #region IDisposable implementation @@ -50,25 +63,22 @@ public void Dispose() #endregion - #region Nested type: ScopeImpl + #region Nested type: ScopeImpl - private sealed class ScopeImpl : IScope + private sealed class ScopeImpl : IScope { - private readonly Action exitAction; - private readonly OneWayFlag disposedFlag = new OneWayFlag(); + private readonly Action exitAction; + private readonly OneWayFlag disposedFlag = new(); - public ScopeImpl(Func enterFunc, Action exitAction) + public ScopeImpl(TValue value, Action exitAction) { this.exitAction = exitAction; - if (enterFunc != null) - { - Value = enterFunc(); - } + Value = value; } - #region IScope implementation + #region IScope implementation - public T Value { get; } + public TValue Value { get; } public void Dispose() { diff --git a/ClearScript/Util/StructPtr.cs b/ClearScript/Util/StructPtr.cs new file mode 100644 index 000000000..fa26e9f4a --- /dev/null +++ b/ClearScript/Util/StructPtr.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System.Runtime.CompilerServices; +using System; + +namespace Microsoft.ClearScript.Util +{ + internal static class StructPtr + { + public static StructPtr FromRef(ref T value) where T : struct => new(ref value); + } + + internal readonly struct StructPtr where T : struct + { + private readonly IntPtr ptr; + + public unsafe StructPtr(ref T value) => ptr = (IntPtr)Unsafe.AsPointer(ref value); + + public unsafe ref T AsRef() => ref Unsafe.AsRef(ptr.ToPointer()); + } +} diff --git a/ClearScript/Util/TypeHelpers.NetStandard.cs b/ClearScript/Util/TypeHelpers.NetStandard.cs index 633048d5d..cce3e2799 100644 --- a/ClearScript/Util/TypeHelpers.NetStandard.cs +++ b/ClearScript/Util/TypeHelpers.NetStandard.cs @@ -19,10 +19,10 @@ private static string GetFullTypeName(string name, string assemblyName, bool use if (useAssemblyName) { - if (MiscHelpers.Try(out var assembly, () => Assembly.Load(AssemblyTable.GetFullAssemblyName(assemblyName)))) + if (MiscHelpers.Try(out var assembly, static assemblyName => Assembly.Load(AssemblyTable.GetFullAssemblyName(assemblyName)), assemblyName)) { // ReSharper disable once AccessToModifiedClosure - if (MiscHelpers.Try(out var result, () => assembly.GetType(fullTypeName).AssemblyQualifiedName)) + if (MiscHelpers.Try(out var result, static ctx => ctx.assembly.GetType(ctx.fullTypeName).AssemblyQualifiedName, (assembly, fullTypeName))) { return result; } diff --git a/ClearScript/Util/TypeHelpers.cs b/ClearScript/Util/TypeHelpers.cs index 835c5d1f9..32113b493 100644 --- a/ClearScript/Util/TypeHelpers.cs +++ b/ClearScript/Util/TypeHelpers.cs @@ -32,7 +32,7 @@ internal static partial class TypeHelpers // ReSharper restore StringLiteralTypo }; - private static readonly ConcurrentDictionary, Invocability> invocabilityMap = new ConcurrentDictionary, Invocability>(); + private static readonly ConcurrentDictionary, Invocability> invocabilityMap = new(); private static readonly NumericTypes[] numericConversions = { @@ -192,7 +192,7 @@ public static bool IsAssignableToGenericType(this Type type, Type genericTypeDef { Debug.Assert(genericTypeDefinition.IsGenericTypeDefinition); - for (var testType = type; testType != null; testType = testType.BaseType) + for (var testType = type; testType is not null; testType = testType.BaseType) { if (testType.IsGenericType && (testType.GetGenericTypeDefinition() == genericTypeDefinition)) { @@ -219,7 +219,7 @@ public static bool IsImplicitlyConvertibleFromValue(this Type type, Type sourceT public static bool IsNumericallyConvertibleFrom(this Type type, Type valueType) { - return numericConversions[(int)valueType.GetNumericType()].HasFlag(GetNumericTypes(type.GetNumericType())); + return numericConversions[(int)valueType.GetNumericType()].HasAllFlags(GetNumericTypes(type.GetNumericType())); } public static bool HasExtensionMethods(this Type type, IHostContext context) @@ -229,7 +229,7 @@ public static bool HasExtensionMethods(this Type type, IHostContext context) public static bool EqualsOrDeclares(this Type type, Type thatType) { - for (; thatType != null; thatType = thatType.DeclaringType) + for (; thatType is not null; thatType = thatType.DeclaringType) { if (thatType == type) { @@ -242,7 +242,7 @@ public static bool EqualsOrDeclares(this Type type, Type thatType) public static bool IsFamilyOf(this Type type, Type thatType) { - for (; type != null; type = type.DeclaringType) + for (; type is not null; type = type.DeclaringType) { if ((type == thatType) || type.IsSubclassOf(thatType)) { @@ -261,13 +261,13 @@ public static bool IsFriendOf(this Type type, IHostContext context, Type thatTyp public static bool IsCOMVisible(this Type type, IHostContext context) { var attribute = type.GetOrLoadCustomAttribute(context, false); - if (attribute != null) + if (attribute is not null) { return attribute.Value; } attribute = type.Assembly.GetOrLoadCustomAttribute(context, false); - if (attribute != null) + if (attribute is not null) { return attribute.Value; } @@ -340,7 +340,7 @@ public static EventInfo GetScriptableEvent(this Type type, IHostContext context, try { var eventInfo = type.GetScriptableEventInternal(context, name, bindFlags); - if (eventInfo != null) + if (eventInfo is not null) { return eventInfo; } @@ -360,7 +360,7 @@ public static IEnumerable GetScriptableFields(this Type type, IHostCo public static FieldInfo GetScriptableField(this Type type, IHostContext context, string name, BindingFlags bindFlags) { var candidate = type.GetField(name, bindFlags); - if ((candidate != null) && candidate.IsScriptable(context) && string.Equals(candidate.GetScriptName(context), name, bindFlags.GetMemberNameComparison())) + if ((candidate is not null) && candidate.IsScriptable(context) && string.Equals(candidate.GetScriptName(context), name, bindFlags.GetMemberNameComparison())) { return candidate; } @@ -401,7 +401,7 @@ public static IEnumerable GetScriptableDefaultProperties(this Type if (type.IsArray) { var property = typeof(IList<>).MakeSpecificType(type.GetElementType()).GetProperty("Item"); - return (property != null) ? property.ToEnumerable() : ArrayHelpers.GetEmptyArray(); + return (property is not null) ? property.ToEnumerable() : ArrayHelpers.GetEmptyArray(); } var properties = type.GetProperties(bindFlags).AsEnumerable(); @@ -445,7 +445,7 @@ public static PropertyInfo GetScriptableProperty(this Type type, IHostContext co try { var property = type.GetScriptableProperty(context, name, bindFlags); - if (property != null) + if (property is not null) { return property; } @@ -513,7 +513,7 @@ public static object CreateInstance(this Type type, IHostContext context, HostTa } var constructor = BindToMember(context, candidates, flags, args, bindArgs); - if (constructor == null) + if (constructor is null) { throw new MissingMethodException(MiscHelpers.FormatInvariant("Type '{0}' has no constructor that matches the specified arguments", type.GetFullFriendlyName())); } @@ -575,7 +575,7 @@ public static PropertyInfo BindToMember(IHostContext context, PropertyInfo[] can var bindCandidates = GetBindCandidates(context, candidates, args, bindArgs.Select(GetBindArgType).ToArray()).ToArray(); result = SelectBindCandidate(bindCandidates); - if (result == null) + if (result is null) { // the default binder fails to bind to some COM properties because of by-ref parameter types if (candidates.Length == 1) @@ -606,7 +606,7 @@ public static HostType ImportType(string typeName, string assemblyName, bool use if (!hostTypeArgs.All(arg => arg is HostType)) { - throw new ArgumentException("Invalid generic type argument"); + throw new ArgumentException("Invalid generic type argument", nameof(hostTypeArgs)); } var typeArgs = hostTypeArgs.Cast().Select(hostType => hostType.GetTypeArg()).ToArray(); @@ -617,10 +617,10 @@ public static HostType ImportType(string typeName, string assemblyName, bool use { const int maxTypeArgCount = 16; - if ((typeArgs != null) && (typeArgs.Length > 0)) + if ((typeArgs is not null) && (typeArgs.Length > 0)) { var template = ImportType(typeName, assemblyName, useAssemblyName, typeArgs.Length); - if (template == null) + if (template is null) { throw new TypeLoadException(MiscHelpers.FormatInvariant("Could not find a matching generic type definition for '{0}'", typeName)); } @@ -640,7 +640,7 @@ public static HostType ImportType(string typeName, string assemblyName, bool use if (templates.Length < 1) { - if (type == null) + if (type is null) { throw new TypeLoadException(MiscHelpers.FormatInvariant("Could not find a specific type or generic type definition for '{0}'", typeName)); } @@ -648,7 +648,7 @@ public static HostType ImportType(string typeName, string assemblyName, bool use return HostType.Wrap(type); } - if (type == null) + if (type is null) { return HostType.Wrap(templates); } @@ -675,7 +675,7 @@ private static Type ImportType(string typeName, string assemblyName, bool useAss { } - return ((type != null) && useAssemblyName && (type.AssemblyQualifiedName != assemblyQualifiedName)) ? null : type; + return ((type is not null) && useAssemblyName && (type.AssemblyQualifiedName != assemblyQualifiedName)) ? null : type; } private static string GetFriendlyName(this Type type, Func getBaseName) @@ -777,22 +777,22 @@ private static bool IsAssignableFromValueInternal(this Type type, ref object val type = type.GetElementType(); } - var valueIsByRef = (valueType != null) && valueType.IsByRef; + var valueIsByRef = (valueType is not null) && valueType.IsByRef; if (valueIsByRef) { valueType = valueType.GetElementType(); } - if ((cost != null) && (typeIsByRef != valueIsByRef)) + if ((cost is not null) && (typeIsByRef != valueIsByRef)) { cost.Flags |= BindArgFlags.ByRefMismatch; } - if ((value == null) && (valueType == null)) + if ((value is null) && (valueType is null)) { if (type.IsNullable()) { - if (cost != null) + if (cost is not null) { cost.NumericType = Nullable.GetUnderlyingType(type).GetNumericType(); } @@ -803,7 +803,7 @@ private static bool IsAssignableFromValueInternal(this Type type, ref object val return !type.IsValueType; } - if (valueType == null) + if (valueType is null) { valueType = value.GetType(); } @@ -815,7 +815,7 @@ private static bool IsAssignableFromValueInternal(this Type type, ref object val if (type.IsAssignableFrom(valueType)) { - if (cost != null) + if (cost is not null) { if (type.IsNullable()) { @@ -833,7 +833,7 @@ private static bool IsAssignableFromValueInternal(this Type type, ref object val if (type.IsImplicitlyConvertibleFromValue(valueType, ref value)) { - if (cost != null) + if (cost is not null) { cost.Flags |= BindArgFlags.ImplicitConversion; } @@ -841,7 +841,7 @@ private static bool IsAssignableFromValueInternal(this Type type, ref object val return true; } - if (value == null) + if (value is null) { return false; } @@ -851,7 +851,7 @@ private static bool IsAssignableFromValueInternal(this Type type, ref object val var underlyingType = Nullable.GetUnderlyingType(type); if (underlyingType.IsAssignableFromValueInternal(ref value, valueType, cost)) { - if (cost != null) + if (cost is not null) { cost.Flags |= BindArgFlags.NullableTransition; cost.NumericType = underlyingType.GetNumericType(); @@ -920,16 +920,16 @@ private static bool IsAssignableFromValueInternal(this Type type, ref object val // special case for method binding only - if ((cost != null) && !valueTypeIsIntegral && !type.IsNumericallyConvertibleFrom(valueType)) + if ((cost is not null) && !valueTypeIsIntegral && !type.IsNumericallyConvertibleFrom(valueType)) { return false; } } var tempValue = value; - if (MiscHelpers.Try(out var tempResult, () => Convert.ChangeType(tempValue, type))) + if (MiscHelpers.Try(out var tempResult, static ctx => Convert.ChangeType(ctx.tempValue, ctx.type), (tempValue, type))) { - if (cost != null) + if (cost is not null) { cost.Flags |= BindArgFlags.NumericConversion; cost.NumericType = type.GetNumericType(); @@ -951,7 +951,7 @@ private static bool IsImplicitlyConvertibleFromValueInternal(Type definingType, if ((parameters.Length == 1) && parameters[0].ParameterType.IsAssignableFrom(sourceType) && targetType.IsAssignableFrom(converter.ReturnType)) { var args = new[] { value }; - if (MiscHelpers.Try(out var result, () => converter.Invoke(null, args))) + if (MiscHelpers.Try(out var result, static ctx => ctx.converter.Invoke(null, ctx.args), (converter, args))) { value = result; return true; @@ -993,7 +993,7 @@ private static Type GetBindArgType(object bindArg) return hostTarget.Type; } - if (bindArg != null) + if (bindArg is not null) { return bindArg.GetType(); } @@ -1015,7 +1015,7 @@ private static IEnumerable> GetBindCandidates(IHostContext c { foreach (var candidate in candidates) { - if (MiscHelpers.Try(out var bindCandidate, () => BindCandidate.TryCreateInstance(context, candidate, getParameters(candidate), args, argTypes)) && (bindCandidate != null)) + if (MiscHelpers.Try(out var bindCandidate, static ctx => BindCandidate.TryCreateInstance(ctx.context, ctx.candidate, ctx.getParameters(ctx.candidate), ctx.args, ctx.argTypes), (context, candidate, getParameters, args, argTypes)) && (bindCandidate is not null)) { yield return bindCandidate; } @@ -1072,7 +1072,7 @@ private enum NumericType #region Nested type: NumericTypes [Flags] - private enum NumericTypes + public enum NumericTypes { // ReSharper disable UnusedMember.Local @@ -1095,13 +1095,16 @@ private enum NumericTypes // ReSharper restore UnusedMember.Local } + public static bool HasAllFlags(this NumericTypes value, NumericTypes flags) => (value & flags) == flags; + public static bool HasAnyFlag(this NumericTypes value, NumericTypes flags) => (value & flags) != 0; + #endregion #region Nested type: TypeNode private sealed class TypeNode { - private static readonly ConcurrentDictionary typeNodeMap = new ConcurrentDictionary(); + private static readonly ConcurrentDictionary typeNodeMap = new(); private readonly Type type; @@ -1137,7 +1140,7 @@ private static TypeNode Create(Type type) var redundantInterfaces = new List(); var baseType = type.BaseType; - if (baseType != null) + if (baseType is not null) { redundantInterfaces.AddRange(baseType.GetInterfaces()); baseNode = GetOrCreate(baseType); @@ -1182,7 +1185,7 @@ private void GetUpcastCountInternal(Type targetType, uint count, ref uint lowest private sealed class PropertySignatureComparer : EqualityComparer { - public static readonly PropertySignatureComparer Instance = new PropertySignatureComparer(); + public static readonly PropertySignatureComparer Instance = new(); public override bool Equals(PropertyInfo first, PropertyInfo second) { @@ -1352,7 +1355,14 @@ public static BindCandidate TryCreateInstance(IHostContext context, T candida return null; } - defaultArgCount += 1; + ++defaultArgCount; + continue; + } + + if ((args[argIndex] is Missing) && (param.IsOptional || param.HasDefaultValue)) + { + ++defaultArgCount; + ++argIndex; continue; } diff --git a/ClearScript/Util/TypeTags.cs b/ClearScript/Util/TypeTags.cs index d4e5b281c..87e848977 100644 --- a/ClearScript/Util/TypeTags.cs +++ b/ClearScript/Util/TypeTags.cs @@ -1,4 +1,7 @@ -namespace Microsoft.ClearScript.Util +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.Util { internal interface INothingTag { diff --git a/ClearScript/Util/UniqueNameManager.cs b/ClearScript/Util/UniqueNameManager.cs index b95bdbcb1..c18055878 100644 --- a/ClearScript/Util/UniqueNameManager.cs +++ b/ClearScript/Util/UniqueNameManager.cs @@ -13,7 +13,7 @@ internal interface IUniqueNameManager internal sealed class UniqueNameManager : IUniqueNameManager { - private readonly Dictionary map = new Dictionary(); + private readonly Dictionary map = new(); #region IUniqueNameManager implementation @@ -21,7 +21,7 @@ public string GetUniqueName(string inputName, string alternate) { lock (map) { - var nonBlankName = MiscHelpers.EnsureNonBlank(inputName, alternate); + var nonBlankName = inputName.ToNonBlank(alternate); map.TryGetValue(nonBlankName, out var count); @@ -35,7 +35,7 @@ public string GetUniqueName(string inputName, string alternate) internal sealed class UniqueFileNameManager : IUniqueNameManager { - private readonly Dictionary map = new Dictionary(); + private readonly Dictionary map = new(); #region IUniqueNameManager implementation @@ -43,7 +43,7 @@ public string GetUniqueName(string inputName, string alternate) { lock (map) { - var nonBlankName = MiscHelpers.EnsureNonBlank(Path.GetFileNameWithoutExtension(inputName), alternate); + var nonBlankName = Path.GetFileNameWithoutExtension(inputName).ToNonBlank(alternate); var extension = Path.GetExtension(inputName); map.TryGetValue(nonBlankName, out var count); diff --git a/ClearScript/Util/UnmanagedMemoryHelpers.cs b/ClearScript/Util/UnmanagedMemoryHelpers.cs index 50c86e1e0..dd54ca69c 100644 --- a/ClearScript/Util/UnmanagedMemoryHelpers.cs +++ b/ClearScript/Util/UnmanagedMemoryHelpers.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Microsoft.ClearScript.Util @@ -12,7 +13,7 @@ internal static class UnmanagedMemoryHelpers private delegate ulong ReadArrayFromUnmanagedMemoryHandler(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex); private delegate ulong WriteArrayToUnmanagedMemoryHandler(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination); - private static readonly Dictionary readArrayFromUnmanagedMemoryHandlerMap = new Dictionary + private static readonly Dictionary readArrayFromUnmanagedMemoryHandlerMap = new() { { typeof(byte), ReadByteArrayFromUnmanagedMemory }, { typeof(sbyte), ReadSByteArrayFromUnmanagedMemory }, @@ -29,7 +30,7 @@ internal static class UnmanagedMemoryHelpers { typeof(double), ReadDoubleArrayFromUnmanagedMemory } }; - private static readonly Dictionary writeArrayToUnmanagedMemoryHandlerMap = new Dictionary + private static readonly Dictionary writeArrayToUnmanagedMemoryHandlerMap = new() { { typeof(byte), WriteByteArrayToUnmanagedMemory }, { typeof(sbyte), WriteSByteArrayToUnmanagedMemory }, @@ -51,11 +52,87 @@ public static ulong Copy(IntPtr pSource, ulong length, T[] destination, ulong return Copy(typeof(T), pSource, length, destination, destinationIndex); } + public static unsafe ulong Copy(IntPtr pSource, ulong length, in Span destination, ulong destinationIndex) where T : unmanaged + { + var destinationLength = (ulong)destination.Length; + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length < 1) + { + return 0UL; + } + + length = Math.Min(length, destinationLength - destinationIndex); + var elementSize = (ulong)Unsafe.SizeOf(); + + fixed (void* pDestinationSpan = destination) + { + var pDestination = ((IntPtr)pDestinationSpan + Convert.ToInt32(destinationIndex * elementSize)).ToPointer(); + var bytesToCopy = Convert.ToInt64(length * elementSize); + Buffer.MemoryCopy(pSource.ToPointer(), pDestination, bytesToCopy, bytesToCopy); + } + + return length; + } + public static ulong Copy(T[] source, ulong sourceIndex, ulong length, IntPtr pDestination) { return Copy(typeof(T), source, sourceIndex, length, pDestination); } + public static unsafe ulong Copy(in ReadOnlySpan source, ulong sourceIndex, ulong length, IntPtr pDestination) where T : unmanaged + { + var sourceLength = (ulong)source.Length; + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length < 1) + { + return 0UL; + } + + length = Math.Min(length, sourceLength - sourceIndex); + var elementSize = (ulong)Unsafe.SizeOf(); + + fixed (void* pSourceSpan = source) + { + var pSource = ((IntPtr)pSourceSpan + Convert.ToInt32(sourceIndex * elementSize)).ToPointer(); + var bytesToCopy = Convert.ToInt64(length * elementSize); + Buffer.MemoryCopy(pSource, pDestination.ToPointer(), bytesToCopy, bytesToCopy); + } + + return length; + } + private static ulong Copy(Type type, IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { if (readArrayFromUnmanagedMemoryHandlerMap.TryGetValue(type, out var handler)) @@ -79,11 +156,28 @@ private static ulong Copy(Type type, Array sourceArray, ulong sourceIndex, ulong private static unsafe ulong ReadByteArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (byte[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -110,11 +204,28 @@ private static unsafe ulong ReadByteArrayFromUnmanagedMemory(IntPtr pSource, ulo private static unsafe ulong ReadSByteArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (sbyte[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -133,11 +244,28 @@ private static unsafe ulong ReadSByteArrayFromUnmanagedMemory(IntPtr pSource, ul private static unsafe ulong ReadUInt16ArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (ushort[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -156,11 +284,28 @@ private static unsafe ulong ReadUInt16ArrayFromUnmanagedMemory(IntPtr pSource, u private static unsafe ulong ReadCharArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (char[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -187,11 +332,28 @@ private static unsafe ulong ReadCharArrayFromUnmanagedMemory(IntPtr pSource, ulo private static unsafe ulong ReadInt16ArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (short[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -218,11 +380,28 @@ private static unsafe ulong ReadInt16ArrayFromUnmanagedMemory(IntPtr pSource, ul private static unsafe ulong ReadUInt32ArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (uint[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -241,11 +420,28 @@ private static unsafe ulong ReadUInt32ArrayFromUnmanagedMemory(IntPtr pSource, u private static unsafe ulong ReadInt32ArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (int[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -272,11 +468,28 @@ private static unsafe ulong ReadInt32ArrayFromUnmanagedMemory(IntPtr pSource, ul private static unsafe ulong ReadUInt64ArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (ulong[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -295,11 +508,28 @@ private static unsafe ulong ReadUInt64ArrayFromUnmanagedMemory(IntPtr pSource, u private static unsafe ulong ReadInt64ArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (long[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -326,11 +556,28 @@ private static unsafe ulong ReadInt64ArrayFromUnmanagedMemory(IntPtr pSource, ul private static unsafe ulong ReadUIntPtrArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (UIntPtr[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -349,11 +596,28 @@ private static unsafe ulong ReadUIntPtrArrayFromUnmanagedMemory(IntPtr pSource, private static unsafe ulong ReadIntPtrArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (IntPtr[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -380,11 +644,28 @@ private static unsafe ulong ReadIntPtrArrayFromUnmanagedMemory(IntPtr pSource, u private static unsafe ulong ReadSingleArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (float[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -411,11 +692,28 @@ private static unsafe ulong ReadSingleArrayFromUnmanagedMemory(IntPtr pSource, u private static unsafe ulong ReadDoubleArrayFromUnmanagedMemory(IntPtr pSource, ulong length, Array destinationArray, ulong destinationIndex) { var destinationLength = (ulong)destinationArray.LongLength; - if (destinationIndex >= destinationLength) + if (destinationLength < 1) + { + if (destinationIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(destinationIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (destinationIndex >= destinationLength) { throw new ArgumentOutOfRangeException(nameof(destinationIndex)); } + if (length < 1) + { + return 0UL; + } + var destination = (double[])destinationArray; length = Math.Min(length, destinationLength - destinationIndex); @@ -442,11 +740,28 @@ private static unsafe ulong ReadDoubleArrayFromUnmanagedMemory(IntPtr pSource, u private static unsafe ulong WriteByteArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (byte[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -473,11 +788,28 @@ private static unsafe ulong WriteByteArrayToUnmanagedMemory(Array sourceArray, u private static unsafe ulong WriteSByteArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (sbyte[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -496,11 +828,28 @@ private static unsafe ulong WriteSByteArrayToUnmanagedMemory(Array sourceArray, private static unsafe ulong WriteUInt16ArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (ushort[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -519,11 +868,28 @@ private static unsafe ulong WriteUInt16ArrayToUnmanagedMemory(Array sourceArray, private static unsafe ulong WriteCharArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (char[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -550,11 +916,28 @@ private static unsafe ulong WriteCharArrayToUnmanagedMemory(Array sourceArray, u private static unsafe ulong WriteInt16ArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (short[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -581,11 +964,28 @@ private static unsafe ulong WriteInt16ArrayToUnmanagedMemory(Array sourceArray, private static unsafe ulong WriteUInt32ArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (uint[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -604,11 +1004,28 @@ private static unsafe ulong WriteUInt32ArrayToUnmanagedMemory(Array sourceArray, private static unsafe ulong WriteInt32ArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (int[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -635,11 +1052,28 @@ private static unsafe ulong WriteInt32ArrayToUnmanagedMemory(Array sourceArray, private static unsafe ulong WriteUInt64ArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (ulong[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -658,11 +1092,28 @@ private static unsafe ulong WriteUInt64ArrayToUnmanagedMemory(Array sourceArray, private static unsafe ulong WriteInt64ArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (long[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -689,11 +1140,28 @@ private static unsafe ulong WriteInt64ArrayToUnmanagedMemory(Array sourceArray, private static unsafe ulong WriteUIntPtrArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (UIntPtr[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -712,11 +1180,28 @@ private static unsafe ulong WriteUIntPtrArrayToUnmanagedMemory(Array sourceArray private static unsafe ulong WriteIntPtrArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (IntPtr[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -743,11 +1228,28 @@ private static unsafe ulong WriteIntPtrArrayToUnmanagedMemory(Array sourceArray, private static unsafe ulong WriteSingleArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (float[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); @@ -774,11 +1276,28 @@ private static unsafe ulong WriteSingleArrayToUnmanagedMemory(Array sourceArray, private static unsafe ulong WriteDoubleArrayToUnmanagedMemory(Array sourceArray, ulong sourceIndex, ulong length, IntPtr pDestination) { var sourceLength = (ulong)sourceArray.LongLength; - if (sourceIndex >= sourceLength) + if (sourceLength < 1) + { + if (sourceIndex > 0) + { + throw new ArgumentOutOfRangeException(nameof(sourceIndex)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (sourceIndex >= sourceLength) { throw new ArgumentOutOfRangeException(nameof(sourceIndex)); } + if (length < 1) + { + return 0UL; + } + var source = (double[])sourceArray; length = Math.Min(length, sourceLength - sourceIndex); diff --git a/ClearScript/Util/VTablePatcher.cs b/ClearScript/Util/VTablePatcher.cs index 06f2554cd..00970c60f 100644 --- a/ClearScript/Util/VTablePatcher.cs +++ b/ClearScript/Util/VTablePatcher.cs @@ -12,7 +12,7 @@ namespace Microsoft.ClearScript.Util [SuppressMessage("ReSharper", "CommentTypo", Justification = "This class uses comments to show machine code disassembly.")] internal abstract class VTablePatcher { - private static readonly HashSet patchedVTables = new HashSet(); + private static readonly HashSet patchedVTables = new(); private static IntPtr hHeap; public static VTablePatcher GetInstance() @@ -29,9 +29,8 @@ private static void ApplyVTablePatches(IntPtr pInterface, params VTablePatch[] p lock (PatchLock) { var pVTable = Marshal.ReadIntPtr(pInterface); - if (!patchedVTables.Contains(pVTable)) + if (patchedVTables.Add(pVTable)) { - patchedVTables.Add(pVTable); EnsureHeap(); foreach (var patch in patches) diff --git a/ClearScript/Util/ValueScope.cs b/ClearScript/Util/ValueScope.cs new file mode 100644 index 000000000..34772840c --- /dev/null +++ b/ClearScript/Util/ValueScope.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; + +namespace Microsoft.ClearScript.Util +{ + internal ref struct ValueScope + { + private readonly Action exitAction; + private bool disposed; + + public ValueScope(Action exitAction) + { + this.exitAction = exitAction; + disposed = false; + } + + public void Dispose() + { + if (!disposed) + { + disposed = true; + exitAction?.Invoke(); + } + } + } + + internal ref struct ValueScope + { + private readonly Action exitAction; + private bool disposed; + + public TValue Value { get; } + + public ValueScope(TValue value, Action exitAction) + { + this.exitAction = exitAction; + disposed = false; + Value = value; + } + + public void Dispose() + { + if (!disposed) + { + disposed = true; + exitAction?.Invoke(Value); + } + } + } + + internal static class ScopeFactory + { + public static ValueScope Create(Action enterAction, Action exitAction) + { + enterAction?.Invoke(); + return new ValueScope(exitAction); + } + + public static ValueScope Create(Action enterAction, Action exitAction, in TArg arg) + { + enterAction?.Invoke(arg); + return new ValueScope(exitAction); + } + + public static ValueScope Create(Func enterFunc, Action exitAction) + { + var value = (enterFunc is not null) ? enterFunc() : default; + return new ValueScope(value, exitAction); + } + + public static ValueScope Create(Func enterFunc, Action exitAction, in TArg arg) + { + var value = (enterFunc is not null) ? enterFunc(arg) : default; + return new ValueScope(value, exitAction); + } + } +} diff --git a/ClearScript/Util/Web/WebResponse.cs b/ClearScript/Util/Web/WebResponse.cs index 69b776b78..0545a7b59 100644 --- a/ClearScript/Util/Web/WebResponse.cs +++ b/ClearScript/Util/Web/WebResponse.cs @@ -51,7 +51,7 @@ public void Close(int? overrideStatusCode = null) { if (Interlocked.CompareExchange(ref state, State.Closed, State.Open) == State.Open) { - CloseAsync(overrideStatusCode).ContinueWith(task => MiscHelpers.Try(task.Wait)); + CloseAsync(overrideStatusCode).ContinueWith(task => MiscHelpers.Try(static task => task.Wait(), task)); } } diff --git a/ClearScript/Util/Web/WebSocket.cs b/ClearScript/Util/Web/WebSocket.cs index 44fde5651..f9da04e75 100644 --- a/ClearScript/Util/Web/WebSocket.cs +++ b/ClearScript/Util/Web/WebSocket.cs @@ -22,10 +22,10 @@ internal sealed class WebSocket private readonly bool isServerSocket; private readonly Random random = MiscHelpers.CreateSeededRandom(); - private readonly SemaphoreSlim receiveSemaphore = new SemaphoreSlim(1); - private readonly SemaphoreSlim sendSemaphore = new SemaphoreSlim(1); + private readonly SemaphoreSlim receiveSemaphore = new(1); + private readonly SemaphoreSlim sendSemaphore = new(1); - private readonly InterlockedOneWayFlag closedFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag closedFlag = new(); #endregion @@ -284,7 +284,7 @@ private async Task SendFrameAsync(Frame frame) } await socket.SendBytesAsync(header).ConfigureAwait(false); - if (lengthBytes != null) + if (lengthBytes is not null) { await socket.SendBytesAsync(lengthBytes).ConfigureAwait(false); } @@ -342,7 +342,7 @@ private async Task SendFrameAsync(Frame frame) private void SendFrameAsync(Frame frame, Action callback) { - SendFrameAsync(frame).ContinueWith(task => callback(MiscHelpers.Try(task.Wait))); + SendFrameAsync(frame).ContinueWith(task => callback(MiscHelpers.Try(static task => task.Wait(), task))); } #endregion @@ -360,7 +360,7 @@ public void Close(ErrorCode errorCode, string message) } var frame = new Frame { Final = true, OpCode = OpCodes.Close, Payload = payload }; - SendFrameAsync(frame, succeeded => + SendFrameAsync(frame, _ => { socket.Close(); receiveSemaphore.Dispose(); diff --git a/ClearScript/V8/FastProxy/IV8FastAsyncEnumerator.cs b/ClearScript/V8/FastProxy/IV8FastAsyncEnumerator.cs new file mode 100644 index 000000000..5509df4b4 --- /dev/null +++ b/ClearScript/V8/FastProxy/IV8FastAsyncEnumerator.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Threading.Tasks; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a fast asynchronous enumerator. + /// + public interface IV8FastAsyncEnumerator : IAsyncDisposable + { + /// + /// Gets the item at the current position in the collection. + /// + /// On return, contains the item at the current position in the collection. + void GetCurrent(in V8FastResult item); + + /// + /// Advances the enumerator asynchronously to the next position in the collection. + /// + /// A task structure whose result is true if the enumerator was advanced to the next position, false if it was already at the end of the collection. + ValueTask MoveNextAsync(); + } +} diff --git a/ClearScript/V8/FastProxy/IV8FastEnumerator.cs b/ClearScript/V8/FastProxy/IV8FastEnumerator.cs new file mode 100644 index 000000000..2110089fc --- /dev/null +++ b/ClearScript/V8/FastProxy/IV8FastEnumerator.cs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a fast enumerator. + /// + public interface IV8FastEnumerator : IDisposable + { + /// + /// Gets the item at the current position in the collection. + /// + /// On return, contains the item at the current position in the collection. + void GetCurrent(in V8FastResult item); + + /// + /// Advances the enumerator to the next position in the collection. + /// + /// True if the enumerator was advanced to the next position, false if it is already at the end of the collection. + bool MoveNext(); + } +} diff --git a/ClearScript/V8/FastProxy/IV8FastHostDynamicProperties.cs b/ClearScript/V8/FastProxy/IV8FastHostDynamicProperties.cs new file mode 100644 index 000000000..e14393882 --- /dev/null +++ b/ClearScript/V8/FastProxy/IV8FastHostDynamicProperties.cs @@ -0,0 +1,77 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System.Collections.Generic; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a set of dynamic properties keyed by name or index. + /// + public interface IV8FastHostDynamicProperties + { + /// + /// Enumerates the names of all existing named dynamic properties. + /// + IEnumerable DynamicPropertyNames { get; } + + /// + /// Enumerates the indices of all existing indexed dynamic properties. + /// + IEnumerable DynamicPropertyIndices { get; } + + /// + /// Gets the value of a named dynamic property. + /// + /// The name of the dynamic property to get. + /// On return, the value of the dynamic property if it was found. + void GetDynamicProperty(string name, in V8FastResult value); + + /// + /// Sets the value of a named dynamic property. + /// + /// The name of the dynamic property to set. + /// The property value. + void SetDynamicProperty(string name, in V8FastArg value); + + /// + /// Gets the value of an indexed dynamic property. + /// + /// The index of the dynamic property to get. + /// On return, the value of the dynamic property if it was found. + void GetDynamicProperty(int index, in V8FastResult value); + + /// + /// Sets the value of an indexed dynamic property. + /// + /// The index of the dynamic property to set. + /// The property value. + void SetDynamicProperty(int index, in V8FastArg value); + + /// + /// Determines whether a dynamic property with the specified name exists. + /// + /// The name of the dynamic property for which to search. + /// True if the dynamic property exists, false otherwise. + bool HasDynamicProperty(string name); + + /// + /// Determines whether a dynamic property exists at the specified index. + /// + /// The index of the dynamic property for which to search. + /// True if the dynamic property exists, false otherwise. + bool HasDynamicProperty(int index); + + /// + /// Deletes a named dynamic property. + /// + /// The name of the dynamic property to delete. + void DeleteDynamicProperty(string name); + + /// + /// Deletes an indexed dynamic property. + /// + /// The index of the dynamic property to delete. + void DeleteDynamicProperty(int index); + } +} diff --git a/ClearScript/V8/FastProxy/IV8FastHostFunction.cs b/ClearScript/V8/FastProxy/IV8FastHostFunction.cs new file mode 100644 index 000000000..f3e7e08e4 --- /dev/null +++ b/ClearScript/V8/FastProxy/IV8FastHostFunction.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a fast host function. + /// + public interface IV8FastHostFunction : IV8FastHostObject + { + /// + /// Gets the function's operations interface. + /// + new IV8FastHostFunctionOperations Operations { get; } + } +} diff --git a/ClearScript/V8/FastProxy/IV8FastHostFunctionOperations.cs b/ClearScript/V8/FastProxy/IV8FastHostFunctionOperations.cs new file mode 100644 index 000000000..055de60f6 --- /dev/null +++ b/ClearScript/V8/FastProxy/IV8FastHostFunctionOperations.cs @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents the operations supported by a fast host function. + /// + public interface IV8FastHostFunctionOperations : IV8FastHostObjectOperations + { + /// + /// Invokes the function. + /// + /// True to invoke the function as a constructor, false otherwise. + /// The arguments to pass to the function. + /// On return, the function's return value. + void Invoke(bool asConstructor, in V8FastArgs args, in V8FastResult result); + } +} diff --git a/ClearScript/V8/FastProxy/IV8FastHostMethod.cs b/ClearScript/V8/FastProxy/IV8FastHostMethod.cs new file mode 100644 index 000000000..868364ae9 --- /dev/null +++ b/ClearScript/V8/FastProxy/IV8FastHostMethod.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a fast host method. + /// + public interface IV8FastHostMethod : IV8FastHostObject + { + /// + /// Gets the method's operations interface. + /// + new IV8FastHostMethodOperations Operations { get; } + } +} diff --git a/ClearScript/V8/FastProxy/IV8FastHostMethodOperations.cs b/ClearScript/V8/FastProxy/IV8FastHostMethodOperations.cs new file mode 100644 index 000000000..005b3bb44 --- /dev/null +++ b/ClearScript/V8/FastProxy/IV8FastHostMethodOperations.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents the operations supported by a fast host method. + /// + public interface IV8FastHostMethodOperations : IV8FastHostObjectOperations + { + /// + /// Invokes the method. + /// + /// The arguments to pass to the method. + /// On return, the method's return value. + void Invoke(in V8FastArgs args, in V8FastResult result); + } +} diff --git a/ClearScript/V8/FastProxy/IV8FastHostObject.cs b/ClearScript/V8/FastProxy/IV8FastHostObject.cs new file mode 100644 index 000000000..e833ce203 --- /dev/null +++ b/ClearScript/V8/FastProxy/IV8FastHostObject.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a fast host object. + /// + public interface IV8FastHostObject + { + /// + /// Gets the object's operations interface. + /// + IV8FastHostObjectOperations Operations { get; } + } +} diff --git a/ClearScript/V8/FastProxy/IV8FastHostObjectOperations.cs b/ClearScript/V8/FastProxy/IV8FastHostObjectOperations.cs new file mode 100644 index 000000000..28beca02f --- /dev/null +++ b/ClearScript/V8/FastProxy/IV8FastHostObjectOperations.cs @@ -0,0 +1,113 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System.Collections.Generic; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents the operations supported by a fast host object. + /// + public interface IV8FastHostObjectOperations + { + /// + /// Gets a human-readable name for the specified object. + /// + /// The object for which to get a human-readable name. + /// A human-readable name for the specified object. + string GetFriendlyName(IV8FastHostObject instance); + + /// + /// Gets the value of a named property. + /// + /// The object to search for the property. + /// The name of the property to get. + /// On return, the value of the property if it was found. + /// On return, true if the property value is a cacheable constant, false otherwise. + void GetProperty(IV8FastHostObject instance, string name, in V8FastResult value, out bool isCacheable); + + /// + /// Sets the value of a named property. + /// + /// The object whose property to set. + /// The name of the property to set. + /// The property value. + void SetProperty(IV8FastHostObject instance, string name, in V8FastArg value); + + /// + /// Gets the attributes of a named property. + /// + /// The object to search for the property. + /// The name of the property to query. + /// A set of property attributes. + V8FastHostPropertyFlags QueryProperty(IV8FastHostObject instance, string name); + + /// + /// Deletes a named property. + /// + /// The object whose property to delete. + /// The name of the property to delete. + /// True if the property was deleted or does not exist; false if the property exists but is not deletable. + bool DeleteProperty(IV8FastHostObject instance, string name); + + /// + /// Enumerates the names of all existing named properties. + /// + /// The object to search for named properties. + /// A collection containing the names of all existing named properties. + IEnumerable GetPropertyNames(IV8FastHostObject instance); + + /// + /// Gets the value of an indexed property. + /// + /// The object to search for the property. + /// The index of the property to get. + /// On return, the value of the property if it was found. + void GetProperty(IV8FastHostObject instance, int index, in V8FastResult value); + + /// + /// Sets the value of an indexed property. + /// + /// The object whose property to set. + /// The index of the property to set. + /// The property value. + void SetProperty(IV8FastHostObject instance, int index, in V8FastArg value); + + /// + /// Gets the attributes of an indexed property. + /// + /// The object to search for the property. + /// The index of the property to query. + /// A set of property attributes. + V8FastHostPropertyFlags QueryProperty(IV8FastHostObject instance, int index); + + /// + /// Deletes an indexed property. + /// + /// The object whose property to delete. + /// The index of the property to delete. + /// True if the property was deleted or does not exist; false if the property exists but is not deletable. + bool DeleteProperty(IV8FastHostObject instance, int index); + + /// + /// Enumerates the indices of all existing indexed properties. + /// + /// The object to search for indexed properties. + /// A collection containing the indices of all existing indexed properties. + IEnumerable GetPropertyIndices(IV8FastHostObject instance); + + /// + /// Creates a fast enumerator that iterates through the object's contents. + /// + /// The object for which to create a fast enumerator. + /// A fast enumerator for the specified object's contents. + IV8FastEnumerator CreateEnumerator(IV8FastHostObject instance); + + /// + /// Creates a fast asynchronous enumerator that iterates through the object's contents. + /// + /// The object for which to create a fast asynchronous enumerator. + /// A fast asynchronous enumerator for the specified object's contents. + IV8FastAsyncEnumerator CreateAsyncEnumerator(IV8FastHostObject instance); + } +} diff --git a/ClearScript/V8/FastProxy/V8FastArg.cs b/ClearScript/V8/FastProxy/V8FastArg.cs new file mode 100644 index 000000000..985e087a7 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastArg.cs @@ -0,0 +1,373 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Numerics; +using Microsoft.ClearScript.V8.SplitProxy; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents an argument passed to a fast host object from script code. + /// + public readonly ref struct V8FastArg + { + private readonly V8Value.FastArg.Ptr pArg; + private readonly V8FastArgKind kind; + private readonly object obj; + + internal V8FastArg(V8ScriptEngine engine, V8Value.FastArg.Ptr pArg, V8FastArgKind kind) + { + this.pArg = pArg; + this.kind = kind; + obj = V8FastArgImpl.InitializeObject(engine, pArg.AsRef()); + } + + /// + /// Determines whether the argument is falsy. + /// + public bool IsFalsy => V8FastArgImpl.IsFalsy(pArg.AsRef(), obj); + + /// + /// Determines whether the argument is truthy. + /// + public bool IsTruthy => V8FastArgImpl.IsTruthy(pArg.AsRef(), obj); + + /// + /// Determines whether the argument is undefined. + /// + public bool IsUndefined => V8FastArgImpl.IsUndefined(pArg.AsRef(), obj); + + /// + /// Determines whether the argument is null. + /// + public bool IsNull => V8FastArgImpl.IsNull(pArg.AsRef(), obj); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out bool value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out char value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out sbyte value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out byte value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out short value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out ushort value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out int value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out uint value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out long value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out ulong value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out float value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out double value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out decimal value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the string value of the argument if possible. + /// + /// On return, the string value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out string value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the string value of the argument as a ReadOnlySpan<char> if possible. + /// + /// On return, the string value of the argument as a ReadOnlySpan<char> if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out ReadOnlySpan value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out DateTime value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument if possible. + /// + /// On return, the value of the argument if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out BigInteger value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets a nullable value of the given underlying type from the argument if possible. + /// + /// The underlying type of the nullable value to get. + /// On return, a nullable value of underlying type if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out T? value) where T : struct => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets a value of the given type from the argument if possible. + /// + /// The type of value to get. + /// On return, a value of type if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(out T value) => V8FastArgImpl.TryGet(pArg.AsRef(), obj, out value); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public bool GetBoolean(string name = null) => V8FastArgImpl.GetBoolean(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public char GetChar(string name = null) => V8FastArgImpl.GetChar(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public sbyte GetSByte(string name = null) => V8FastArgImpl.GetSByte(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public byte GetByte(string name = null) => V8FastArgImpl.GetByte(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public short GetInt16(string name = null) => V8FastArgImpl.GetInt16(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public ushort GetUInt16(string name = null) => V8FastArgImpl.GetUInt16(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public int GetInt32(string name = null) => V8FastArgImpl.GetInt32(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public uint GetUInt32(string name = null) => V8FastArgImpl.GetUInt32(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public long GetInt64(string name = null) => V8FastArgImpl.GetInt64(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public ulong GetUInt64(string name = null) => V8FastArgImpl.GetUInt64(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public float GetSingle(string name = null) => V8FastArgImpl.GetSingle(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public double GetDouble(string name = null) => V8FastArgImpl.GetDouble(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public decimal GetDecimal(string name = null) => V8FastArgImpl.GetDecimal(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the string value of the argument. + /// + /// An optional argument or property name. + /// The string value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public string GetString(string name = null) => V8FastArgImpl.GetString(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the string value of the argument as a ReadOnlySpan<char>. + /// + /// An optional argument or property name. + /// The string value of the argument as a ReadOnlySpan<char>. + /// + /// This method throws an exception if the operation fails. + /// + public ReadOnlySpan GetCharSpan(string name = null) => V8FastArgImpl.GetCharSpan(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public DateTime GetDateTime(string name = null) => V8FastArgImpl.GetDateTime(pArg.AsRef(), obj, kind, name); + + /// + /// Gets the value of the argument. + /// + /// An optional argument or property name. + /// The value of the argument. + /// + /// This method throws an exception if the operation fails. + /// + public BigInteger GetBigInteger(string name = null) => V8FastArgImpl.GetBigInteger(pArg.AsRef(), obj, kind, name); + + /// + /// Gets a nullable value of the given underlying type from the argument. + /// + /// The underlying type of the nullable value to get. + /// An optional argument or property name. + /// A nullable value of underlying type . + /// + /// This method throws an exception if the operation fails. + /// + public T? GetNullable(string name = null) where T : struct => V8FastArgImpl.GetNullable(pArg.AsRef(), obj, kind, name); + + /// + /// Gets a value of the given type from the argument. + /// + /// The type of value to get. + /// An optional argument or property name. + /// A value of type . + /// + /// This method throws an exception if the operation fails. + /// + public T Get(string name = null) => V8FastArgImpl.Get(pArg.AsRef(), obj, kind, name); + } +} diff --git a/ClearScript/V8/FastProxy/V8FastArgImpl.cs b/ClearScript/V8/FastProxy/V8FastArgImpl.cs new file mode 100644 index 000000000..4588904ac --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastArgImpl.cs @@ -0,0 +1,808 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8.SplitProxy; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + internal static class V8FastArgImpl + { + public static object InitializeObject(V8ScriptEngine engine, in V8Value.FastArg arg) + { + if (arg.IsUndefined()) + { + var importValue = engine.UndefinedImportValue; + return (importValue is not Undefined) ? importValue : Nonexistent.Value; + } + + if (arg.IsNull()) + { + return engine.NullImportValue ?? Nonexistent.Value; + } + + if (arg.TryGetV8Object(out var v8Object)) + { + return engine.MarshalToHost(v8Object, false); + } + + if (arg.TryGetHostObject(out var hostObject)) + { + return engine.MarshalToHost(hostObject, false); + } + + return Nonexistent.Value; + } + + public static bool IsFalsy(in V8Value.FastArg arg, object obj) + { + if (IsNull(arg, obj) || IsUndefined(arg, obj)) + { + return true; + } + + if (TryGet(arg, obj, out bool boolValue)) + { + return !boolValue; + } + + if (TryGet(arg, obj, out double doubleValue)) + { + return (doubleValue == 0) || double.IsNaN(doubleValue); + } + + if (TryGet(arg, obj, out BigInteger bigIntegerValue)) + { + return bigIntegerValue.IsZero; + } + + if (TryGet(arg, obj, out ReadOnlySpan charSpanValue)) + { + return charSpanValue.IsEmpty; + } + + return false; + } + + public static bool IsTruthy(in V8Value.FastArg arg, object obj) => !IsFalsy(arg, obj); + + public static bool IsUndefined(in V8Value.FastArg arg, object obj) => (arg.IsUndefined() && (obj is Nonexistent)) || (obj is Undefined); + + public static bool IsNull(in V8Value.FastArg arg, object obj) => (arg.IsNull() && (obj is Nonexistent)) || (obj is null); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out bool value) => arg.TryGetBoolean(out value) || TryGetFromObject(obj, out value, out _); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out char value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out sbyte value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out byte value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out short value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out ushort value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out int value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out uint value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out long value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out ulong value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out float value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out double value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out decimal value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out string value) => arg.TryGetString(out value) || TryGetFromObject(obj, out value, out _); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out ReadOnlySpan value) + { + if (arg.TryGetCharSpan(out value)) + { + return true; + } + + if (TryGetFromObject(obj, out string stringValue, out _)) + { + value = stringValue.AsSpan(); + return true; + } + + return false; + } + + public static bool TryGet(in V8Value.FastArg arg, object obj, out DateTime value) => arg.TryGetDateTime(out value) || TryGetFromObject(obj, out value, out _); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out BigInteger value) => TryGetNumber(arg, obj, out value); + + public static bool TryGet(in V8Value.FastArg arg, object obj, out T? value) where T : struct + { + if (IsNull(arg, obj) || IsUndefined(arg, obj)) + { + value = null; + return true; + } + + if (TryGet(arg, obj, out T structValue)) + { + value = structValue; + return true; + } + + value = null; + return false; + } + + public static bool TryGet(in V8Value.FastArg arg, object obj, out T value) + { + value = default; + var type = typeof(T); + + if (type == typeof(bool)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(char)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(sbyte)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(byte)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(short)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(ushort)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(int)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(uint)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(long)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(ulong)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(float)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(double)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(decimal)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(string)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(DateTime)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (type == typeof(BigInteger)) + { + return TryGet(arg, obj, out Unsafe.As(ref value)); + } + + if (Nullable.GetUnderlyingType(type) is {} underlyingType) + { + return NullableHelpers.TryGet(underlyingType, arg, obj, out value); + } + + if (TryGetFromObject(obj, out value, out var isObject)) + { + return true; + } + + if (isObject) + { + return false; + } + + { + if (arg.IsUndefined()) + { + if (Undefined.Value is T checkedValue) + { + value = checkedValue; + return true; + } + + return false; + } + } + + { + if (arg.TryGetBoolean(out var boolValue)) + { + if (boolValue is T checkedValue) + { + value = checkedValue; + return true; + } + + return false; + } + } + + { + if (arg.TryGetNumber(out var doubleValue)) + { + if (doubleValue is T checkedValue) + { + value = checkedValue; + return true; + } + + return false; + } + } + + { + if (arg.TryGetString(out var stringValue)) + { + if (stringValue is T checkedValue) + { + value = checkedValue; + return true; + } + + return false; + } + } + + { + if (arg.TryGetDateTime(out var dateTimeValue)) + { + if (dateTimeValue is T checkedValue) + { + value = checkedValue; + return true; + } + + return false; + } + } + + { + if (arg.TryGetBigInteger(out var bigIntegerValue)) + { + if (bigIntegerValue is T checkedValue) + { + value = checkedValue; + return true; + } + + return false; + } + } + + return false; + } + + public static bool GetBoolean(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out bool result), result, kind, name); + + public static char GetChar(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out char result), result, kind, name); + + public static sbyte GetSByte(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out sbyte result), result, kind, name); + + public static byte GetByte(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out byte result), result, kind, name); + + public static short GetInt16(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out short result), result, kind, name); + + public static ushort GetUInt16(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out ushort result), result, kind, name); + + public static int GetInt32(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out int result), result, kind, name); + + public static uint GetUInt32(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out uint result), result, kind, name); + + public static long GetInt64(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out long result), result, kind, name); + + public static ulong GetUInt64(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out ulong result), result, kind, name); + + public static float GetSingle(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out float result), result, kind, name); + + public static double GetDouble(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out double result), result, kind, name); + + public static decimal GetDecimal(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out decimal result), result, kind, name); + + public static string GetString(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => IsNull(arg, obj) ? null : ReturnOrThrow(TryGet(arg, obj, out string result), result, kind, name); + + public static ReadOnlySpan GetCharSpan(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out ReadOnlySpan result), result, kind, name); + + public static DateTime GetDateTime(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out DateTime result), result, kind, name); + + public static BigInteger GetBigInteger(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => ReturnOrThrow(TryGet(arg, obj, out BigInteger result), result, kind, name); + + public static T? GetNullable(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) where T : struct => ReturnOrThrow(TryGet(arg, obj, out T? result), result, kind, name); + + public static T Get(in V8Value.FastArg arg, object obj, V8FastArgKind kind, string name) => (IsNull(arg, obj) && (default(T) is null)) ? default : ReturnOrThrow(TryGet(arg, obj, out T result), result, kind, name); + + private static bool TryGetFromObject(object obj, out T value, out bool isObject) + { + isObject = obj is not Nonexistent; + if (isObject) + { + if (obj is T checkedValue) + { + value = checkedValue; + return true; + } + } + + value = default; + return false; + } + + private static bool TryGetNumber(in V8Value.FastArg arg, object obj, out T value) where T : struct + { + if (arg.TryGetNumber(out var doubleValue)) + { + return TryGetNumberFromDouble(doubleValue, out value); + } + + if (arg.TryGetBigInteger(out var bigIntegerValue)) + { + return TryGetNumberFromBigInteger(bigIntegerValue, out value); + } + + if (obj is not Nonexistent) + { + return TryGetNumberFromObject(obj, out value); + } + + value = default; + return false; + } + + private static bool TryGetNumberFromObject(object obj, out T value) where T : struct + { + if (obj is char charValue) + { + return TryGetNumberFromInt64(charValue, out value); + } + + if (obj is sbyte sbyteValue) + { + return TryGetNumberFromInt64(sbyteValue, out value); + } + + if (obj is byte byteValue) + { + return TryGetNumberFromInt64(byteValue, out value); + } + + if (obj is short shortValue) + { + return TryGetNumberFromInt64(shortValue, out value); + } + + if (obj is ushort ushortValue) + { + return TryGetNumberFromInt64(ushortValue, out value); + } + + if (obj is int intValue) + { + return TryGetNumberFromInt64(intValue, out value); + } + + if (obj is uint uintValue) + { + return TryGetNumberFromInt64(uintValue, out value); + } + + if (obj is long longValue) + { + return TryGetNumberFromInt64(longValue, out value); + } + + if (obj is ulong ulongValue) + { + return TryGetNumberFromUInt64(ulongValue, out value); + } + + if (obj is float floatValue) + { + return TryGetNumberFromDouble(floatValue, out value); + } + + if (obj is double doubleValue) + { + return TryGetNumberFromDouble(doubleValue, out value); + } + + if (obj is decimal decimalValue) + { + return TryGetNumberFromDecimal(decimalValue, out value); + } + + if (obj is BigInteger bigIntegerValue) + { + return TryGetNumberFromBigInteger(bigIntegerValue, out value); + } + + value = default; + return false; + } + + private static bool TryGetNumberFromInt64(long longValue, out T value) where T : struct + { + if (TryGetIntegerFromInt64(longValue, out value)) + { + return true; + } + + var type = typeof(T); + if (type == typeof(float)) + { + if ((longValue >= -MiscHelpers.MaxInt32InSingle) && (longValue <= MiscHelpers.MaxInt32InSingle)) + { + Unsafe.As(ref value) = longValue; + return true; + } + } + else if (type == typeof(double)) + { + if ((longValue >= -MiscHelpers.MaxInt64InDouble) && (longValue <= MiscHelpers.MaxInt64InDouble)) + { + Unsafe.As(ref value) = longValue; + return true; + } + } + else if (type == typeof(decimal)) + { + Unsafe.As(ref value) = longValue; + return true; + } + + return false; + } + + private static bool TryGetNumberFromUInt64(ulong ulongValue, out T value) where T : struct + { + if (TryGetIntegerFromUInt64(ulongValue, out value)) + { + return true; + } + + var type = typeof(T); + + if (type == typeof(float)) + { + if (ulongValue <= MiscHelpers.MaxInt32InSingle) + { + Unsafe.As(ref value) = ulongValue; + return true; + } + } + else if (type == typeof(double)) + { + if (ulongValue <= MiscHelpers.MaxInt64InDouble) + { + Unsafe.As(ref value) = ulongValue; + return true; + } + } + else if (type == typeof(decimal)) + { + Unsafe.As(ref value) = ulongValue; + return true; + } + + return false; + } + + private static bool TryGetNumberFromDouble(double doubleValue, out T value) where T : struct + { + if (Math.Abs(doubleValue) <= MiscHelpers.MaxInt64InDoubleAsDouble) + { + // ReSharper disable CompareOfFloatsByEqualityOperator + + var truncatedValue = Math.Truncate(doubleValue); + if ((truncatedValue == doubleValue) && TryGetIntegerFromInt64((long)truncatedValue, out value)) + { + return true; + } + + // ReSharper restore CompareOfFloatsByEqualityOperator + } + + return TryGetFloatingPointFromDouble(doubleValue, out value); + } + + private static bool TryGetNumberFromDecimal(decimal decimalValue, out T value) where T : struct + { + if (Math.Abs(decimalValue) <= MiscHelpers.MaxBigIntegerInDecimalAsDecimal) + { + // ReSharper disable CompareOfFloatsByEqualityOperator + + var truncatedValue = Math.Truncate(decimalValue); + if ((truncatedValue == decimalValue) && TryGetIntegerFromBigInteger((BigInteger)truncatedValue, out value)) + { + return true; + } + + // ReSharper restore CompareOfFloatsByEqualityOperator + } + + return TryGetFloatingPointFromDecimal(decimalValue, out value); + } + + private static bool TryGetNumberFromBigInteger(BigInteger bigIntegerValue, out T value) where T : struct + { + if (TryGetIntegerFromBigInteger(bigIntegerValue, out value)) + { + return true; + } + + var type = typeof(T); + if (type == typeof(float)) + { + if (BigInteger.Abs(bigIntegerValue) <= MiscHelpers.MaxInt32InSingle) + { + Unsafe.As(ref value) = (float)bigIntegerValue; + return true; + } + } + else if (type == typeof(double)) + { + if (BigInteger.Abs(bigIntegerValue) <= MiscHelpers.MaxInt64InDouble) + { + Unsafe.As(ref value) = (double)bigIntegerValue; + return true; + } + } + else if (type == typeof(decimal)) + { + if (BigInteger.Abs(bigIntegerValue) <= MiscHelpers.MaxBigIntegerInDecimal) + { + Unsafe.As(ref value) = (decimal)bigIntegerValue; + return true; + } + } + + return false; + } + + private static bool TryGetIntegerFromInt64(long longValue, out T value) where T : struct + { + value = default; + + var type = typeof(T); + if (type == typeof(char)) + { + if ((longValue >= char.MinValue) && (longValue <= char.MaxValue)) + { + Unsafe.As(ref value) = (char)longValue; + return true; + } + } + else if (type == typeof(sbyte)) + { + if ((longValue >= sbyte.MinValue) && (longValue <= sbyte.MaxValue)) + { + Unsafe.As(ref value) = (sbyte)longValue; + return true; + } + } + else if (type == typeof(byte)) + { + if ((longValue >= 0) && (longValue <= byte.MaxValue)) + { + Unsafe.As(ref value) = (byte)longValue; + return true; + } + } + else if (type == typeof(short)) + { + if ((longValue >= short.MinValue) && (longValue <= short.MaxValue)) + { + Unsafe.As(ref value) = (short)longValue; + return true; + } + } + else if (type == typeof(ushort)) + { + if ((longValue >= 0) && (longValue <= ushort.MaxValue)) + { + Unsafe.As(ref value) = (ushort)longValue; + return true; + } + } + else if (type == typeof(int)) + { + if ((longValue >= int.MinValue) && (longValue <= int.MaxValue)) + { + Unsafe.As(ref value) = (int)longValue; + return true; + } + } + else if (type == typeof(uint)) + { + if ((longValue >= 0) && (longValue <= uint.MaxValue)) + { + Unsafe.As(ref value) = (uint)longValue; + return true; + } + } + else if (type == typeof(long)) + { + Unsafe.As(ref value) = longValue; + return true; + } + else if (type == typeof(ulong)) + { + if (longValue >= 0) + { + Unsafe.As(ref value) = (ulong)longValue; + return true; + } + } + else if (type == typeof(BigInteger)) + { + Unsafe.As(ref value) = longValue; + return true; + } + + return false; + } + + private static bool TryGetIntegerFromUInt64(ulong ulongValue, out T value) where T : struct + { + if (ulongValue <= long.MaxValue) + { + return TryGetIntegerFromInt64((long)ulongValue, out value); + } + + value = default; + + if (typeof(T) == typeof(ulong)) + { + Unsafe.As(ref value) = ulongValue; + return true; + } + + if (typeof(T) == typeof(BigInteger)) + { + Unsafe.As(ref value) = ulongValue; + return true; + } + + return false; + } + + private static bool TryGetIntegerFromBigInteger(BigInteger bigIntegerValue, out T value) where T : struct + { + if ((bigIntegerValue >= long.MinValue) && (bigIntegerValue <= long.MaxValue)) + { + return TryGetIntegerFromInt64((long)bigIntegerValue, out value); + } + + if ((bigIntegerValue >= 0) && (bigIntegerValue <= ulong.MaxValue)) + { + return TryGetIntegerFromUInt64((ulong)bigIntegerValue, out value); + } + + value = default; + + if (typeof(T) == typeof(BigInteger)) + { + Unsafe.As(ref value) = bigIntegerValue; + return true; + } + + return false; + } + + private static bool TryGetFloatingPointFromDouble(double doubleValue, out T value) where T : struct + { + value = default; + var type = typeof(T); + + if (type == typeof(float)) + { + if ((doubleValue >= float.MinValue) && (doubleValue <= float.MaxValue)) + { + Unsafe.As(ref value) = (float)doubleValue; + return true; + } + + return false; + } + + if (type == typeof(double)) + { + Unsafe.As(ref value) = doubleValue; + return true; + } + + if (type == typeof(decimal)) + { + return MiscHelpers.Try(out Unsafe.As(ref value), static doubleValue => (decimal)doubleValue, doubleValue); + } + + return false; + } + + private static bool TryGetFloatingPointFromDecimal(decimal decimalValue, out T value) where T : struct + { + value = default; + var type = typeof(T); + + if (type == typeof(float)) + { + Unsafe.As(ref value) = (float)decimalValue; + return true; + } + + if (type == typeof(double)) + { + Unsafe.As(ref value) = (double)decimalValue; + return true; + } + + if (type == typeof(decimal)) + { + Unsafe.As(ref value) = decimalValue; + return true; + } + + return false; + } + + private static T ReturnOrThrow(bool succeeded, T result, V8FastArgKind kind, string name) => succeeded ? result : throw CreateArgumentException(kind, name); + + private static ReadOnlySpan ReturnOrThrow(bool succeeded, in ReadOnlySpan result, V8FastArgKind kind, string name) => succeeded ? result : throw CreateArgumentException(kind, name); + + private static ArgumentException CreateArgumentException(V8FastArgKind kind, string name) + { + return kind switch + { + V8FastArgKind.PropertyValue => new ArgumentException($"Invalid value specified for property '{name.ToNonNull("[unknown]")}'"), + V8FastArgKind.MethodArg => new ArgumentException($"Invalid argument specified for method parameter '{name.ToNonNull("[unnamed]")}'"), + _ => new ArgumentException($"Invalid argument specified for function parameter '{name.ToNonNull("[unnamed]")}'") + }; + } + } +} diff --git a/ClearScript/V8/FastProxy/V8FastArgKind.cs b/ClearScript/V8/FastProxy/V8FastArgKind.cs new file mode 100644 index 000000000..688e9d1d8 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastArgKind.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.V8.FastProxy +{ + internal enum V8FastArgKind + { + PropertyValue, + MethodArg, + FunctionArg + } +} diff --git a/ClearScript/V8/FastProxy/V8FastArgs.cs b/ClearScript/V8/FastProxy/V8FastArgs.cs new file mode 100644 index 000000000..0f5004394 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastArgs.cs @@ -0,0 +1,449 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Numerics; +using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8.SplitProxy; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a list of arguments passed to a fast host object from script code. + /// + public readonly ref struct V8FastArgs + { + private readonly ReadOnlySpan args; + private readonly V8FastArgKind argKind; + private readonly object[] objects; + + internal V8FastArgs(V8ScriptEngine engine, in ReadOnlySpan args, V8FastArgKind argKind) + { + this.args = args; + this.argKind = argKind; + objects = null; + + for (var index = 0; index < args.Length; index++) + { + var tempObject = V8FastArgImpl.InitializeObject(engine, args[index]); + if (tempObject is not Nonexistent) + { + EnsureObjects(ref objects, args.Length); + objects[index] = tempObject; + } + } + } + + /// + /// Gets the number of arguments in the list. + /// + public int Count => args.Length; + + /// + /// Determines whether the argument at the specified index is falsy. + /// + /// The argument index. + /// True if the argument at the specified index is falsy, false otherwise. + public bool IsFalsy(int index) => V8FastArgImpl.IsFalsy(args[index], GetObject(index)); + + /// + /// Determines whether the argument at the specified index is truthy. + /// + /// The argument index. + /// True if the argument at the specified index is truthy, false otherwise. + public bool IsTruthy(int index) => V8FastArgImpl.IsTruthy(args[index], GetObject(index)); + + /// + /// Determines whether the argument at the specified index is undefined. + /// + /// The argument index. + /// True if the argument at the specified index is undefined, false otherwise. + public bool IsUndefined(int index) => V8FastArgImpl.IsUndefined(args[index], GetObject(index)); + + /// + /// Determines whether the argument at the specified index is null. + /// + /// The argument index. + /// True if the argument at the specified index is undefined, false otherwise. + public bool IsNull(int index) => V8FastArgImpl.IsNull(args[index], GetObject(index)); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out bool value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out char value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out sbyte value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out byte value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out short value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out ushort value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out int value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out uint value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out long value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out ulong value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out float value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out double value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out decimal value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the string value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the string value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out string value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the string value of the argument at the specified index as a ReadOnlySpan<char> if possible. + /// + /// The argument index. + /// On return, the string value of the argument at the specified index as a ReadOnlySpan<char> if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out ReadOnlySpan value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out DateTime value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index if possible. + /// + /// The argument index. + /// On return, the value of the argument at the specified index if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out BigInteger value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets a nullable value of the given underlying type from the argument at the specified index if possible. + /// + /// The underlying type of the nullable value to get. + /// The argument index. + /// On return, a nullable value of underlying type if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out T? value) where T : struct => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets a value of the given type from the argument at the specified index if possible. + /// + /// The type of value to get. + /// The argument index. + /// On return, a value of type if the operation succeeded. + /// True if the operation succeeded, false otherwise. + public bool TryGet(int index, out T value) => V8FastArgImpl.TryGet(args[index], GetObject(index), out value); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public bool GetBoolean(int index, string name = null) => V8FastArgImpl.GetBoolean(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public char GetChar(int index, string name = null) => V8FastArgImpl.GetChar(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public sbyte GetSByte(int index, string name = null) => V8FastArgImpl.GetSByte(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public byte GetByte(int index, string name = null) => V8FastArgImpl.GetByte(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public short GetInt16(int index, string name = null) => V8FastArgImpl.GetInt16(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public ushort GetUInt16(int index, string name = null) => V8FastArgImpl.GetUInt16(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public int GetInt32(int index, string name = null) => V8FastArgImpl.GetInt32(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public uint GetUInt32(int index, string name = null) => V8FastArgImpl.GetUInt32(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public long GetInt64(int index, string name = null) => V8FastArgImpl.GetInt64(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public ulong GetUInt64(int index, string name = null) => V8FastArgImpl.GetUInt64(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public float GetSingle(int index, string name = null) => V8FastArgImpl.GetSingle(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public double GetDouble(int index, string name = null) => V8FastArgImpl.GetDouble(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public decimal GetDecimal(int index, string name = null) => V8FastArgImpl.GetDecimal(args[index], GetObject(index), argKind, name); + + /// + /// Gets the string value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The string value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public string GetString(int index, string name = null) => V8FastArgImpl.GetString(args[index], GetObject(index), argKind, name); + + /// + /// Gets the string value of the argument at the specified index as a ReadOnlySpan<char>. + /// + /// The argument index. + /// An optional argument or property name. + /// The string value of the argument at the specified index as a ReadOnlySpan<char>. + /// + /// This method throws an exception if the operation fails. + /// + public ReadOnlySpan GetCharSpan(int index, string name = null) => V8FastArgImpl.GetCharSpan(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public DateTime GetDateTime(int index, string name = null) => V8FastArgImpl.GetDateTime(args[index], GetObject(index), argKind, name); + + /// + /// Gets the value of the argument at the specified index. + /// + /// The argument index. + /// An optional argument or property name. + /// The value of the argument at the specified index. + /// + /// This method throws an exception if the operation fails. + /// + public BigInteger GetBigInteger(int index, string name = null) => V8FastArgImpl.GetBigInteger(args[index], GetObject(index), argKind, name); + + /// + /// Gets a nullable value of the given underlying type from the argument at the specified index. + /// + /// The underlying type of the nullable value to get. + /// The argument index. + /// An optional argument or property name. + /// A nullable value of underlying type . + /// + /// This method throws an exception if the operation fails. + /// + public T? GetNullable(int index, string name = null) where T : struct => V8FastArgImpl.GetNullable(args[index], GetObject(index), argKind, name); + + /// + /// Gets a value of the given type from the argument at the specified index. + /// + /// The type of value to get. + /// The argument index. + /// An optional argument or property name. + /// A value of type . + /// + /// This method throws an exception if the operation fails. + /// + public T Get(int index, string name = null) => V8FastArgImpl.Get(args[index], GetObject(index), argKind, name); + + private static void EnsureObjects(ref object[] objects, int count) + { + if (objects is null) + { + objects = new object[count]; + for (var index = 0; index < count; index++) + { + objects[index] = Nonexistent.Value; + } + } + } + + private object GetObject(int index) => (objects is not null) ? objects[index] : Nonexistent.Value; + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostDelegates.cs b/ClearScript/V8/FastProxy/V8FastHostDelegates.cs new file mode 100644 index 000000000..b186e54dd --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostDelegates.cs @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a method that prepares a fast host object configuration. + /// + /// The fast host object type. + /// The configuration associated with . + public delegate void V8FastHostObjectConfigurator(V8FastHostObjectConfiguration configuration) where TObject : IV8FastHostObject; + + /// + /// Represents a method that provides access to a field within a fast host object. + /// + /// The fast host object type. + /// The field type. + /// The object whose field to access. + /// A reference to the field. + public delegate ref TField V8FastHostFieldAccessor(TObject instance) where TObject : IV8FastHostObject; + + /// + /// Represents a method that gets the value of a fast host property. + /// + /// The fast host object type. + /// The object to search for the property. + /// On return, the property value if it was found. + public delegate void V8FastHostPropertyGetter(TObject instance, in V8FastResult value) where TObject : IV8FastHostObject; + + /// + /// Represents a method that sets the value of a fast host property. + /// + /// The fast host object type. + /// The object whose property to set. + /// The property value. + public delegate void V8FastHostPropertySetter(TObject instance, in V8FastArg value) where TObject : IV8FastHostObject; + + /// + /// Represents a method that invokes a fast host method. + /// + /// The fast host object type. + /// The object whose method to invoke. + /// The arguments to pass to the method. + /// On return, the method's return value. + public delegate void V8FastHostMethodInvoker(TObject instance, in V8FastArgs args, in V8FastResult result) where TObject : IV8FastHostObject; + + /// + /// Represents a method that invokes a fast host function. + /// + /// True to invoke the function as a constructor, false otherwise. + /// The arguments to pass to the function. + /// On return, the function's return value. + public delegate void V8FastHostFunctionInvoker(bool asConstructor, in V8FastArgs args, in V8FastResult result); +} diff --git a/ClearScript/V8/FastProxy/V8FastHostDynamicObject.cs b/ClearScript/V8/FastProxy/V8FastHostDynamicObject.cs new file mode 100644 index 000000000..9847df015 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostDynamicObject.cs @@ -0,0 +1,165 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Provides an implementation of with a shared configuration and support for dynamic properties. + /// + /// The fast host object type. + /// + /// This class is a generic base for fast host object classes derived from it via the + /// Curiously Recurring Template Pattern (CRTP). + /// It uses a shared instance of + /// for each unique type argument. Derived classes are therefore advised to use a static + /// constructor to invoke the method. + /// + public abstract class V8FastHostDynamicObject : V8FastHostObject, IV8FastHostDynamicProperties where TObject : V8FastHostDynamicObject + { + private Dictionary namedProperties; + private Dictionary indexedProperties; + + private Dictionary NamedProperties => namedProperties ?? (namedProperties = new Dictionary()); + + private Dictionary IndexedProperties => indexedProperties ?? (indexedProperties = new Dictionary()); + + /// + /// Initializes a new instance. + /// + protected V8FastHostDynamicObject() + { + // the help file builder (SHFB) insists on an empty constructor here + } + + /// + /// Prepares the shared configuration associated with . + /// + /// The configuration callback. + /// + /// Derived classes are advised to invoke this method from a static constructor. Once + /// prepared, a fast host object configuration cannot be modified. + /// + protected new static void Configure(V8FastHostObjectConfigurator configurator) + { + V8FastHostObject.Configure(configuration => + { + configuration.SetDynamicPropertiesGetter(static instance => instance); + configurator(configuration); + }); + } + + #region IV8FastHostDynamicProperties implementation + + /// + public IEnumerable DynamicPropertyNames => (IEnumerable)namedProperties?.Keys ?? Enumerable.Empty(); + + /// + public IEnumerable DynamicPropertyIndices => (IEnumerable)indexedProperties?.Keys ?? Enumerable.Empty(); + + /// + /// Gets the value of a named dynamic property. + /// + /// The name of the dynamic property to get. + /// On return, the value of the dynamic property if it was found. + public void GetDynamicProperty(string name, in V8FastResult value) + { + // the help file builder (SHFB) fails to inherit the documentation for this method + + if (namedProperties?.TryGetValue(name, out var tempValue) == true) + { + value.Set(tempValue); + } + } + + /// + /// Sets the value of a named dynamic property. + /// + /// The name of the dynamic property to set. + /// The property value. + public void SetDynamicProperty(string name, in V8FastArg value) + { + // the help file builder (SHFB) fails to inherit the documentation for this method + + if (value.IsNull) + { + NamedProperties[name] = null; + } + else if (value.TryGet(out object tempValue)) + { + NamedProperties[name] = tempValue; + } + else + { + throw new ArgumentException("Invalid property value", nameof(value)); + } + } + + /// + /// Gets the value of an indexed dynamic property. + /// + /// The index of the dynamic property to get. + /// On return, the value of the dynamic property if it was found. + public void GetDynamicProperty(int index, in V8FastResult value) + { + // the help file builder (SHFB) fails to inherit the documentation for this method + + if (indexedProperties?.TryGetValue(index, out var tempValue) == true) + { + value.Set(tempValue); + } + } + + /// + /// Sets the value of an indexed dynamic property. + /// + /// The index of the dynamic property to set. + /// The property value. + public void SetDynamicProperty(int index, in V8FastArg value) + { + // the help file builder (SHFB) fails to inherit the documentation for this method + + if (value.IsNull) + { + IndexedProperties[index] = null; + } + else if (value.TryGet(out object tempValue)) + { + IndexedProperties[index] = tempValue; + } + else + { + throw new ArgumentException("Invalid property value", nameof(value)); + } + } + + /// + public bool HasDynamicProperty(string name) + { + return namedProperties?.ContainsKey(name) == true; + } + + /// + public bool HasDynamicProperty(int index) + { + return indexedProperties?.ContainsKey(index) == true; + } + + /// + public void DeleteDynamicProperty(string name) + { + namedProperties?.Remove(name); + } + + /// + public void DeleteDynamicProperty(int index) + { + indexedProperties?.Remove(index); + } + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostFunction.cs b/ClearScript/V8/FastProxy/V8FastHostFunction.cs new file mode 100644 index 000000000..741b82443 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostFunction.cs @@ -0,0 +1,143 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Provides an implementation of with a private configuration. + /// + public sealed class V8FastHostFunction : V8FastHostFunctionOperations, IV8FastHostFunction + { + /// + /// Initializes a new instance. + /// + /// The function invocation callback. + public V8FastHostFunction(V8FastHostFunctionInvoker invoker) + : this(0, invoker) + { + } + + /// + /// Initializes a new instance with the specified name. + /// + /// The function name. + /// The function invocation callback. + public V8FastHostFunction(string name, V8FastHostFunctionInvoker invoker) + : this(name, 0, invoker) + { + } + + /// + /// Initializes a new instance with the specified required argument count. + /// + /// The required argument count for the function. + /// The function invocation callback. + public V8FastHostFunction(int requiredArgCount, V8FastHostFunctionInvoker invoker) + : this(requiredArgCount, null, invoker) + { + } + + /// + /// Initializes a new instance with the specified configuration callback. + /// + /// A callback for preparing the configuration associated with the instance. + /// The function invocation callback. + public V8FastHostFunction(V8FastHostObjectConfigurator configurator, V8FastHostFunctionInvoker invoker) + : this(0, configurator, invoker) + { + } + + /// + /// Initializes a new instance with the specified name and required argument count. + /// + /// The function name. + /// The required argument count for the function. + /// The function invocation callback. + public V8FastHostFunction(string name, int requiredArgCount, V8FastHostFunctionInvoker invoker) + : this(name, requiredArgCount, null, invoker) + { + } + + /// + /// Initializes a new instance with the specified name and configuration callback. + /// + /// The function name. + /// A callback for preparing the configuration associated with the instance. + /// The function invocation callback. + public V8FastHostFunction(string name, V8FastHostObjectConfigurator configurator, V8FastHostFunctionInvoker invoker) + : this(name, 0, configurator, invoker) + { + } + + /// + /// Initializes a new instance with the specified required argument count and configuration callback. + /// + /// The required argument count for the function. + /// A callback for preparing the configuration associated with the instance. + /// The function invocation callback. + public V8FastHostFunction(int requiredArgCount, V8FastHostObjectConfigurator configurator, V8FastHostFunctionInvoker invoker) + : this(null, requiredArgCount, configurator, invoker) + { + } + + /// + /// Initializes a new instance with the specified name, required argument count, and configuration callback. + /// + /// The function name. + /// The required argument count for the function. + /// A callback for preparing the configuration associated with the instance. + /// The function invocation callback. + public V8FastHostFunction(string name, int requiredArgCount, V8FastHostObjectConfigurator configurator, V8FastHostFunctionInvoker invoker) + : base(name, requiredArgCount, configurator, invoker) + { + } + + /// + /// Verifies that a fast host function was invoked as a function and not as a constructor. + /// + /// True if the function was invoked as a constructor, false otherwise. + /// + /// This is a simple utility method that checks and throws + /// an exception if it is true. It is intended for use within fast host function + /// invocation callbacks. + /// + public static void VerifyFunctionCall(bool asConstructor) + { + if (asConstructor) + { + throw new NotSupportedException("The function does not support constructor invocation"); + } + } + + /// + /// Verifies that a fast host function was invoked as a constructor and not as a function. + /// + /// True if the function was invoked as a constructor, false otherwise. + /// + /// This is a simple utility method that checks and throws + /// an exception if it is false. It is intended for use within fast host function + /// invocation callbacks. + /// + public static void VerifyConstructorCall(bool asConstructor) + { + if (!asConstructor) + { + throw new NotSupportedException("The function requires constructor invocation"); + } + } + + #region IV8FastHostFunction implementation + + IV8FastHostFunctionOperations IV8FastHostFunction.Operations => this; + + #endregion + + #region IV8FastHostObject implementation + + IV8FastHostObjectOperations IV8FastHostObject.Operations => this; + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostFunctionOperations.cs b/ClearScript/V8/FastProxy/V8FastHostFunctionOperations.cs new file mode 100644 index 000000000..ecc65f137 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostFunctionOperations.cs @@ -0,0 +1,128 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using Microsoft.ClearScript.Util; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Provides an implementation of based on a private configuration. + /// + /// The fast host function type. + public class V8FastHostFunctionOperations : V8FastHostObjectOperations, IV8FastHostFunctionOperations where TFunction : IV8FastHostFunction + { + private readonly string name; + private readonly int requiredArgCount; + private readonly V8FastHostFunctionInvoker invoker; + + /// + /// Initializes a new instance. + /// + /// The function invocation callback. + public V8FastHostFunctionOperations(V8FastHostFunctionInvoker invoker) + : this(0, invoker) + { + } + + /// + /// Initializes a new instance with the specified name. + /// + /// The function name. + /// The function invocation callback. + public V8FastHostFunctionOperations(string name, V8FastHostFunctionInvoker invoker) + : this(name, 0, invoker) + { + } + + /// + /// Initializes a new instance with the specified required argument count. + /// + /// The required argument count for the function. + /// The function invocation callback. + public V8FastHostFunctionOperations(int requiredArgCount, V8FastHostFunctionInvoker invoker) + : this(requiredArgCount, null, invoker) + { + } + + /// + /// Initializes a new instance with the specified configuration callback. + /// + /// A callback for preparing the configuration associated with the instance. + /// The function invocation callback. + public V8FastHostFunctionOperations(V8FastHostObjectConfigurator configurator, V8FastHostFunctionInvoker invoker) + : this(0, configurator, invoker) + { + } + + /// + /// Initializes a new instance with the specified name and required argument count. + /// + /// The function name. + /// The required argument count for the function. + /// The function invocation callback. + public V8FastHostFunctionOperations(string name, int requiredArgCount, V8FastHostFunctionInvoker invoker) + : this(name, requiredArgCount, null, invoker) + { + } + + /// + /// Initializes a new instance with the specified name and configuration callback. + /// + /// The function name. + /// A callback for preparing the configuration associated with the instance. + /// The function invocation callback. + public V8FastHostFunctionOperations(string name, V8FastHostObjectConfigurator configurator, V8FastHostFunctionInvoker invoker) + : this(name, 0, configurator, invoker) + { + } + + /// + /// Initializes a new instance with the specified required argument count and configuration callback. + /// + /// The required argument count for the function. + /// A callback for preparing the configuration associated with the instance. + /// The function invocation callback. + public V8FastHostFunctionOperations(int requiredArgCount, V8FastHostObjectConfigurator configurator, V8FastHostFunctionInvoker invoker) + : this(null, requiredArgCount, configurator, invoker) + { + } + + /// + /// Initializes a new instance with the specified name, required argument count, and configuration callback. + /// + /// The function name. + /// The required argument count for the function. + /// A callback for preparing the configuration associated with the instance. + /// The function invocation callback. + public V8FastHostFunctionOperations(string name, int requiredArgCount, V8FastHostObjectConfigurator configurator, V8FastHostFunctionInvoker invoker) + : base(configurator) + { + MiscHelpers.VerifyNonNullArgument(invoker, nameof(invoker)); + + this.name = name; + this.requiredArgCount = Math.Max(requiredArgCount, 0); + this.invoker = invoker; + } + + #region IV8FastHostFunctionOperations implementation + + void IV8FastHostFunctionOperations.Invoke(bool asConstructor, in V8FastArgs args, in V8FastResult result) + { + if (args.Count < requiredArgCount) + { + throw new ArgumentException($"Too few arguments specified for function '{name.ToNonNull("[unnamed]")}'"); + } + + invoker(asConstructor, args, result); + } + + #endregion + + #region IV8FastHostObjectOperations implementation + + string IV8FastHostObjectOperations.GetFriendlyName(IV8FastHostObject instance) => $"FastHostFunction:{name.ToNonNull("[unnamed]")}"; + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostItem.cs b/ClearScript/V8/FastProxy/V8FastHostItem.cs new file mode 100644 index 000000000..07d32cce1 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostItem.cs @@ -0,0 +1,535 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using Microsoft.ClearScript.JavaScript; +using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8.SplitProxy; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + internal sealed class V8FastHostItem : IHostItem + { + private static readonly Func getPropertyName = static (pName, length) => PropertyNamePool.GetOrAdd(pName, length); + + public V8ScriptEngine Engine { get; } + + public IV8FastHostObject Target { get; } + + public HostItemFlags Flags { get; } + + public bool IsInvocable => Target.Operations is IV8FastHostMethodOperations or IV8FastHostFunctionOperations; + + internal V8FastHostItem(V8ScriptEngine engine, IV8FastHostObject target, HostItemFlags flags) + { + Engine = engine; + Target = target; + Flags = flags; + } + + public static object Wrap(V8ScriptEngine engine, IV8FastHostObject target, HostItemFlags flags) + { + return engine.GetOrCreateFastHostItem(target, flags); + } + + public void GetProperty(StdString.Ptr pName, V8Value.FastResult.Ptr pValue, out bool isCacheable) + { + var ctx = (self: this, name: StdString.GetValue(pName, getPropertyName), pValue, isCacheable: false); + + Engine.HostInvoke( + static pCtx => + { + ref var ctx = ref pCtx.AsRef(); + var value = new V8FastResult(ctx.self.Engine, ctx.self.Flags, ctx.pValue); + + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + operations.GetProperty(target, ctx.name, value, out ctx.isCacheable); + } + else + { + throw new NotSupportedException("The object does not support property retrieval"); + } + }, + StructPtr.FromRef(ref ctx) + ); + + isCacheable = ctx.isCacheable; + } + + public void SetProperty(StdString.Ptr pName, V8Value.FastArg.Ptr pValue) + { + Engine.HostInvoke( + static ctx => + { + var value = new V8FastArg(ctx.self.Engine, ctx.pValue, V8FastArgKind.PropertyValue); + + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + operations.SetProperty(target, ctx.name, value); + } + else + { + throw new NotSupportedException("The object does not support property assignment"); + } + }, + (self: this, name: StdString.GetValue(pName, getPropertyName), pValue) + ); + } + + public V8FastHostPropertyFlags QueryProperty(StdString.Ptr pName) + { + return Engine.HostInvoke( + static ctx => + { + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + return operations.QueryProperty(target, ctx.name); + } + + return V8FastHostPropertyFlags.None; + }, + (self: this, name: StdString.GetValue(pName, getPropertyName)) + ); + } + + public bool DeleteProperty(StdString.Ptr pName) + { + return Engine.HostInvoke( + static ctx => + { + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + return operations.DeleteProperty(target, ctx.name); + } + + return true; + }, + (self: this, name: StdString.GetValue(pName, getPropertyName)) + ); + } + + public IEnumerable GetPropertyNames() + { + return Engine.HostInvoke( + static target => + { + if (target.Operations is {} operations) + { + return operations.GetPropertyNames(target); + } + + return Enumerable.Empty(); + }, + Target + ); + } + + public void GetProperty(int index, V8Value.FastResult.Ptr pValue) + { + Engine.HostInvoke( + static ctx => + { + var value = new V8FastResult(ctx.self.Engine, ctx.self.Flags, ctx.pValue); + + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + operations.GetProperty(target, ctx.index, value); + } + else + { + throw new NotSupportedException("The object does not support property retrieval"); + } + }, + (self: this, index, pValue) + ); + } + + public void SetProperty(int index, V8Value.FastArg.Ptr pValue) + { + Engine.HostInvoke( + static ctx => + { + var value = new V8FastArg(ctx.self.Engine, ctx.pValue, V8FastArgKind.PropertyValue); + + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + operations.SetProperty(target, ctx.index, value); + } + else + { + throw new NotSupportedException("The object does not support property assignment"); + } + }, + (self: this, index, pValue) + ); + } + + public V8FastHostPropertyFlags QueryProperty(int index) + { + return Engine.HostInvoke( + static ctx => + { + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + return operations.QueryProperty(target, ctx.index); + } + + return V8FastHostPropertyFlags.None; + }, + (self: this, index) + ); + } + + public bool DeleteProperty(int index) + { + return Engine.HostInvoke( + static ctx => + { + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + return operations.DeleteProperty(target, ctx.index); + } + + return true; + }, + (self: this, index) + ); + } + + public IEnumerable GetPropertyIndices() + { + return Engine.HostInvoke( + static target => + { + if (target.Operations is {} operations) + { + return operations.GetPropertyIndices(target); + } + + return Enumerable.Empty(); + }, + Target + ); + } + + public void Invoke(bool asConstructor, int argCount, V8Value.FastArg.Ptr pArgs, V8Value.FastResult.Ptr pResult) + { + Engine.HostInvoke( + static ctx => + { + var result = new V8FastResult(ctx.self.Engine, ctx.self.Flags, ctx.pResult); + + var target = ctx.self.Target; + if (target.Operations is IV8FastHostMethodOperations methodOperations) + { + if (ctx.asConstructor) + { + throw new NotSupportedException("The object does not support constructor invocation"); + } + + var args = new V8FastArgs(ctx.self.Engine, ctx.pArgs.ToSpan(ctx.argCount), V8FastArgKind.MethodArg); + + methodOperations.Invoke(args, result); + if (!result.IsSet) + { + result.SetUndefined(); + } + } + else if (target.Operations is IV8FastHostFunctionOperations functionOperations) + { + var args = new V8FastArgs(ctx.self.Engine, ctx.pArgs.ToSpan(ctx.argCount), V8FastArgKind.FunctionArg); + + functionOperations.Invoke(ctx.asConstructor, args, result); + if (!result.IsSet) + { + result.SetUndefined(); + } + } + else + { + throw new NotSupportedException("The object does not support invocation"); + } + }, + (self: this, asConstructor, argCount, pArgs, pResult) + ); + } + + public void CreateEnumerator(V8Value.FastResult.Ptr pResult) + { + Engine.HostInvoke( + static ctx => + { + var result = new V8FastResult(ctx.self.Engine, ctx.self.Flags, ctx.pResult); + + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + var enumerator = operations.CreateEnumerator(target); + if (enumerator is not null) + { + result.Set(new ScriptableEnumerator(enumerator)); + return; + } + } + + throw new NotSupportedException("The object is not enumerable"); + }, + (self: this, pResult) + ); + } + + public void CreateAsyncEnumerator(V8Value.FastResult.Ptr pResult) + { + Engine.HostInvoke( + static ctx => + { + var result = new V8FastResult(ctx.self.Engine, ctx.self.Flags, ctx.pResult); + + var target = ctx.self.Target; + if (target.Operations is {} operations) + { + var enumerator = operations.CreateAsyncEnumerator(target); + if (enumerator is not null) + { + result.Set(new ScriptableAsyncEnumerator(ctx.self.Engine, enumerator)); + return; + } + } + + throw new NotSupportedException("The object is not async-enumerable"); + }, + (self: this, pResult) + ); + } + + #region Object overrides + + public override string ToString() + { + if ((Target.Operations is {} operations) && (operations.GetFriendlyName(Target) is {} friendlyName)) + { + return $"[{friendlyName}]"; + } + + return $"[FastHostObject:{Target.GetFriendlyName(null)}]"; + } + + #endregion + + #region IScriptMarshalWrapper implementation + + ScriptEngine IScriptMarshalWrapper.Engine => Engine; + + public object Unwrap() => Target; + + #endregion + + #region Nested type: PropertyNamePool + + private static class PropertyNamePool + { + private static readonly ConcurrentDictionary pool = new(new Key.Comparer()); + + public static unsafe string GetOrAdd(IntPtr pName, int length) + { + if (!pool.TryGetValue(new Key(pName, length), out var name)) + { + name = new string((char*)pName, 0, length); + name = pool.GetOrAdd(new Key(name, length), name); + } + + return name; + } + + #region Nested type: Key + + private readonly struct Key + { + private readonly IntPtr pName; + private readonly string name; + private readonly int length; + + public Key(IntPtr pName, int length) + { + this.pName = pName; + name = null; + this.length = length; + } + + public Key(string name, int length) + { + pName = IntPtr.Zero; + this.name = name; + this.length = length; + } + + #region Nested type: Comparer + + public sealed class Comparer : IEqualityComparer + { + private static unsafe bool Equals(char* pLeftName, char* pRightName, int length) + { + for (var index = 0; index < length; index++) + { + if (pRightName[index] != pLeftName[index]) + { + return false; + } + } + + return true; + } + + private static unsafe bool Equals(char* pLeftName, string rightName, int length) + { + for (var index = 0; index < length; index++) + { + if (rightName[index] != pLeftName[index]) + { + return false; + } + } + + return true; + } + + private static unsafe bool Equals(string leftName, char* pRightName, int length) + { + for (var index = 0; index < length; index++) + { + if (pRightName[index] != leftName[index]) + { + return false; + } + } + + return true; + } + + private static bool Equals(string leftName, string rightName, int length) + { + for (var index = 0; index < length; index++) + { + if (rightName[index] != leftName[index]) + { + return false; + } + } + + return true; + } + + #region IEqualityComparer implementation + + unsafe bool IEqualityComparer.Equals(Key left, Key right) + { + if (right.length != left.length) + { + return false; + } + + if (left.name is null) + { + return (right.name is null) ? Equals((char*)left.pName, (char*)right.pName, left.length) : Equals((char*)left.pName, right.name, left.length); + } + + return (right.name is null) ? Equals(left.name, (char*)right.pName, left.length) : Equals(left.name, right.name, left.length); + } + + unsafe int IEqualityComparer.GetHashCode(Key key) + { + // DJB2 hash algorithm + + ulong hashCode = 5381; + + var length = key.length; + if (key.name is {} name) + { + for (var index = 0; index < length; index++) + { + hashCode = unchecked(((hashCode << 5) + hashCode) + name[index]); + } + } + else + { + var pName = (char*)key.pName; + for (var index = 0; index < length; index++) + { + hashCode = unchecked(((hashCode << 5) + hashCode) + pName[index]); + } + } + + return unchecked((int)hashCode); + } + + #endregion + } + + #endregion + } + + #endregion + } + + #endregion + + #region Nested type: ScriptableEnumerator + + private sealed class ScriptableEnumerator : V8FastHostObject + { + private readonly IV8FastEnumerator enumerator; + + static ScriptableEnumerator() + { + Configure(configuration => + { + configuration.AddPropertyGetter("ScriptableCurrent", static (ScriptableEnumerator instance, in V8FastResult value) => instance.enumerator.GetCurrent(value)); + configuration.AddMethodGetter("ScriptableMoveNext", static (ScriptableEnumerator instance, in V8FastArgs _, in V8FastResult result) => result.Set(instance.enumerator.MoveNext())); + configuration.AddMethodGetter("ScriptableDispose", static (ScriptableEnumerator instance, in V8FastArgs _, in V8FastResult _) => instance.enumerator.Dispose()); + }); + } + + public ScriptableEnumerator(IV8FastEnumerator enumerator) => this.enumerator = enumerator; + } + + #endregion + + #region Nested type: ScriptableAsyncEnumerator + + private sealed class ScriptableAsyncEnumerator : V8FastHostObject + { + private readonly V8ScriptEngine engine; + private readonly IV8FastAsyncEnumerator enumerator; + + static ScriptableAsyncEnumerator() + { + Configure(configuration => + { + configuration.AddPropertyGetter("ScriptableCurrent", static (ScriptableAsyncEnumerator instance, in V8FastResult value) => instance.enumerator.GetCurrent(value)); + configuration.AddMethodGetter("ScriptableMoveNextAsync", static (ScriptableAsyncEnumerator instance, in V8FastArgs _, in V8FastResult result) => result.Set(instance.enumerator.MoveNextAsync().ToPromise(instance.engine))); + configuration.AddMethodGetter("ScriptableDisposeAsync", static (ScriptableAsyncEnumerator instance, in V8FastArgs _, in V8FastResult result) => result.Set(instance.enumerator.DisposeAsync().ToPromise(instance.engine))); + }); + } + + public ScriptableAsyncEnumerator(V8ScriptEngine engine, IV8FastAsyncEnumerator enumerator) + { + this.engine = engine; + this.enumerator = enumerator; + } + } + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostMethod.cs b/ClearScript/V8/FastProxy/V8FastHostMethod.cs new file mode 100644 index 000000000..917d749fe --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostMethod.cs @@ -0,0 +1,72 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Provides an implementation of with a private configuration. + /// + /// The fast host object type that supports the method. + public sealed class V8FastHostMethod : V8FastHostMethodOperations>, IV8FastHostMethod where TObject : IV8FastHostObject + { + /// + /// Initializes a new instance. + /// + /// The object whose method the instance represents. + /// The method name. + /// The method invocation callback. + public V8FastHostMethod(TObject parent, string name, V8FastHostMethodInvoker invoker) + : this(parent, name, 0, invoker) + { + } + + /// + /// Initializes a new instance with the specified required argument count. + /// + /// The object whose method the instance represents. + /// The method name. + /// The required argument count for the method. + /// The method invocation callback. + public V8FastHostMethod(TObject parent, string name, int requiredArgCount, V8FastHostMethodInvoker invoker) + : this(parent, name, requiredArgCount, null, invoker) + { + } + + /// + /// Initializes a new instance with the specified configuration callback. + /// + /// The object whose method the instance represents. + /// The method name. + /// A callback for preparing the configuration associated with the instance. + /// The method invocation callback. + public V8FastHostMethod(TObject parent, string name, V8FastHostObjectConfigurator> configurator, V8FastHostMethodInvoker invoker) + : this(parent, name, 0, configurator, invoker) + { + } + + /// + /// Initializes a new instance with the specified required argument count and configuration callback. + /// + /// The object whose method the instance represents. + /// The method name. + /// The required argument count for the method. + /// A callback for preparing the configuration associated with the instance. + /// The method invocation callback. + public V8FastHostMethod(TObject parent, string name, int requiredArgCount, V8FastHostObjectConfigurator> configurator, V8FastHostMethodInvoker invoker) + : base(parent, name, requiredArgCount, configurator, invoker) + { + } + + #region IV8FastHostMethod implementation + + IV8FastHostMethodOperations IV8FastHostMethod.Operations => this; + + #endregion + + #region IV8FastHostObject implementation + + IV8FastHostObjectOperations IV8FastHostObject.Operations => this; + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostMethodOperations.cs b/ClearScript/V8/FastProxy/V8FastHostMethodOperations.cs new file mode 100644 index 000000000..aa5085c75 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostMethodOperations.cs @@ -0,0 +1,96 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using Microsoft.ClearScript.Util; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Provides an implementation of based on a private configuration. + /// + /// The fast host object type that supports the method. + /// The fast host method type. + public class V8FastHostMethodOperations : V8FastHostObjectOperations, IV8FastHostMethodOperations where TObject : IV8FastHostObject where TMethod : IV8FastHostMethod + { + private readonly TObject target; + private readonly string name; + private readonly int requiredArgCount; + private readonly V8FastHostMethodInvoker invoker; + + /// + /// Initializes a new instance. + /// + /// The object whose method the instance supports. + /// The method name. + /// The method invocation callback. + public V8FastHostMethodOperations(TObject target, string name, V8FastHostMethodInvoker invoker) + : this(target, name, 0, invoker) + { + } + + /// + /// Initializes a new instance with the specified required argument count. + /// + /// The object whose method the instance supports. + /// The method name. + /// The required argument count for the method. + /// The method invocation callback. + public V8FastHostMethodOperations(TObject target, string name, int requiredArgCount, V8FastHostMethodInvoker invoker) + : this(target, name, requiredArgCount, null, invoker) + { + } + + /// + /// Initializes a new instance with the specified configuration callback. + /// + /// The object whose method the instance supports. + /// The method name. + /// A callback for preparing the configuration associated with the instance. + /// The method invocation callback. + public V8FastHostMethodOperations(TObject target, string name, V8FastHostObjectConfigurator configurator, V8FastHostMethodInvoker invoker) + : this(target, name, 0, configurator, invoker) + { + } + + /// + /// Initializes a new instance with the specified required argument count and configuration callback. + /// + /// The object whose method the instance supports. + /// The method name. + /// The required argument count for the method. + /// A callback for preparing the configuration associated with the instance. + /// The method invocation callback. + public V8FastHostMethodOperations(TObject target, string name, int requiredArgCount, V8FastHostObjectConfigurator configurator, V8FastHostMethodInvoker invoker) + : base(configurator) + { + MiscHelpers.VerifyNonNullArgument(name, nameof(name)); + MiscHelpers.VerifyNonNullArgument(invoker, nameof(invoker)); + + this.target = target; + this.name = name; + this.requiredArgCount = Math.Max(requiredArgCount, 0); + this.invoker = invoker; + } + + #region IV8FastHostMethodOperations implementation + + void IV8FastHostMethodOperations.Invoke(in V8FastArgs args, in V8FastResult result) + { + if (args.Count < requiredArgCount) + { + throw new ArgumentException($"Too few arguments specified for method '{name}'"); + } + + invoker(target, args, result); + } + + #endregion + + #region IV8FastHostObjectOperations implementation + + string IV8FastHostObjectOperations.GetFriendlyName(IV8FastHostObject instance) => $"FastHostMethod:{name}"; + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostObject.cs b/ClearScript/V8/FastProxy/V8FastHostObject.cs new file mode 100644 index 000000000..9096021bc --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostObject.cs @@ -0,0 +1,45 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Provides an implementation of with a shared configuration. + /// + /// The fast host object type. + /// + /// This class is a generic base for fast host object classes derived from it via the + /// Curiously Recurring Template Pattern (CRTP). + /// It uses a shared instance of + /// for each unique type argument. Derived classes are therefore advised to use a static + /// constructor to invoke the method. + /// + public abstract class V8FastHostObject : IV8FastHostObject where TObject : V8FastHostObject + { + private static readonly V8FastHostObjectOperations operations = new(); + + /// + /// Initializes a new instance. + /// + protected V8FastHostObject() + { + // the help file builder (SHFB) insists on an empty constructor here + } + + /// + /// Prepares the shared configuration associated with . + /// + /// The configuration callback. + /// + /// Derived classes are advised to invoke this method from a static constructor. Once + /// prepared, a fast host object configuration cannot be modified. + /// + protected static void Configure(V8FastHostObjectConfigurator configurator) => operations.Configure(configurator); + + #region IV8FastHostObject implementation + + IV8FastHostObjectOperations IV8FastHostObject.Operations => operations; + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostObjectConfiguration.cs b/ClearScript/V8/FastProxy/V8FastHostObjectConfiguration.cs new file mode 100644 index 000000000..b31741c7e --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostObjectConfiguration.cs @@ -0,0 +1,309 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.ClearScript.Util; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a fast host object configuration. + /// + /// The fast host object type. + /// + /// This class provides a way to configure the scriptable capabilities of a fast host object or + /// type. It is not a required part of the interface between V8 and fast host objects, but it + /// is used extensively by ClearScript's fast host object implementation infrastructure. + /// + public abstract class V8FastHostObjectConfiguration where TObject : IV8FastHostObject + { + /// + /// Initializes a new instance. + /// + protected V8FastHostObjectConfiguration() + { + // the help file builder (SHFB) insists on an empty constructor here + } + + /// + /// Controls whether indexed properties are enumerable. + /// + public abstract bool EnumerateIndexedProperties { get; set; } + + /// + /// Adds a getter for a field-backed read-only property. + /// + /// The field type. + /// The property name. + /// A callback that provides access to the field. + /// + /// Properties configured by this method are not enumerable and cannot be assigned or + /// deleted. + /// + public void AddPropertyGetter(string name, V8FastHostFieldAccessor accessor) => AddPropertyGetter(name, accessor, V8FastHostPropertyFlags.None); + + /// + /// Adds a getter for a field-backed read-only property with the specified attributes. + /// + /// The field type. + /// The property name. + /// A callback that provides access to the field. + /// The attributes of the property configured by this method. + /// + /// In the context of this method, the only effective property attributes are + /// and + /// . Properties configured by this + /// method cannot be assigned or deleted. + /// + public void AddPropertyGetter(string name, V8FastHostFieldAccessor accessor, V8FastHostPropertyFlags flags) + { + MiscHelpers.VerifyNonNullArgument(accessor, nameof(accessor)); + AddPropertyGetter(name, (TObject instance, in V8FastResult value) => value.Set(accessor(instance)), flags); + } + + /// + /// Adds a getter for a read-only property. + /// + /// The property name. + /// A callback that gets the property value. + /// + /// Properties configured by this method are not enumerable and cannot be assigned or + /// deleted. + /// + public void AddPropertyGetter(string name, V8FastHostPropertyGetter getter) => AddPropertyGetter(name, getter, V8FastHostPropertyFlags.None); + + /// + /// Adds a getter for a read-only property with the specified attributes. + /// + /// The property name. + /// A callback that gets the property value. + /// The attributes of the property configured by this method. + /// + /// In the context of this method, the only effective property attributes are + /// and + /// . Properties configured by this + /// method cannot be assigned or deleted. + /// + public void AddPropertyGetter(string name, V8FastHostPropertyGetter getter, V8FastHostPropertyFlags flags) => AddPropertyAccessors(name, getter, null, flags); + + /// + /// Adds accessors for a field-backed property. + /// + /// The field type. + /// The property name. + /// A callback that provides access to the field. + /// + /// Properties configured by this method are not enumerable and cannot be deleted. + /// + public void AddPropertyAccessors(string name, V8FastHostFieldAccessor accessor) => AddPropertyAccessors(name, accessor, V8FastHostPropertyFlags.None); + + /// + /// Adds accessors for a field-backed property with the specified attributes. + /// + /// The field type. + /// The property name. + /// A callback that provides access to the field. + /// The attributes of the property configured by this method. + /// + /// In the context of this method, the only effective property attributes are + /// and + /// . Properties configured by this + /// method cannot be deleted. + /// + public void AddPropertyAccessors(string name, V8FastHostFieldAccessor accessor, V8FastHostPropertyFlags flags) + { + MiscHelpers.VerifyNonNullArgument(accessor, nameof(accessor)); + AddPropertyAccessors(name, (TObject instance, in V8FastResult value) => value.Set(accessor(instance)), (TObject instance, in V8FastArg value) => accessor(instance) = value.Get(name), flags); + } + + /// + /// Adds accessors for a property. + /// + /// The property name. + /// A callback that gets the property value. + /// A callback that sets the property value. + /// + /// Properties configured by this method are not enumerable and cannot be deleted. + /// + public void AddPropertyAccessors(string name, V8FastHostPropertyGetter getter, V8FastHostPropertySetter setter) => AddPropertyAccessors(name, getter, setter, V8FastHostPropertyFlags.None); + + /// + /// Adds accessors for a property with the specified attributes. + /// + /// The property name. + /// A callback that gets the property value. + /// A callback that sets the property value. + /// The attributes of the property configured by this method. + /// + /// In the context of this method, the only effective property attributes are + /// and + /// . Properties configured by this + /// method cannot be deleted. + /// + public abstract void AddPropertyAccessors(string name, V8FastHostPropertyGetter getter, V8FastHostPropertySetter setter, V8FastHostPropertyFlags flags); + + /// + /// Adds a getter for a method. + /// + /// The method name. + /// The method invocation callback. + /// + /// Properties configured by this method are not enumerable and cannot be assigned or + /// deleted. + /// + public void AddMethodGetter(string name, V8FastHostMethodInvoker invoker) => AddMethodGetter(name, 0, invoker); + + /// + /// Adds a getter for a method with the specified required argument count. + /// + /// The method name. + /// The required argument count for the method. + /// The method invocation callback. + /// + /// Properties configured by this method are not enumerable and cannot be assigned or + /// deleted. + /// + public void AddMethodGetter(string name, int requiredArgCount, V8FastHostMethodInvoker invoker) => AddMethodGetter(name, requiredArgCount, null, invoker); + + /// + /// Adds a getter for a method with the specified configuration callback. + /// + /// The method name. + /// A callback for preparing the method's configuration. + /// The method invocation callback. + /// + /// Properties configured by this method are not enumerable and cannot be assigned or + /// deleted. + /// + public void AddMethodGetter(string name, V8FastHostObjectConfigurator> configurator, V8FastHostMethodInvoker invoker) => AddMethodGetter(name, 0, configurator, invoker); + + /// + /// Adds a getter for a method with the specified required argument count and configuration callback. + /// + /// The method name. + /// The required argument count for the method. + /// A callback for preparing the method's configuration. + /// The method invocation callback. + /// + /// Properties configured by this method are not enumerable and cannot be assigned or + /// deleted. + /// + public abstract void AddMethodGetter(string name, int requiredArgCount, V8FastHostObjectConfigurator> configurator, V8FastHostMethodInvoker invoker); + + /// + /// Sets a callback that gets the dynamic properties of a instance. + /// + /// A callback that gets the dynamic properties of a instance. + public abstract void SetDynamicPropertiesGetter(Func getter); + + /// + /// Sets a callback that creates an enumerator for a instance in form. + /// + /// A callback that creates an enumerator for a instance in form. + public void SetEnumeratorFactory(Func factory) + { + MiscHelpers.VerifyNonNullArgument(factory, nameof(factory)); + SetEnumeratorFactory(instance => + { + var enumerator = factory(instance); + return (enumerator is not null) ? new FastEnumeratorOnEnumerator(enumerator) : null; + }); + } + + /// + /// Sets a callback that creates an enumerator for a instance in form. + /// + /// The enumerator's item type. + /// A callback that creates an enumerator for a instance in form. + public void SetEnumeratorFactory(Func> factory) + { + MiscHelpers.VerifyNonNullArgument(factory, nameof(factory)); + SetEnumeratorFactory(instance => + { + var enumerator = factory(instance); + return (enumerator is not null) ? new FastEnumeratorOnEnumerator(enumerator) : null; + }); + } + + /// + /// Sets a callback that creates an enumerator for a instance in form. + /// + /// A callback that creates an enumerator for a instance in form. + public abstract void SetEnumeratorFactory(Func factory); + + /// + /// Sets a callback that creates an asynchronous enumerator for a instance in form. + /// + /// The asynchronous enumerator's item type. + /// A callback that creates an asynchronous enumerator for a instance in form. + public void SetAsyncEnumeratorFactory(Func> factory) + { + MiscHelpers.VerifyNonNullArgument(factory, nameof(factory)); + SetAsyncEnumeratorFactory(instance => + { + var enumerator = factory(instance); + return (enumerator is not null) ? new FastAsyncEnumeratorOnAsyncEnumerator(enumerator) : null; + }); + } + + /// + /// Sets a callback that creates an asynchronous enumerator for a instance in form. + /// + /// A callback that creates an asynchronous enumerator for a instance in form. + public abstract void SetAsyncEnumeratorFactory(Func factory); + + #region Nested type: FastEnumeratorOnEnumerator + + private sealed class FastEnumeratorOnEnumerator : IV8FastEnumerator + { + private readonly IEnumerator enumerator; + + public FastEnumeratorOnEnumerator(IEnumerator enumerator) => this.enumerator = enumerator; + + public void GetCurrent(in V8FastResult item) => item.Set(enumerator.Current); + + public bool MoveNext() => enumerator.MoveNext(); + + public void Dispose() => (enumerator as IDisposable)?.Dispose(); + } + + #endregion + + #region Nested type: FastEnumeratorOnEnumerator + + private sealed class FastEnumeratorOnEnumerator : IV8FastEnumerator + { + private readonly IEnumerator enumerator; + + public FastEnumeratorOnEnumerator(IEnumerator enumerator) => this.enumerator = enumerator; + + public void GetCurrent(in V8FastResult item) => item.Set(enumerator.Current); + + public bool MoveNext() => enumerator.MoveNext(); + + public void Dispose() => enumerator.Dispose(); + } + + #endregion + + #region Nested type: FastAsyncEnumeratorOnAsyncEnumerator + + private sealed class FastAsyncEnumeratorOnAsyncEnumerator : IV8FastAsyncEnumerator + { + private readonly IAsyncEnumerator enumerator; + + public FastAsyncEnumeratorOnAsyncEnumerator(IAsyncEnumerator enumerator) => this.enumerator = enumerator; + + public void GetCurrent(in V8FastResult item) => item.Set(enumerator.Current); + + public ValueTask MoveNextAsync() => enumerator.MoveNextAsync(); + + public ValueTask DisposeAsync() => enumerator.DisposeAsync(); + } + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostObjectOperations.cs b/ClearScript/V8/FastProxy/V8FastHostObjectOperations.cs new file mode 100644 index 000000000..eeed4f744 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostObjectOperations.cs @@ -0,0 +1,395 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.ClearScript.Util; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Provides an implementation of based on a private configuration. + /// + /// The fast host object type. + public class V8FastHostObjectOperations : IV8FastHostObjectOperations where TObject : IV8FastHostObject + { + private readonly Configuration configuration; + + /// + /// Initializes a new instance. + /// + public V8FastHostObjectOperations() + : this(null) + { + } + + /// + /// Initializes a new instance with the specified configuration callback. + /// + /// A callback for preparing the configuration associated with the instance. + public V8FastHostObjectOperations(V8FastHostObjectConfigurator configurator) + { + configuration = new Configuration(); + if (configurator is not null) + { + Configure(configurator); + } + } + + /// + /// Prepares the configuration associated with the instance. + /// + /// A callback for preparing the configuration associated with the instance. + /// + /// Once prepared, a fast host object configuration cannot be modified. + /// + public void Configure(V8FastHostObjectConfigurator configurator) => configuration.Configure(configurator); + + #region IV8FastHostObjectOperations implementation + + string IV8FastHostObjectOperations.GetFriendlyName(IV8FastHostObject instance) => $"FastHostObject:{typeof(TObject).GetFriendlyName()}"; + + void IV8FastHostObjectOperations.GetProperty(IV8FastHostObject instance, string name, in V8FastResult value, out bool isCacheable) => configuration.GetProperty(instance, name, value, out isCacheable); + + void IV8FastHostObjectOperations.SetProperty(IV8FastHostObject instance, string name, in V8FastArg value) => configuration.SetProperty(instance, name, value); + + V8FastHostPropertyFlags IV8FastHostObjectOperations.QueryProperty(IV8FastHostObject instance, string name) => configuration.QueryProperty(instance, name); + + bool IV8FastHostObjectOperations.DeleteProperty(IV8FastHostObject instance, string name) => configuration.DeleteProperty(instance, name); + + IEnumerable IV8FastHostObjectOperations.GetPropertyNames(IV8FastHostObject instance) => configuration.GetPropertyNames(instance); + + void IV8FastHostObjectOperations.GetProperty(IV8FastHostObject instance, int index, in V8FastResult value) => configuration.GetProperty(instance, index, value); + + void IV8FastHostObjectOperations.SetProperty(IV8FastHostObject instance, int index, in V8FastArg value) => configuration.SetProperty(instance, index, value); + + V8FastHostPropertyFlags IV8FastHostObjectOperations.QueryProperty(IV8FastHostObject instance, int index) => configuration.QueryProperty(instance, index); + + bool IV8FastHostObjectOperations.DeleteProperty(IV8FastHostObject instance, int index) => configuration.DeleteProperty(instance, index); + + IEnumerable IV8FastHostObjectOperations.GetPropertyIndices(IV8FastHostObject instance) => configuration.GetPropertyIndices(instance); + + IV8FastEnumerator IV8FastHostObjectOperations.CreateEnumerator(IV8FastHostObject instance) => configuration.CreateEnumerator(instance); + + IV8FastAsyncEnumerator IV8FastHostObjectOperations.CreateAsyncEnumerator(IV8FastHostObject instance) => configuration.CreateAsyncEnumerator(instance); + + #endregion + + #region Nested type: Configuration + + private sealed class Configuration : V8FastHostObjectConfiguration + { + private readonly Dictionary getter, V8FastHostPropertySetter setter, V8FastHostPropertyFlags flags)> propertyMap = new(); + private readonly IEnumerable propertyNames; + private Func dynamicPropertiesGetter; + private Func enumeratorFactory; + private Func asyncEnumeratorFactory; + private bool enumerateIndexedProperties; + private int state; + + public Configuration() + { + propertyNames = propertyMap.Keys; + } + + public void Configure(V8FastHostObjectConfigurator configurator) + { + MiscHelpers.VerifyNonNullArgument(configurator, nameof(configurator)); + + var currentState = Interlocked.CompareExchange(ref state, State.Configuring, State.Unconfigured); + switch (currentState) + { + case State.Configuring: + throw new InvalidOperationException("Configuration is already in progress"); + + case State.Configured: + throw new InvalidOperationException("Configuration is already complete"); + } + + try + { + configurator(this); + } + catch (Exception) + { + state = State.Unconfigured; + throw; + } + + if ((enumeratorFactory is not null) && (asyncEnumeratorFactory is null)) + { + asyncEnumeratorFactory = instance => + { + var enumerator = enumeratorFactory(instance); + return (enumerator is not null) ? new FastAsyncEnumeratorOnFastEnumerator(enumerator) : null; + }; + } + + state = State.Configured; + } + + public void GetProperty(IV8FastHostObject instance, string name, in V8FastResult value, out bool isCacheable) + { + if ((state == State.Configured) && propertyMap.TryGetValue(name, out var entry)) + { + entry.getter((TObject)instance, value); + isCacheable = (entry.setter is null) && entry.flags.HasAllFlags(V8FastHostPropertyFlags.Cacheable); + } + else if (dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) + { + dynamicProperties.GetDynamicProperty(name, value); + isCacheable = false; + } + else + { + isCacheable = false; + } + } + + public void SetProperty(IV8FastHostObject instance, string name, in V8FastArg value) + { + if ((state == State.Configured) && propertyMap.TryGetValue(name, out var entry)) + { + if (entry.setter is {} setter) + { + setter((TObject)instance, value); + } + else + { + throw new NotSupportedException($"The '{name}' property is read-only"); + } + } + else if (dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) + { + dynamicProperties.SetDynamicProperty(name, value); + } + else + { + throw new NotSupportedException("The object does not support dynamic properties"); + } + } + + public V8FastHostPropertyFlags QueryProperty(IV8FastHostObject instance, string name) + { + if ((state == State.Configured) && propertyMap.TryGetValue(name, out var entry)) + { + return entry.flags; + } + + if ((dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) && dynamicProperties.HasDynamicProperty(name)) + { + return V8FastHostPropertyFlags.Available | V8FastHostPropertyFlags.Enumerable | V8FastHostPropertyFlags.Writable | V8FastHostPropertyFlags.Deletable; + } + + return V8FastHostPropertyFlags.None; + } + + public bool DeleteProperty(IV8FastHostObject instance, string name) + { + if ((state == State.Configured) && propertyMap.ContainsKey(name)) + { + return false; + } + + if (dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) + { + dynamicProperties.DeleteDynamicProperty(name); + } + + return true; + } + + public IEnumerable GetPropertyNames(IV8FastHostObject instance) + { + IEnumerable names = null; + + if (state == State.Configured) + { + names = propertyNames; + } + + if (dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) + { + var dynamicPropertyNames = dynamicProperties.DynamicPropertyNames; + names = (names is null) ? dynamicPropertyNames : names.Concat(dynamicPropertyNames); + } + + return names ?? Enumerable.Empty(); + } + + public void GetProperty(IV8FastHostObject instance, int index, in V8FastResult value) + { + if (dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) + { + dynamicProperties.GetDynamicProperty(index, value); + } + } + + public void SetProperty(IV8FastHostObject instance, int index, in V8FastArg value) + { + if (dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) + { + dynamicProperties.SetDynamicProperty(index, value); + } + else + { + throw new NotSupportedException("The object does not support indexed properties"); + } + } + + public V8FastHostPropertyFlags QueryProperty(IV8FastHostObject instance, int index) + { + if ((dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) && dynamicProperties.HasDynamicProperty(index)) + { + var flags = V8FastHostPropertyFlags.Available | V8FastHostPropertyFlags.Writable | V8FastHostPropertyFlags.Deletable; + if (EnumerateIndexedProperties) + { + flags |= V8FastHostPropertyFlags.Enumerable; + } + + return flags; + } + + return V8FastHostPropertyFlags.None; + } + + public bool DeleteProperty(IV8FastHostObject instance, int index) + { + if (dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) + { + dynamicProperties.DeleteDynamicProperty(index); + } + + return true; + } + + public IEnumerable GetPropertyIndices(IV8FastHostObject instance) + { + if (dynamicPropertiesGetter?.Invoke((TObject)instance) is {} dynamicProperties) + { + return dynamicProperties.DynamicPropertyIndices; + } + + return Enumerable.Empty(); + } + + public IV8FastEnumerator CreateEnumerator(IV8FastHostObject instance) + { + return enumeratorFactory?.Invoke((TObject)instance); + } + + public IV8FastAsyncEnumerator CreateAsyncEnumerator(IV8FastHostObject instance) + { + return asyncEnumeratorFactory?.Invoke((TObject)instance); + } + + private void VerifyConfiguring() + { + if (state != State.Configuring) + { + throw new InvalidOperationException("Configuration is not in progress"); + } + } + + #region V8FastHostObjectConfiguration overrides + + public override bool EnumerateIndexedProperties + { + get => enumerateIndexedProperties; + set + { + VerifyConfiguring(); + enumerateIndexedProperties = value; + } + } + + public override void AddPropertyAccessors(string name, V8FastHostPropertyGetter getter, V8FastHostPropertySetter setter, V8FastHostPropertyFlags flags) + { + MiscHelpers.VerifyNonNullArgument(name, nameof(name)); + MiscHelpers.VerifyNonNullArgument(getter, nameof(getter)); + + VerifyConfiguring(); + + var addFlags = V8FastHostPropertyFlags.Available; + var removeFlags = V8FastHostPropertyFlags.Deletable; + + if (setter is not null) + { + addFlags |= V8FastHostPropertyFlags.Writable; + } + else + { + removeFlags |= V8FastHostPropertyFlags.Writable; + } + + flags |= addFlags; + flags &= ~removeFlags; + + propertyMap.Add(name, (getter, setter, flags)); + } + + public override void AddMethodGetter(string name, int requiredArgCount, V8FastHostObjectConfigurator> configurator, V8FastHostMethodInvoker invoker) + { + MiscHelpers.VerifyNonNullArgument(invoker, nameof(invoker)); + AddPropertyGetter(name, (TObject instance, in V8FastResult result) => result.Set(new V8FastHostMethod(instance, name, requiredArgCount, configurator, invoker)), V8FastHostPropertyFlags.Cacheable); + } + + public override void SetDynamicPropertiesGetter(Func getter) + { + VerifyConfiguring(); + dynamicPropertiesGetter = getter; + } + + public override void SetEnumeratorFactory(Func factory) + { + VerifyConfiguring(); + enumeratorFactory = factory; + } + + public override void SetAsyncEnumeratorFactory(Func factory) + { + VerifyConfiguring(); + asyncEnumeratorFactory = factory; + } + + #endregion + + #region Nested type: State + + private static class State + { + public const int Unconfigured = 0; + public const int Configuring = 1; + public const int Configured = 2; + } + + #endregion + + #region Nested type: FastAsyncEnumeratorOnFastEnumerator + + private sealed class FastAsyncEnumeratorOnFastEnumerator : IV8FastAsyncEnumerator + { + private readonly IV8FastEnumerator enumerator; + + public FastAsyncEnumeratorOnFastEnumerator(IV8FastEnumerator enumerator) => this.enumerator = enumerator; + + public void GetCurrent(in V8FastResult item) => enumerator.GetCurrent(item); + + public ValueTask MoveNextAsync() => new(enumerator.MoveNext()); + + public ValueTask DisposeAsync() + { + enumerator.Dispose(); + return default; + } + } + + #endregion + } + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastHostPropertyFlags.cs b/ClearScript/V8/FastProxy/V8FastHostPropertyFlags.cs new file mode 100644 index 000000000..4628bed86 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastHostPropertyFlags.cs @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Defines fast host property attributes. + /// + [Flags] + public enum V8FastHostPropertyFlags + { + // IMPORTANT: maintain bitwise equivalence with native enum FastHostObjectUtil::PropertyFlags + + /// + /// Indicates that no attributes are present. + /// + None = 0, + + /// + /// Indicates that the property exists. + /// + Available = 0x00000001, + + /// + /// Indicates that the property value is a constant that may be cached for faster retrieval. + /// + Cacheable = 0x00000002, + + /// + /// Indicates that the property is enumerable via mechanisms such as for...in. + /// + Enumerable = 0x00000004, + + /// + /// Indicates that the property can be assigned. + /// + Writable = 0x00000008, + + /// + /// Indicates that the property can be deleted. + /// + Deletable = 0x00000010 + } + + internal static class V8FastHostPropertyFlagsHelpers + { + public static bool HasAllFlags(this V8FastHostPropertyFlags value, V8FastHostPropertyFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this V8FastHostPropertyFlags value, V8FastHostPropertyFlags flags) => (value & flags) != 0; + } +} diff --git a/ClearScript/V8/FastProxy/V8FastProxyHelpers.cs b/ClearScript/V8/FastProxy/V8FastProxyHelpers.cs new file mode 100644 index 000000000..a296bdf89 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastProxyHelpers.cs @@ -0,0 +1,71 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Runtime.CompilerServices; +using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8.SplitProxy; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + internal static class NullableHelpers + { + private static readonly ConditionalWeakTable> table = new(); + + public static bool TryGet(Type underlyingType, in V8Value.FastArg arg, object obj, out TNullable value) + { + return GetImpl(underlyingType).TryGet(arg, obj, out value); + } + + public static void Set(Type underlyingType, in V8FastResult result, ref TNullable value) + { + GetImpl(underlyingType).Set(result, ref value); + } + + private static IImpl GetImpl(Type underlyingType) + { + lock (table) + { + var holder = table.GetOrCreateValue(underlyingType); + return holder.Value ?? (holder.Value = CreateImpl(underlyingType)); + } + } + + private static IImpl CreateImpl(Type underlyingType) + { + return (IImpl)typeof(Impl<>).MakeGenericType(underlyingType).CreateInstance(); + } + + #region Nested type: IImpl + + private interface IImpl + { + bool TryGet(in V8Value.FastArg arg, object obj, out TNullable value); + void Set(in V8FastResult result, ref TNullable value); + } + + #endregion + + #region Nested type: Impl + + private sealed class Impl : IImpl where TUnderlying : struct + { + #region IImpl implementation + + bool IImpl.TryGet(in V8Value.FastArg arg, object obj, out TNullable value) + { + value = default; + return V8FastArgImpl.TryGet(arg, obj, out Unsafe.As(ref value)); + } + + void IImpl.Set(in V8FastResult result, ref TNullable value) + { + result.SetNullable(Unsafe.As(ref value)); + } + + #endregion + } + + #endregion + } +} diff --git a/ClearScript/V8/FastProxy/V8FastResult.cs b/ClearScript/V8/FastProxy/V8FastResult.cs new file mode 100644 index 000000000..1e0c12a36 --- /dev/null +++ b/ClearScript/V8/FastProxy/V8FastResult.cs @@ -0,0 +1,497 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Numerics; +using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8.SplitProxy; + +namespace Microsoft.ClearScript.V8.FastProxy +{ + /// + /// Represents a result returned from a fast host property getter, method, or function. + /// + public readonly ref struct V8FastResult + { + private readonly V8ScriptEngine engine; + private readonly HostItemFlags flags; + private readonly V8Value.FastResult.Ptr pResult; + + internal V8FastResult(V8ScriptEngine engine, HostItemFlags flags, V8Value.FastResult.Ptr pResult) + { + this.engine = engine; + this.flags = flags; + this.pResult = pResult; + } + + /// + /// Determines whether the result has been set. + /// + /// + /// Once set, a result cannot be modified. + /// + public bool IsSet => !pResult.AsRef().IsNonexistent; + + /// + /// Sets the result to undefined. + /// + public void SetUndefined() + { + VerifyUnset(); + pResult.AsRef().SetUndefined(); + } + + /// + /// Sets the result to null. + /// + public void SetNull() + { + SetFromObject(engine.PrepareResult(null, typeof(object), ScriptMemberFlags.None, false)); + } + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(bool value) + { + VerifyUnset(); + pResult.AsRef().SetBoolean(value); + } + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(char value) => SetNumber(value); + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(sbyte value) => SetNumber(value); + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(byte value) => SetNumber(value); + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(short value) => SetNumber(value); + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(ushort value) => SetNumber(value); + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(int value) => SetNumber(value); + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(uint value) => SetNumber(value); + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(long value) + { + if (engine.Flags.HasAllFlags(V8ScriptEngineFlags.MarshalAllInt64AsBigInt)) + { + Set((BigInteger)value); + } + else if (engine.Flags.HasAllFlags(V8ScriptEngineFlags.MarshalUnsafeInt64AsBigInt) && ((value < -MiscHelpers.MaxInt64InDouble) || (value > MiscHelpers.MaxInt64InDouble))) + { + Set((BigInteger)value); + } + else + { + SetNumber(value); + } + } + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(ulong value) + { + if (engine.Flags.HasAllFlags(V8ScriptEngineFlags.MarshalAllInt64AsBigInt)) + { + Set((BigInteger)value); + } + else if (engine.Flags.HasAllFlags(V8ScriptEngineFlags.MarshalUnsafeInt64AsBigInt) && (value > MiscHelpers.MaxInt64InDouble)) + { + Set((BigInteger)value); + } + else + { + SetNumber(value); + } + } + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(float value) => SetNumber(value); + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(double value) => SetNumber(value); + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(decimal value) => SetNumber((double)value); + + /// + /// Sets the result to a string value. + /// + /// The string value to assign to the result. + public void Set(string value) + { + VerifyUnset(); + if (value is not null) + { + pResult.AsRef().SetString(value); + } + else + { + SetNull(); + } + } + + /// + /// Sets the result to a string value, specified as a ReadOnlySpan<char>. + /// + /// The string value to assign to the result, specified as a ReadOnlySpan<char>. + public void Set(ReadOnlySpan value) + { + VerifyUnset(); + pResult.AsRef().SetString(value); + } + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(DateTime value) + { + if (engine.Flags.HasAllFlags(V8ScriptEngineFlags.EnableDateTimeConversion)) + { + VerifyUnset(); + pResult.AsRef().SetDateTime(value); + } + else + { + SetFromObject(value); + } + } + + /// + /// Sets the result to a value. + /// + /// The value to assign to the result. + public void Set(BigInteger value) + { + VerifyUnset(); + pResult.AsRef().SetBigInteger(value); + } + + /// + /// Sets the result to a nullable value of the given underlying type. + /// + /// The underlying type of the nullable value to assign. + /// A nullable value of underlying type to assign to the result. + public void Set(T? value) where T : struct => SetNullable(value); + + /// + /// Sets the result to a value of the given type. + /// + /// The type of value to assign to the result. + /// A value of type to assign to the result. + public void Set(T value) + { + var type = typeof(T); + if (type == typeof(Undefined)) + { + if (value is Undefined) + { + SetUndefined(); + } + } + else if (type == typeof(bool)) + { + if (value is bool boolValue) + { + Set(boolValue); + } + } + else if (type == typeof(char)) + { + if (value is char charValue) + { + Set(charValue); + } + } + else if (type == typeof(sbyte)) + { + if (value is sbyte sbyteValue) + { + Set(sbyteValue); + } + } + else if (type == typeof(byte)) + { + if (value is byte byteValue) + { + Set(byteValue); + } + } + else if (type == typeof(short)) + { + if (value is short shortValue) + { + Set(shortValue); + } + } + else if (type == typeof(ushort)) + { + if (value is ushort ushortValue) + { + Set(ushortValue); + } + } + else if (type == typeof(int)) + { + if (value is int intValue) + { + Set(intValue); + } + } + else if (type == typeof(uint)) + { + if (value is uint uintValue) + { + Set(uintValue); + } + } + else if (type == typeof(long)) + { + if (value is long longValue) + { + Set(longValue); + } + } + else if (type == typeof(ulong)) + { + if (value is ulong ulongValue) + { + Set(ulongValue); + } + } + else if (type == typeof(float)) + { + if (value is float floatValue) + { + Set(floatValue); + } + } + else if (type == typeof(double)) + { + if (value is double doubleValue) + { + Set(doubleValue); + } + } + else if (type == typeof(decimal)) + { + if (value is decimal decimalValue) + { + Set(decimalValue); + } + } + else if (type == typeof(string)) + { + if (value is string stringValue) + { + Set(stringValue); + } + else if (value is null) + { + SetNull(); + } + } + else if (type == typeof(DateTime)) + { + if (value is DateTime dateTimeValue) + { + Set(dateTimeValue); + } + } + else if (type == typeof(BigInteger)) + { + if (value is BigInteger bigIntegerValue) + { + Set(bigIntegerValue); + } + } + else if (Nullable.GetUnderlyingType(type) is {} underlyingType) + { + NullableHelpers.Set(underlyingType, this, ref value); + } + else + { + SetFromObject(engine.PrepareResult(value, ScriptMemberFlags.None, false)); + } + } + + internal void SetNullable(in T? value) where T : struct + { + if (value.HasValue) + { + Set(value.Value); + } + else + { + SetNull(); + } + } + + private void SetNullInternal() + { + VerifyUnset(); + pResult.AsRef().SetNull(); + } + + private void SetNumber(double value) + { + VerifyUnset(); + pResult.AsRef().SetNumber(value); + } + + private void SetFromObject(object obj) + { + var result = engine.MarshalToScript(obj, flags); + if (result is null) + { + SetUndefined(); + } + else if (result is DBNull) + { + SetNullInternal(); + } + else if (result is bool boolValue) + { + Set(boolValue); + } + else if (result is char charValue) + { + Set(charValue); + } + else if (result is sbyte sbyteValue) + { + Set(sbyteValue); + } + else if (result is byte byteValue) + { + Set(byteValue); + } + else if (result is short shortValue) + { + Set(shortValue); + } + else if (result is ushort ushortValue) + { + Set(ushortValue); + } + else if (result is int intValue) + { + Set(intValue); + } + else if (result is uint uintValue) + { + Set(uintValue); + } + else if (result is long longValue) + { + Set(longValue); + } + else if (result is ulong ulongValue) + { + Set(ulongValue); + } + else if (result is float floatValue) + { + Set(floatValue); + } + else if (result is double doubleValue) + { + Set(doubleValue); + } + else if (result is decimal decimalValue) + { + Set(decimalValue); + } + else if (result is string stringValue) + { + Set(stringValue); + } + else if (result is DateTime dateTimeValue) + { + Set(dateTimeValue); + } + else if (result is BigInteger bigIntegerValue) + { + Set(bigIntegerValue); + } + else if (result is V8ObjectImpl v8Object) + { + SetV8Object(v8Object); + } + else if (result is IHostItem hostObject) + { + SetHostObject(hostObject); + } + else + { + SetUndefined(); + } + } + + private void SetV8Object(V8ObjectImpl v8Object) + { + VerifyUnset(); + pResult.AsRef().SetV8Object(v8Object); + } + + private void SetHostObject(IHostItem hostObject) + { + VerifyUnset(); + pResult.AsRef().SetHostObject(hostObject); + } + + private void VerifyUnset() + { + if (IsSet) + { + throw new InvalidOperationException("The result has already been set"); + } + } + } +} diff --git a/ClearScript/V8/IV8Object.cs b/ClearScript/V8/IV8Object.cs index 5beb01b37..b68153009 100644 --- a/ClearScript/V8/IV8Object.cs +++ b/ClearScript/V8/IV8Object.cs @@ -35,5 +35,6 @@ internal interface IV8Object : IDisposable V8ArrayBufferOrViewKind ArrayBufferOrViewKind { get; } V8ArrayBufferOrViewInfo GetArrayBufferOrViewInfo(); void InvokeWithArrayBufferOrViewData(Action action); + void InvokeWithArrayBufferOrViewData(Action action, in TArg arg); } } diff --git a/ClearScript/V8/SplitProxy/IV8SplitProxyNative.cs b/ClearScript/V8/SplitProxy/IV8SplitProxyNative.cs index 6194c103a..165dd25eb 100644 --- a/ClearScript/V8/SplitProxy/IV8SplitProxyNative.cs +++ b/ClearScript/V8/SplitProxy/IV8SplitProxyNative.cs @@ -15,10 +15,20 @@ internal interface IV8SplitProxyNative #endregion + #region memory methods + + IntPtr Memory_Allocate(UIntPtr size); + IntPtr Memory_AllocateZeroed(UIntPtr size); + void Memory_Free(IntPtr pMemory); + + #endregion + #region StdString methods StdString.Ptr StdString_New(string value); string StdString_GetValue(StdString.Ptr pString); + TValue StdString_GetValue(StdString.Ptr pString, Func factory); + TValue StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg); void StdString_SetValue(StdString.Ptr pString, string value); void StdString_Delete(StdString.Ptr pString); @@ -103,13 +113,11 @@ internal interface IV8SplitProxyNative void V8Value_SetNull(V8Value.Ptr pV8Value); void V8Value_SetBoolean(V8Value.Ptr pV8Value, bool value); void V8Value_SetNumber(V8Value.Ptr pV8Value, double value); - void V8Value_SetInt32(V8Value.Ptr pV8Value, int value); - void V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value); void V8Value_SetString(V8Value.Ptr pV8Value, string value); void V8Value_SetDateTime(V8Value.Ptr pV8Value, double value); void V8Value_SetBigInt(V8Value.Ptr pV8Value, int signBit, byte[] bytes); void V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Handle hObject, V8Value.Subtype subtype, V8Value.Flags flags); - void V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject); + void V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags); void V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded); void V8Value_Delete(V8Value.Ptr pV8Value); @@ -166,6 +174,7 @@ internal interface IV8SplitProxyNative UIntPtr V8Context_GetMaxIsolateStackUsage(V8Context.Handle hContext); void V8Context_SetMaxIsolateStackUsage(V8Context.Handle hContext, UIntPtr size); void V8Context_InvokeWithLock(V8Context.Handle hContext, IntPtr pAction); + void V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg); object V8Context_GetRootItem(V8Context.Handle hContext); void V8Context_AddGlobalItem(V8Context.Handle hContext, string name, object value, bool globalMembers); void V8Context_AwaitDebuggerAndPause(V8Context.Handle hContext); @@ -211,6 +220,7 @@ internal interface IV8SplitProxyNative object V8Object_InvokeMethod(V8Object.Handle hObject, string name, object[] args); void V8Object_GetArrayBufferOrViewInfo(V8Object.Handle hObject, out IV8Object arrayBuffer, out ulong offset, out ulong size, out ulong length); void V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handle hObject, IntPtr pAction); + void V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg); #endregion @@ -228,9 +238,10 @@ internal interface IV8SplitProxyNative #endregion - #region V8 entity cleanup + #region V8 entity methods void V8Entity_Release(V8Entity.Handle hEntity); + V8Entity.Handle V8Entity_CloneHandle(V8Entity.Handle hEntity); void V8Entity_DestroyHandle(V8Entity.Handle hEntity); #endregion diff --git a/ClearScript/V8/SplitProxy/NativeCallbackImpl.cs b/ClearScript/V8/SplitProxy/NativeCallbackImpl.cs index 6b52e0b3f..818c58f6d 100644 --- a/ClearScript/V8/SplitProxy/NativeCallbackImpl.cs +++ b/ClearScript/V8/SplitProxy/NativeCallbackImpl.cs @@ -21,7 +21,7 @@ public NativeCallbackImpl(NativeCallback.Handle hCallback) public void Invoke() { - V8SplitProxyNative.InvokeNoThrow(instance => instance.NativeCallback_Invoke(Handle)); + V8SplitProxyNative.InvokeNoThrow(static (instance, handle) => instance.NativeCallback_Invoke(handle), Handle); } #endregion diff --git a/ClearScript/V8/SplitProxy/V8ContextProxyImpl.cs b/ClearScript/V8/SplitProxy/V8ContextProxyImpl.cs index a56173e6b..5a75a89bc 100644 --- a/ClearScript/V8/SplitProxy/V8ContextProxyImpl.cs +++ b/ClearScript/V8/SplitProxy/V8ContextProxyImpl.cs @@ -3,6 +3,7 @@ using System; using System.IO; +using System.Runtime.CompilerServices; using Microsoft.ClearScript.Util; namespace Microsoft.ClearScript.V8.SplitProxy @@ -22,20 +23,20 @@ public V8ContextProxyImpl(V8IsolateProxy isolateProxy, string name, V8ScriptEngi public override UIntPtr MaxIsolateHeapSize { - get => V8SplitProxyNative.Invoke(instance => instance.V8Context_GetMaxIsolateHeapSize(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Context_SetMaxIsolateHeapSize(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_GetMaxIsolateHeapSize(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_SetMaxIsolateHeapSize(ctx.Handle, ctx.value), (Handle, value)); } public override TimeSpan IsolateHeapSizeSampleInterval { - get => V8SplitProxyNative.Invoke(instance => TimeSpan.FromMilliseconds(instance.V8Context_GetIsolateHeapSizeSampleInterval(Handle))); - set => V8SplitProxyNative.Invoke(instance => instance.V8Context_SetIsolateHeapSizeSampleInterval(Handle, value.TotalMilliseconds)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => TimeSpan.FromMilliseconds(instance.V8Context_GetIsolateHeapSizeSampleInterval(handle)), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_SetIsolateHeapSizeSampleInterval(ctx.Handle, ctx.value.TotalMilliseconds), (Handle, value)); } public override UIntPtr MaxIsolateStackUsage { - get => V8SplitProxyNative.Invoke(instance => instance.V8Context_GetMaxIsolateStackUsage(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Context_SetMaxIsolateStackUsage(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_GetMaxIsolateStackUsage(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_SetMaxIsolateStackUsage(ctx.Handle, ctx.value), (Handle, value)); } public override void InvokeWithLock(Action action) @@ -43,55 +44,79 @@ public override void InvokeWithLock(Action action) using (var actionScope = V8ProxyHelpers.CreateAddRefHostObjectScope(action)) { var pAction = actionScope.Value; - V8SplitProxyNative.Invoke(instance => instance.V8Context_InvokeWithLock(Handle, pAction)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_InvokeWithLock(ctx.Handle, ctx.pAction), (Handle, pAction)); + } + } + + public override unsafe void InvokeWithLock(Action action, in TArg arg) + { + var ctx = (action, arg); + var pCtx = (IntPtr)Unsafe.AsPointer(ref ctx); + + Action actionWithArg = static pCtx => + { + ref var ctx = ref Unsafe.AsRef<(Action action, TArg arg)>(pCtx.ToPointer()); + ctx.action(ctx.arg); + }; + + using (var actionScope = V8ProxyHelpers.CreateAddRefHostObjectScope(actionWithArg)) + { + var pAction = actionScope.Value; + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_InvokeWithLockWithArg(ctx.Handle, ctx.pAction, ctx.pCtx), (Handle, pAction, pCtx)); } } public override object GetRootItem() { - return V8SplitProxyNative.Invoke(instance => instance.V8Context_GetRootItem(Handle)); + return V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_GetRootItem(handle), Handle); } public override void AddGlobalItem(string name, object item, bool globalMembers) { - V8SplitProxyNative.Invoke(instance => instance.V8Context_AddGlobalItem(Handle, name, item, globalMembers)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_AddGlobalItem(ctx.Handle, ctx.name, ctx.item, ctx.globalMembers), (Handle, name, item, globalMembers)); } public override void AwaitDebuggerAndPause() { - V8SplitProxyNative.Invoke(instance => instance.V8Context_AwaitDebuggerAndPause(Handle)); + V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_AwaitDebuggerAndPause(handle), Handle); } public override void CancelAwaitDebugger() { - V8SplitProxyNative.Invoke(instance => instance.V8Context_CancelAwaitDebugger(Handle)); + V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_CancelAwaitDebugger(handle), Handle); } public override object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate) { - return V8SplitProxyNative.Invoke(instance => instance.V8Context_ExecuteCode( - Handle, - MiscHelpers.GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName), - MiscHelpers.GetUrlOrPath(documentInfo.SourceMapUri, string.Empty), - documentInfo.UniqueId, - documentInfo.Category.Kind, - V8ProxyHelpers.AddRefHostObject(documentInfo), - code, - evaluate - )); + return V8SplitProxyNative.Invoke( + static (instance, ctx) => instance.V8Context_ExecuteCode( + ctx.Handle, + MiscHelpers.GetUrlOrPath(ctx.documentInfo.Uri, ctx.documentInfo.UniqueName), + MiscHelpers.GetUrlOrPath(ctx.documentInfo.SourceMapUri, string.Empty), + ctx.documentInfo.UniqueId, + ctx.documentInfo.Category.Kind, + V8ProxyHelpers.AddRefHostObject(ctx.documentInfo), + ctx.code, + ctx.evaluate + ), + (Handle, documentInfo, code, evaluate) + ); } public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code) { - return new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke(instance => instance.V8Context_Compile( - Handle, - MiscHelpers.GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName), - MiscHelpers.GetUrlOrPath(documentInfo.SourceMapUri, string.Empty), - documentInfo.UniqueId, - documentInfo.Category.Kind, - V8ProxyHelpers.AddRefHostObject(documentInfo), - code - ))); + return new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke( + static (instance, ctx) => instance.V8Context_Compile( + ctx.Handle, + MiscHelpers.GetUrlOrPath(ctx.documentInfo.Uri, ctx.documentInfo.UniqueName), + MiscHelpers.GetUrlOrPath(ctx.documentInfo.SourceMapUri, string.Empty), + ctx.documentInfo.UniqueId, + ctx.documentInfo.Category.Kind, + V8ProxyHelpers.AddRefHostObject(ctx.documentInfo), + ctx.code + ), + (Handle, documentInfo, code) + )); } public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code, V8CacheKind cacheKind, out byte[] cacheBytes) @@ -102,46 +127,62 @@ public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code return Compile(documentInfo, code); } - byte[] tempCacheBytes = null; - var script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke(instance => instance.V8Context_CompileProducingCache( - Handle, - MiscHelpers.GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName), - MiscHelpers.GetUrlOrPath(documentInfo.SourceMapUri, string.Empty), - documentInfo.UniqueId, - documentInfo.Category.Kind, - V8ProxyHelpers.AddRefHostObject(documentInfo), - code, - cacheKind, - out tempCacheBytes - ))); - - cacheBytes = tempCacheBytes; + var ctx = (Handle, documentInfo, code, cacheKind, cacheBytes: (byte[])null); + + var script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + return instance.V8Context_CompileProducingCache( + ctx.Handle, + MiscHelpers.GetUrlOrPath(ctx.documentInfo.Uri, ctx.documentInfo.UniqueName), + MiscHelpers.GetUrlOrPath(ctx.documentInfo.SourceMapUri, string.Empty), + ctx.documentInfo.UniqueId, + ctx.documentInfo.Category.Kind, + V8ProxyHelpers.AddRefHostObject(ctx.documentInfo), + ctx.code, + ctx.cacheKind, + out ctx.cacheBytes + ); + }, + StructPtr.FromRef(ref ctx) + )); + + cacheBytes = ctx.cacheBytes; return script; } public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted) { - if ((cacheKind == V8CacheKind.None) || (cacheBytes == null) || (cacheBytes.Length < 1)) + if ((cacheKind == V8CacheKind.None) || (cacheBytes is null) || (cacheBytes.Length < 1)) { cacheAccepted = false; return Compile(documentInfo, code); } - var tempCacheAccepted = false; - var script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke(instance => instance.V8Context_CompileConsumingCache( - Handle, - MiscHelpers.GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName), - MiscHelpers.GetUrlOrPath(documentInfo.SourceMapUri, string.Empty), - documentInfo.UniqueId, - documentInfo.Category.Kind, - V8ProxyHelpers.AddRefHostObject(documentInfo), - code, - cacheKind, - cacheBytes, - out tempCacheAccepted - ))); - - cacheAccepted = tempCacheAccepted; + var ctx = (Handle, documentInfo, code, cacheKind, cacheBytes, cacheAccepted: false); + + var script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + return instance.V8Context_CompileConsumingCache( + ctx.Handle, + MiscHelpers.GetUrlOrPath(ctx.documentInfo.Uri, ctx.documentInfo.UniqueName), + MiscHelpers.GetUrlOrPath(ctx.documentInfo.SourceMapUri, string.Empty), + ctx.documentInfo.UniqueId, + ctx.documentInfo.Category.Kind, + V8ProxyHelpers.AddRefHostObject(ctx.documentInfo), + ctx.code, + ctx.cacheKind, + ctx.cacheBytes, + out ctx.cacheAccepted + ); + }, + StructPtr.FromRef(ref ctx) + )); + + cacheAccepted = ctx.cacheAccepted; return script; } @@ -154,12 +195,11 @@ public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code } V8.V8Script script; - var tempCacheBytes = cacheBytes; - if ((cacheBytes == null) || (cacheBytes.Length < 1)) + if ((cacheBytes is null) || (cacheBytes.Length < 1)) { - script = Compile(documentInfo, code, cacheKind, out tempCacheBytes); - cacheResult = (tempCacheBytes != null) && (tempCacheBytes.Length > 0) ? V8CacheResult.Updated : V8CacheResult.UpdateFailed; + script = Compile(documentInfo, code, cacheKind, out var tempCacheBytes); + cacheResult = (tempCacheBytes is not null) && (tempCacheBytes.Length > 0) ? V8CacheResult.Updated : V8CacheResult.UpdateFailed; if (cacheResult == V8CacheResult.Updated) { cacheBytes = tempCacheBytes; @@ -168,24 +208,32 @@ public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code return script; } - var tempCacheResult = V8CacheResult.Disabled; - script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke(instance => instance.V8Context_CompileUpdatingCache( - Handle, - MiscHelpers.GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName), - MiscHelpers.GetUrlOrPath(documentInfo.SourceMapUri, string.Empty), - documentInfo.UniqueId, - documentInfo.Category.Kind, - V8ProxyHelpers.AddRefHostObject(documentInfo), - code, - cacheKind, - ref tempCacheBytes, - out tempCacheResult - ))); - - cacheResult = tempCacheResult; + var ctx = (Handle, documentInfo, code, cacheKind, cacheBytes, cacheResult: V8CacheResult.Disabled); + + script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + return instance.V8Context_CompileUpdatingCache( + ctx.Handle, + MiscHelpers.GetUrlOrPath(ctx.documentInfo.Uri, ctx.documentInfo.UniqueName), + MiscHelpers.GetUrlOrPath(ctx.documentInfo.SourceMapUri, string.Empty), + ctx.documentInfo.UniqueId, + ctx.documentInfo.Category.Kind, + V8ProxyHelpers.AddRefHostObject(ctx.documentInfo), + ctx.code, + ctx.cacheKind, + ref ctx.cacheBytes, + out ctx.cacheResult + ); + }, + StructPtr.FromRef(ref ctx) + )); + + cacheResult = ctx.cacheResult; if (cacheResult == V8CacheResult.Updated) { - cacheBytes = tempCacheBytes; + cacheBytes = ctx.cacheBytes; } return script; @@ -193,90 +241,107 @@ out tempCacheResult public override object Execute(V8.V8Script script, bool evaluate) { - if (!(script is V8ScriptImpl scriptImpl)) + if (script is V8ScriptImpl scriptImpl) { - throw new ArgumentException("Invalid compiled script", nameof(script)); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_ExecuteScript(ctx.Handle, ctx.scriptImpl.Handle, ctx.evaluate), (Handle, scriptImpl, evaluate)); } - return V8SplitProxyNative.Invoke(instance => instance.V8Context_ExecuteScript( - Handle, - scriptImpl.Handle, - evaluate - )); + throw new ArgumentException("Invalid compiled script", nameof(script)); } public override void Interrupt() { - V8SplitProxyNative.Invoke(instance => instance.V8Context_Interrupt(Handle)); + V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_Interrupt(handle), Handle); } public override void CancelInterrupt() { - V8SplitProxyNative.Invoke(instance => instance.V8Context_CancelInterrupt(Handle)); + V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_CancelInterrupt(handle), Handle); } public override bool EnableIsolateInterruptPropagation { - get => V8SplitProxyNative.Invoke(instance => instance.V8Context_GetEnableIsolateInterruptPropagation(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Context_SetEnableIsolateInterruptPropagation(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_GetEnableIsolateInterruptPropagation(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_SetEnableIsolateInterruptPropagation(ctx.Handle, ctx.value), (Handle, value)); } public override bool DisableIsolateHeapSizeViolationInterrupt { - get => V8SplitProxyNative.Invoke(instance => instance.V8Context_GetDisableIsolateHeapSizeViolationInterrupt(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Context_SetDisableIsolateHeapSizeViolationInterrupt(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_GetDisableIsolateHeapSizeViolationInterrupt(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_SetDisableIsolateHeapSizeViolationInterrupt(ctx.Handle, ctx.value), (Handle, value)); } public override V8RuntimeHeapInfo GetIsolateHeapInfo() { - var totalHeapSize = 0UL; - var totalHeapSizeExecutable = 0UL; - var totalPhysicalSize = 0UL; - var totalAvailableSize = 0UL; - var usedHeapSize = 0UL; - var heapSizeLimit = 0UL; - var totalExternalSize = 0UL; - V8SplitProxyNative.Invoke(instance => instance.V8Context_GetIsolateHeapStatistics(Handle, out totalHeapSize, out totalHeapSizeExecutable, out totalPhysicalSize, out totalAvailableSize, out usedHeapSize, out heapSizeLimit, out totalExternalSize)); + + var ctx = ( + Handle, + totalHeapSize: 0UL, + totalHeapSizeExecutable: 0UL, + totalPhysicalSize: 0UL, + totalAvailableSize: 0UL, + usedHeapSize: 0UL, + heapSizeLimit: 0UL, + totalExternalSize: 0UL + ); + + V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + instance.V8Context_GetIsolateHeapStatistics( + ctx.Handle, + out ctx.totalHeapSize, + out ctx.totalHeapSizeExecutable, + out ctx.totalPhysicalSize, + out ctx.totalAvailableSize, + out ctx.usedHeapSize, + out ctx.heapSizeLimit, + out ctx.totalExternalSize + ); + }, + StructPtr.FromRef(ref ctx) + ); return new V8RuntimeHeapInfo { - TotalHeapSize = totalHeapSize, - TotalHeapSizeExecutable = totalHeapSizeExecutable, - TotalPhysicalSize = totalPhysicalSize, - TotalAvailableSize = totalAvailableSize, - UsedHeapSize = usedHeapSize, - HeapSizeLimit = heapSizeLimit, - TotalExternalSize = totalExternalSize + TotalHeapSize = ctx.totalHeapSize, + TotalHeapSizeExecutable = ctx.totalHeapSizeExecutable, + TotalPhysicalSize = ctx.totalPhysicalSize, + TotalAvailableSize = ctx.totalAvailableSize, + UsedHeapSize = ctx.usedHeapSize, + HeapSizeLimit = ctx.heapSizeLimit, + TotalExternalSize = ctx.totalExternalSize }; } public override V8Runtime.Statistics GetIsolateStatistics() { var statistics = new V8Runtime.Statistics(); - V8SplitProxyNative.Invoke(instance => instance.V8Context_GetIsolateStatistics(Handle, out statistics.ScriptCount, out statistics.ScriptCacheSize, out statistics.ModuleCount, out statistics.PostedTaskCounts, out statistics.InvokedTaskCounts)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_GetIsolateStatistics(ctx.Handle, out ctx.statistics.ScriptCount, out ctx.statistics.ScriptCacheSize, out ctx.statistics.ModuleCount, out ctx.statistics.PostedTaskCounts, out ctx.statistics.InvokedTaskCounts), (Handle, statistics)); return statistics; } public override V8ScriptEngine.Statistics GetStatistics() { var statistics = new V8ScriptEngine.Statistics(); - V8SplitProxyNative.Invoke(instance => instance.V8Context_GetStatistics(Handle, out statistics.ScriptCount, out statistics.ModuleCount, out statistics.ModuleCacheSize)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_GetStatistics(ctx.Handle, out ctx.statistics.ScriptCount, out ctx.statistics.ModuleCount, out ctx.statistics.ModuleCacheSize), (Handle, statistics)); return statistics; } public override void CollectGarbage(bool exhaustive) { - V8SplitProxyNative.Invoke(instance => instance.V8Context_CollectGarbage(Handle, exhaustive)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_CollectGarbage(ctx.Handle, ctx.exhaustive), (Handle, exhaustive)); } public override void OnAccessSettingsChanged() { - V8SplitProxyNative.Invoke(instance => instance.V8Context_OnAccessSettingsChanged(Handle)); + V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_OnAccessSettingsChanged(handle), Handle); } public override bool BeginCpuProfile(string name, V8CpuProfileFlags flags) { - return V8SplitProxyNative.Invoke(instance => instance.V8Context_BeginCpuProfile(Handle, name, flags.HasFlag(V8CpuProfileFlags.EnableSampleCollection))); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_BeginCpuProfile(ctx.Handle, ctx.name, ctx.flags.HasAllFlags(V8CpuProfileFlags.EnableSampleCollection)), (Handle, name, flags)); } public override V8.V8CpuProfile EndCpuProfile(string name) @@ -287,7 +352,7 @@ public override V8.V8CpuProfile EndCpuProfile(string name) using (var actionScope = V8ProxyHelpers.CreateAddRefHostObjectScope(action)) { var pAction = actionScope.Value; - V8SplitProxyNative.Invoke(instance => instance.V8Context_EndCpuProfile(Handle, name, pAction)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_EndCpuProfile(ctx.Handle, ctx.name, ctx.pAction), (Handle, name, pAction)); } return profile; @@ -295,13 +360,13 @@ public override V8.V8CpuProfile EndCpuProfile(string name) public override void CollectCpuProfileSample() { - V8SplitProxyNative.Invoke(instance => instance.V8Context_CollectCpuProfileSample(Handle)); + V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_CollectCpuProfileSample(handle), Handle); } public override uint CpuProfileSampleInterval { - get => V8SplitProxyNative.Invoke(instance => instance.V8Context_GetCpuProfileSampleInterval(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Context_SetCpuProfileSampleInterval(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Context_GetCpuProfileSampleInterval(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_SetCpuProfileSampleInterval(ctx.Handle, ctx.value), (Handle, value)); } public override void WriteIsolateHeapSnapshot(Stream stream) @@ -309,7 +374,7 @@ public override void WriteIsolateHeapSnapshot(Stream stream) using (var streamScope = V8ProxyHelpers.CreateAddRefHostObjectScope(stream)) { var pStream = streamScope.Value; - V8SplitProxyNative.Invoke(instance => instance.V8Context_WriteIsolateHeapSnapshot(Handle, pStream)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Context_WriteIsolateHeapSnapshot(ctx.Handle, ctx.pStream), (Handle, pStream)); } } diff --git a/ClearScript/V8/SplitProxy/V8DebugListenerImpl.cs b/ClearScript/V8/SplitProxy/V8DebugListenerImpl.cs index abd35f093..9999e3427 100644 --- a/ClearScript/V8/SplitProxy/V8DebugListenerImpl.cs +++ b/ClearScript/V8/SplitProxy/V8DebugListenerImpl.cs @@ -20,17 +20,17 @@ public V8DebugListenerImpl(V8DebugCallback.Handle hCallback) public void ConnectClient() { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8DebugCallback_ConnectClient(Handle)); + V8SplitProxyNative.InvokeNoThrow(static (instance, handle) => instance.V8DebugCallback_ConnectClient(handle), Handle); } public void SendCommand(string command) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8DebugCallback_SendCommand(Handle, command)); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8DebugCallback_SendCommand(ctx.Handle, ctx.command), (Handle, command)); } public void DisconnectClient() { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8DebugCallback_DisconnectClient(Handle)); + V8SplitProxyNative.InvokeNoThrow(static (instance, handle) => instance.V8DebugCallback_DisconnectClient(handle), Handle); } #endregion diff --git a/ClearScript/V8/SplitProxy/V8EntityHolder.cs b/ClearScript/V8/SplitProxy/V8EntityHolder.cs index 64ae9d6b1..ad1023095 100644 --- a/ClearScript/V8/SplitProxy/V8EntityHolder.cs +++ b/ClearScript/V8/SplitProxy/V8EntityHolder.cs @@ -33,7 +33,7 @@ public void ReleaseEntity() var tempHandle = handle; if (tempHandle != V8Entity.Handle.Empty) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Entity_Release(tempHandle)); + V8SplitProxyNative.InvokeNoThrow(static (instance, tempHandle) => instance.V8Entity_Release(tempHandle), tempHandle); } } @@ -42,7 +42,7 @@ public static void Destroy(ref V8EntityHolder holder) var tempHandle = holder.handle; if (tempHandle != V8Entity.Handle.Empty) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Entity_DestroyHandle(tempHandle)); + V8SplitProxyNative.InvokeNoThrow(static (instance, tempHandle) => instance.V8Entity_DestroyHandle(tempHandle), tempHandle); } if (holder.registered) diff --git a/ClearScript/V8/SplitProxy/V8IsolateProxyImpl.cs b/ClearScript/V8/SplitProxy/V8IsolateProxyImpl.cs index 96d65b4a8..c6dcfea5f 100644 --- a/ClearScript/V8/SplitProxy/V8IsolateProxyImpl.cs +++ b/ClearScript/V8/SplitProxy/V8IsolateProxyImpl.cs @@ -15,68 +15,69 @@ internal sealed class V8IsolateProxyImpl : V8IsolateProxy public V8IsolateProxyImpl(string name, V8RuntimeConstraints constraints, V8RuntimeFlags flags, int debugPort) { - holder = new V8EntityHolder("V8 runtime", () => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_Create( - name, - constraints?.MaxNewSpaceSize ?? -1, - constraints?.MaxOldSpaceSize ?? -1, - constraints?.HeapExpansionMultiplier ?? 0, - constraints?.MaxArrayBufferAllocation ?? ulong.MaxValue, - flags, - debugPort - ))); + holder = new V8EntityHolder("V8 runtime", () => V8SplitProxyNative.Invoke( + static (instance, ctx) => instance.V8Isolate_Create( + ctx.name, + ctx.constraints?.MaxNewSpaceSize ?? -1, + ctx.constraints?.MaxOldSpaceSize ?? -1, + ctx.constraints?.HeapExpansionMultiplier ?? 0, + ctx.constraints?.MaxArrayBufferAllocation ?? ulong.MaxValue, + ctx.flags, + ctx.debugPort + ), + (name, constraints, flags, debugPort) + )); } public V8Context.Handle CreateContext(string name, V8ScriptEngineFlags flags, int debugPort) { - return V8SplitProxyNative.Invoke(instance => instance.V8Isolate_CreateContext( - Handle, - name, - flags, - debugPort - )); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_CreateContext(ctx.Handle, ctx.name, ctx.flags, ctx.debugPort), (Handle, name, flags, debugPort)); } #region V8IsolateProxy overrides public override UIntPtr MaxHeapSize { - get => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_GetMaxHeapSize(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_SetMaxHeapSize(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Isolate_GetMaxHeapSize(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_SetMaxHeapSize(ctx.Handle, ctx.value), (Handle, value)); } public override TimeSpan HeapSizeSampleInterval { - get => V8SplitProxyNative.Invoke(instance => TimeSpan.FromMilliseconds(instance.V8Isolate_GetHeapSizeSampleInterval(Handle))); - set => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_SetHeapSizeSampleInterval(Handle, value.TotalMilliseconds)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => TimeSpan.FromMilliseconds(instance.V8Isolate_GetHeapSizeSampleInterval(handle)), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_SetHeapSizeSampleInterval(ctx.Handle, ctx.value.TotalMilliseconds), (Handle, value)); } public override UIntPtr MaxStackUsage { - get => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_GetMaxStackUsage(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_SetMaxStackUsage(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Isolate_GetMaxStackUsage(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_SetMaxStackUsage(ctx.Handle, ctx.value), (Handle, value)); } public override void AwaitDebuggerAndPause() { - V8SplitProxyNative.Invoke(instance => instance.V8Isolate_AwaitDebuggerAndPause(Handle)); + V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Isolate_AwaitDebuggerAndPause(handle), Handle); } public override void CancelAwaitDebugger() { - V8SplitProxyNative.Invoke(instance => instance.V8Isolate_CancelAwaitDebugger(Handle)); + V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Isolate_CancelAwaitDebugger(handle), Handle); } public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code) { - return new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke(instance => instance.V8Isolate_Compile( - Handle, - MiscHelpers.GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName), - MiscHelpers.GetUrlOrPath(documentInfo.SourceMapUri, string.Empty), - documentInfo.UniqueId, - documentInfo.Category.Kind, - V8ProxyHelpers.AddRefHostObject(documentInfo), - code - ))); + return new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke( + static (instance, ctx) => instance.V8Isolate_Compile( + ctx.Handle, + MiscHelpers.GetUrlOrPath(ctx.documentInfo.Uri, ctx.documentInfo.UniqueName), + MiscHelpers.GetUrlOrPath(ctx.documentInfo.SourceMapUri, string.Empty), + ctx.documentInfo.UniqueId, + ctx.documentInfo.Category.Kind, + V8ProxyHelpers.AddRefHostObject(ctx.documentInfo), + ctx.code + ), + (Handle, documentInfo, code) + )); } public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code, V8CacheKind cacheKind, out byte[] cacheBytes) @@ -87,46 +88,62 @@ public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code return Compile(documentInfo, code); } - byte[] tempCacheBytes = null; - var script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke(instance => instance.V8Isolate_CompileProducingCache( - Handle, - MiscHelpers.GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName), - MiscHelpers.GetUrlOrPath(documentInfo.SourceMapUri, string.Empty), - documentInfo.UniqueId, - documentInfo.Category.Kind, - V8ProxyHelpers.AddRefHostObject(documentInfo), - code, - cacheKind, - out tempCacheBytes - ))); - - cacheBytes = tempCacheBytes; + var ctx = (Handle, documentInfo, code, cacheKind, cacheBytes: (byte[])null); + + var script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + return instance.V8Isolate_CompileProducingCache( + ctx.Handle, + MiscHelpers.GetUrlOrPath(ctx.documentInfo.Uri, ctx.documentInfo.UniqueName), + MiscHelpers.GetUrlOrPath(ctx.documentInfo.SourceMapUri, string.Empty), + ctx.documentInfo.UniqueId, + ctx.documentInfo.Category.Kind, + V8ProxyHelpers.AddRefHostObject(ctx.documentInfo), + ctx.code, + ctx.cacheKind, + out ctx.cacheBytes + ); + }, + StructPtr.FromRef(ref ctx) + )); + + cacheBytes = ctx.cacheBytes; return script; } public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code, V8CacheKind cacheKind, byte[] cacheBytes, out bool cacheAccepted) { - if ((cacheKind == V8CacheKind.None) || (cacheBytes == null) || (cacheBytes.Length < 1)) + if ((cacheKind == V8CacheKind.None) || (cacheBytes is null) || (cacheBytes.Length < 1)) { cacheAccepted = false; return Compile(documentInfo, code); } - var tempCacheAccepted = false; - var script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke(instance => instance.V8Isolate_CompileConsumingCache( - Handle, - MiscHelpers.GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName), - MiscHelpers.GetUrlOrPath(documentInfo.SourceMapUri, string.Empty), - documentInfo.UniqueId, - documentInfo.Category.Kind, - V8ProxyHelpers.AddRefHostObject(documentInfo), - code, - cacheKind, - cacheBytes, - out tempCacheAccepted - ))); - - cacheAccepted = tempCacheAccepted; + var ctx = (Handle, documentInfo, code, cacheKind, cacheBytes, cacheAccepted: false); + + var script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + return instance.V8Isolate_CompileConsumingCache( + ctx.Handle, + MiscHelpers.GetUrlOrPath(ctx.documentInfo.Uri, ctx.documentInfo.UniqueName), + MiscHelpers.GetUrlOrPath(ctx.documentInfo.SourceMapUri, string.Empty), + ctx.documentInfo.UniqueId, + ctx.documentInfo.Category.Kind, + V8ProxyHelpers.AddRefHostObject(ctx.documentInfo), + ctx.code, + ctx.cacheKind, + ctx.cacheBytes, + out ctx.cacheAccepted + ); + }, + StructPtr.FromRef(ref ctx) + )); + + cacheAccepted = ctx.cacheAccepted; return script; } @@ -139,12 +156,11 @@ public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code } V8.V8Script script; - var tempCacheBytes = cacheBytes; - if ((cacheBytes == null) || (cacheBytes.Length < 1)) + if ((cacheBytes is null) || (cacheBytes.Length < 1)) { - script = Compile(documentInfo, code, cacheKind, out tempCacheBytes); - cacheResult = (tempCacheBytes != null) && (tempCacheBytes.Length > 0) ? V8CacheResult.Updated : V8CacheResult.UpdateFailed; + script = Compile(documentInfo, code, cacheKind, out var tempCacheBytes); + cacheResult = (tempCacheBytes is not null) && (tempCacheBytes.Length > 0) ? V8CacheResult.Updated : V8CacheResult.UpdateFailed; if (cacheResult == V8CacheResult.Updated) { cacheBytes = tempCacheBytes; @@ -153,24 +169,32 @@ public override V8.V8Script Compile(UniqueDocumentInfo documentInfo, string code return script; } - var tempCacheResult = V8CacheResult.Disabled; - script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke(instance => instance.V8Isolate_CompileUpdatingCache( - Handle, - MiscHelpers.GetUrlOrPath(documentInfo.Uri, documentInfo.UniqueName), - MiscHelpers.GetUrlOrPath(documentInfo.SourceMapUri, string.Empty), - documentInfo.UniqueId, - documentInfo.Category.Kind, - V8ProxyHelpers.AddRefHostObject(documentInfo), - code, - cacheKind, - ref tempCacheBytes, - out tempCacheResult - ))); - - cacheResult = tempCacheResult; + var ctx = (Handle, documentInfo, code, cacheKind, cacheBytes, cacheResult: V8CacheResult.Disabled); + + script = new V8ScriptImpl(documentInfo, code.GetDigest(), V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + return instance.V8Isolate_CompileUpdatingCache( + ctx.Handle, + MiscHelpers.GetUrlOrPath(ctx.documentInfo.Uri, ctx.documentInfo.UniqueName), + MiscHelpers.GetUrlOrPath(ctx.documentInfo.SourceMapUri, string.Empty), + ctx.documentInfo.UniqueId, + ctx.documentInfo.Category.Kind, + V8ProxyHelpers.AddRefHostObject(ctx.documentInfo), + ctx.code, + ctx.cacheKind, + ref ctx.cacheBytes, + out ctx.cacheResult + ); + }, + StructPtr.FromRef(ref ctx) + )); + + cacheResult = ctx.cacheResult; if (cacheResult == V8CacheResult.Updated) { - cacheBytes = tempCacheBytes; + cacheBytes = ctx.cacheBytes; } return script; @@ -178,54 +202,74 @@ out tempCacheResult public override bool EnableInterruptPropagation { - get => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_GetEnableInterruptPropagation(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_SetEnableInterruptPropagation(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Isolate_GetEnableInterruptPropagation(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_SetEnableInterruptPropagation(ctx.Handle, ctx.value), (Handle, value)); } public override bool DisableHeapSizeViolationInterrupt { - get => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_GetDisableHeapSizeViolationInterrupt(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_SetDisableHeapSizeViolationInterrupt(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Isolate_GetDisableHeapSizeViolationInterrupt(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_SetDisableHeapSizeViolationInterrupt(ctx.Handle, ctx.value), (Handle, value)); } public override V8RuntimeHeapInfo GetHeapInfo() { - var totalHeapSize = 0UL; - var totalHeapSizeExecutable = 0UL; - var totalPhysicalSize = 0UL; - var totalAvailableSize = 0UL; - var usedHeapSize = 0UL; - var heapSizeLimit = 0UL; - var totalExternalSize = 0UL; - V8SplitProxyNative.Invoke(instance => instance.V8Isolate_GetHeapStatistics(Handle, out totalHeapSize, out totalHeapSizeExecutable, out totalPhysicalSize, out totalAvailableSize, out usedHeapSize, out heapSizeLimit, out totalExternalSize)); + var ctx = ( + Handle, + totalHeapSize: 0UL, + totalHeapSizeExecutable: 0UL, + totalPhysicalSize: 0UL, + totalAvailableSize: 0UL, + usedHeapSize: 0UL, + heapSizeLimit: 0UL, + totalExternalSize: 0UL + ); + + V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + instance.V8Isolate_GetHeapStatistics( + ctx.Handle, + out ctx.totalHeapSize, + out ctx.totalHeapSizeExecutable, + out ctx.totalPhysicalSize, + out ctx.totalAvailableSize, + out ctx.usedHeapSize, + out ctx.heapSizeLimit, + out ctx.totalExternalSize + ); + }, + StructPtr.FromRef(ref ctx) + ); return new V8RuntimeHeapInfo { - TotalHeapSize = totalHeapSize, - TotalHeapSizeExecutable = totalHeapSizeExecutable, - TotalPhysicalSize = totalPhysicalSize, - TotalAvailableSize = totalAvailableSize, - UsedHeapSize = usedHeapSize, - HeapSizeLimit = heapSizeLimit, - TotalExternalSize = totalExternalSize + TotalHeapSize = ctx.totalHeapSize, + TotalHeapSizeExecutable = ctx.totalHeapSizeExecutable, + TotalPhysicalSize = ctx.totalPhysicalSize, + TotalAvailableSize = ctx.totalAvailableSize, + UsedHeapSize = ctx.usedHeapSize, + HeapSizeLimit = ctx.heapSizeLimit, + TotalExternalSize = ctx.totalExternalSize }; } public override V8Runtime.Statistics GetStatistics() { var statistics = new V8Runtime.Statistics(); - V8SplitProxyNative.Invoke(instance => instance.V8Isolate_GetStatistics(Handle, out statistics.ScriptCount, out statistics.ScriptCacheSize, out statistics.ModuleCount, out statistics.PostedTaskCounts, out statistics.InvokedTaskCounts)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_GetStatistics(ctx.Handle, out ctx.statistics.ScriptCount, out ctx.statistics.ScriptCacheSize, out ctx.statistics.ModuleCount, out ctx.statistics.PostedTaskCounts, out ctx.statistics.InvokedTaskCounts), (Handle, statistics)); return statistics; } public override void CollectGarbage(bool exhaustive) { - V8SplitProxyNative.Invoke(instance => instance.V8Isolate_CollectGarbage(Handle, exhaustive)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_CollectGarbage(ctx.Handle, ctx.exhaustive), (Handle, exhaustive)); } public override bool BeginCpuProfile(string name, V8CpuProfileFlags flags) { - return V8SplitProxyNative.Invoke(instance => instance.V8Isolate_BeginCpuProfile(Handle, name, flags.HasFlag(V8CpuProfileFlags.EnableSampleCollection))); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_BeginCpuProfile(ctx.Handle, ctx.name, ctx.flags.HasAllFlags(V8CpuProfileFlags.EnableSampleCollection)), (Handle, name, flags)); } public override V8.V8CpuProfile EndCpuProfile(string name) @@ -236,7 +280,7 @@ public override V8.V8CpuProfile EndCpuProfile(string name) using (var actionScope = V8ProxyHelpers.CreateAddRefHostObjectScope(action)) { var pAction = actionScope.Value; - V8SplitProxyNative.Invoke(instance => instance.V8Isolate_EndCpuProfile(Handle, name, pAction)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_EndCpuProfile(ctx.Handle, ctx.name, ctx.pAction), (Handle, name, pAction)); } return profile; @@ -244,13 +288,13 @@ public override V8.V8CpuProfile EndCpuProfile(string name) public override void CollectCpuProfileSample() { - V8SplitProxyNative.Invoke(instance => instance.V8Isolate_CollectCpuProfileSample(Handle)); + V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Isolate_CollectCpuProfileSample(handle), Handle); } public override uint CpuProfileSampleInterval { - get => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_GetCpuProfileSampleInterval(Handle)); - set => V8SplitProxyNative.Invoke(instance => instance.V8Isolate_SetCpuProfileSampleInterval(Handle, value)); + get => V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Isolate_GetCpuProfileSampleInterval(handle), Handle); + set => V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_SetCpuProfileSampleInterval(ctx.Handle, ctx.value), (Handle, value)); } public override void WriteHeapSnapshot(Stream stream) @@ -258,7 +302,7 @@ public override void WriteHeapSnapshot(Stream stream) using (var streamScope = V8ProxyHelpers.CreateAddRefHostObjectScope(stream)) { var pStream = streamScope.Value; - V8SplitProxyNative.Invoke(instance => instance.V8Isolate_WriteHeapSnapshot(Handle, pStream)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Isolate_WriteHeapSnapshot(ctx.Handle, ctx.pStream), (Handle, pStream)); } } diff --git a/ClearScript/V8/SplitProxy/V8ObjectImpl.cs b/ClearScript/V8/SplitProxy/V8ObjectImpl.cs index 44c32d973..4e7a5aa21 100644 --- a/ClearScript/V8/SplitProxy/V8ObjectImpl.cs +++ b/ClearScript/V8/SplitProxy/V8ObjectImpl.cs @@ -1,8 +1,10 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; +using System.Runtime.CompilerServices; using Microsoft.ClearScript.JavaScript; +using Microsoft.ClearScript.Util; namespace Microsoft.ClearScript.V8.SplitProxy { @@ -75,21 +77,31 @@ public JavaScriptObjectFlags ObjectFlags { var flags = JavaScriptObjectFlags.None; - if (Flags.HasFlag(V8Value.Flags.Shared)) + if (Flags.HasAllFlags(V8Value.Flags.Shared)) { flags |= JavaScriptObjectFlags.Shared; } - if (Flags.HasFlag(V8Value.Flags.Async)) + if (Flags.HasAllFlags(V8Value.Flags.Async)) { flags |= JavaScriptObjectFlags.Async; } - if (Flags.HasFlag(V8Value.Flags.Generator)) + if (Flags.HasAllFlags(V8Value.Flags.Generator)) { flags |= JavaScriptObjectFlags.Generator; } + if (Flags.HasAllFlags(V8Value.Flags.Pending)) + { + flags |= JavaScriptObjectFlags.Pending; + } + + if (Flags.HasAllFlags(V8Value.Flags.Rejected)) + { + flags |= JavaScriptObjectFlags.Rejected; + } + return flags; } } @@ -98,67 +110,76 @@ public JavaScriptObjectFlags ObjectFlags public object GetProperty(string name) { - return V8SplitProxyNative.Invoke(instance => instance.V8Object_GetNamedProperty(Handle, name)); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_GetNamedProperty(ctx.Handle, ctx.name), (Handle, name)); } public bool TryGetProperty(string name, out object value) { - object tempValue = null; - var result = V8SplitProxyNative.Invoke(instance => instance.V8Object_TryGetNamedProperty(Handle, name, out tempValue)); - value = tempValue; + var ctx = (Handle, name, value: (object)null); + + var result = V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + return instance.V8Object_TryGetNamedProperty(ctx.Handle, ctx.name, out ctx.value); + }, + StructPtr.FromRef(ref ctx) + ); + + value = ctx.value; return result; } public void SetProperty(string name, object value) { - V8SplitProxyNative.Invoke(instance => instance.V8Object_SetNamedProperty(Handle, name, value)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_SetNamedProperty(ctx.Handle, ctx.name, ctx.value), (Handle, name, value)); } public bool DeleteProperty(string name) { - return V8SplitProxyNative.Invoke(instance => instance.V8Object_DeleteNamedProperty(Handle, name)); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_DeleteNamedProperty(ctx.Handle, ctx.name), (Handle, name)); } public string[] GetPropertyNames(bool includeIndices) { - return V8SplitProxyNative.Invoke(instance => instance.V8Object_GetPropertyNames(Handle, includeIndices)); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_GetPropertyNames(ctx.Handle, ctx.includeIndices), (Handle, includeIndices)); } public object GetProperty(int index) { - return V8SplitProxyNative.Invoke(instance => instance.V8Object_GetIndexedProperty(Handle, index)); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_GetIndexedProperty(ctx.Handle, ctx.index), (Handle, index)); } public void SetProperty(int index, object value) { - V8SplitProxyNative.Invoke(instance => instance.V8Object_SetIndexedProperty(Handle, index, value)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_SetIndexedProperty(ctx.Handle, ctx.index, ctx.value), (Handle, index, value)); } public bool DeleteProperty(int index) { - return V8SplitProxyNative.Invoke(instance => instance.V8Object_DeleteIndexedProperty(Handle, index)); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_DeleteIndexedProperty(ctx.Handle, ctx.index), (Handle, index)); } public int[] GetPropertyIndices() { - return V8SplitProxyNative.Invoke(instance => instance.V8Object_GetPropertyIndices(Handle)); + return V8SplitProxyNative.Invoke(static (instance, handle) => instance.V8Object_GetPropertyIndices(handle), Handle); } public object Invoke(bool asConstructor, object[] args) { - return V8SplitProxyNative.Invoke(instance => instance.V8Object_Invoke(Handle, asConstructor, args)); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_Invoke(ctx.Handle, ctx.asConstructor, ctx.args), (Handle, asConstructor, args)); } public object InvokeMethod(string name, object[] args) { - return V8SplitProxyNative.Invoke(instance => instance.V8Object_InvokeMethod(Handle, name, args)); + return V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_InvokeMethod(ctx.Handle, ctx.name, ctx.args), (Handle, name, args)); } public bool IsPromise => Subtype == V8Value.Subtype.Promise; public bool IsArray => Subtype == V8Value.Subtype.Array; - public bool IsShared => Flags.HasFlag(V8Value.Flags.Shared); + public bool IsShared => Flags.HasAllFlags(V8Value.Flags.Shared); public bool IsArrayBufferOrView { @@ -243,12 +264,18 @@ public V8ArrayBufferOrViewInfo GetArrayBufferOrViewInfo() var kind = ArrayBufferOrViewKind; if (kind != V8ArrayBufferOrViewKind.None) { - IV8Object arrayBuffer = null; - var offset = 0UL; - var size = 0UL; - var length = 0UL; - V8SplitProxyNative.Invoke(instance => instance.V8Object_GetArrayBufferOrViewInfo(Handle, out arrayBuffer, out offset, out size, out length)); - return new V8ArrayBufferOrViewInfo(kind, arrayBuffer, offset, size, length); + var ctx = (Handle, arrayBuffer: (IV8Object)null, offset: 0UL, size: 0UL, length: 0UL); + + V8SplitProxyNative.Invoke( + static (instance, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + instance.V8Object_GetArrayBufferOrViewInfo(ctx.Handle, out ctx.arrayBuffer, out ctx.offset, out ctx.size, out ctx.length); + }, + StructPtr.FromRef(ref ctx) + ); + + return new V8ArrayBufferOrViewInfo(kind, ctx.arrayBuffer, ctx.offset, ctx.size, ctx.length); } return null; @@ -259,7 +286,25 @@ public void InvokeWithArrayBufferOrViewData(Action action) using (var actionScope = V8ProxyHelpers.CreateAddRefHostObjectScope(action)) { var pAction = actionScope.Value; - V8SplitProxyNative.Invoke(instance => instance.V8Object_InvokeWithArrayBufferOrViewData(Handle, pAction)); + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_InvokeWithArrayBufferOrViewData(ctx.Handle, ctx.pAction), (Handle, pAction)); + } + } + + public unsafe void InvokeWithArrayBufferOrViewData(Action action, in TArg arg) + { + var ctx = (action, arg); + var pCtx = (IntPtr)Unsafe.AsPointer(ref ctx); + + Action actionWithArg = static (pData, pCtx) => + { + ref var ctx = ref Unsafe.AsRef<(Action action, TArg arg)>(pCtx.ToPointer()); + ctx.action(pData, ctx.arg); + }; + + using (var actionScope = V8ProxyHelpers.CreateAddRefHostObjectScope(actionWithArg)) + { + var pAction = actionScope.Value; + V8SplitProxyNative.Invoke(static (instance, ctx) => instance.V8Object_InvokeWithArrayBufferOrViewDataWithArg(ctx.Handle, ctx.pAction, ctx.pCtx), (Handle, pAction, pCtx)); } } diff --git a/ClearScript/V8/SplitProxy/V8SplitProxyHelpers.cs b/ClearScript/V8/SplitProxy/V8SplitProxyHelpers.cs index 29d59fbd6..a5e319238 100644 --- a/ClearScript/V8/SplitProxy/V8SplitProxyHelpers.cs +++ b/ClearScript/V8/SplitProxy/V8SplitProxyHelpers.cs @@ -4,9 +4,13 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Linq; using System.Numerics; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8.FastProxy; namespace Microsoft.ClearScript.V8.SplitProxy { @@ -14,19 +18,33 @@ namespace Microsoft.ClearScript.V8.SplitProxy internal static class StdString { - public static IScope CreateScope(string value = null) + public static ValueScope CreateScope(string value = null) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => instance.StdString_New(value ?? string.Empty), instance.StdString_Delete)); + return ScopeFactory.Create( + static value => V8SplitProxyNative.InvokeRaw(static (instance, value) => instance.StdString_New(value ?? string.Empty), value), + static pString => V8SplitProxyNative.InvokeRaw(static (instance, pString) => instance.StdString_Delete(pString), pString), + value + ); } public static string GetValue(Ptr pString) { - return V8SplitProxyNative.InvokeNoThrow(instance => instance.StdString_GetValue(pString)); + return V8SplitProxyNative.InvokeRaw(static (instance, pString) => instance.StdString_GetValue(pString), pString); + } + + public static TValue GetValue(Ptr pString, Func factory) + { + return V8SplitProxyNative.InvokeRaw(static (instance, ctx) => instance.StdString_GetValue(ctx.pString, ctx.factory), (pString, factory)); + } + + public static TValue GetValue(Ptr pString, Func factory, in TArg arg) + { + return V8SplitProxyNative.InvokeRaw(static (instance, ctx) => instance.StdString_GetValue(ctx.pString, ctx.factory, ctx.arg), (pString, factory, arg)); } public static void SetValue(Ptr pString, string value) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.StdString_SetValue(pString, value)); + V8SplitProxyNative.InvokeRaw(static (instance, ctx) => instance.StdString_SetValue(ctx.pString, ctx.value), (pString, value)); } #region Nested type: Ptr @@ -37,13 +55,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -58,57 +76,89 @@ public readonly struct Ptr internal static class StdStringArray { - public static IScope CreateScope(int elementCount = 0) + public static ValueScope CreateScope(int elementCount = 0) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => instance.StdStringArray_New(elementCount), instance.StdStringArray_Delete)); + return ScopeFactory.Create( + static elementCount => V8SplitProxyNative.InvokeRaw(static (instance, elementCount) => instance.StdStringArray_New(elementCount), elementCount), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdStringArray_Delete(pArray), pArray), + elementCount + ); } - public static IScope CreateScope(string[] array) + public static ValueScope CreateScope(string[] array) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => NewFromArray(instance, array), instance.StdStringArray_Delete)); + return ScopeFactory.Create( + static array => V8SplitProxyNative.InvokeRaw(static (instance, array) => NewFromArray(instance, array), array), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdStringArray_Delete(pArray), pArray), + array + ); } public static int GetElementCount(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => instance.StdStringArray_GetElementCount(pArray)); + return V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdStringArray_GetElementCount(pArray), pArray); } public static void SetElementCount(Ptr pArray, int elementCount) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.StdStringArray_SetElementCount(pArray, elementCount)); + V8SplitProxyNative.InvokeRaw(static (instance, ctx) => instance.StdStringArray_SetElementCount(ctx.pArray, ctx.elementCount), (pArray, elementCount)); } public static string[] ToArray(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = instance.StdStringArray_GetElementCount(pArray); - var array = new string[elementCount]; - - if (elementCount > 0) + return V8SplitProxyNative.InvokeRaw( + static (instance, pArray) => { - for (var index = 0; index < elementCount; index++) + var elementCount = instance.StdStringArray_GetElementCount(pArray); + var array = new string[elementCount]; + + if (elementCount > 0) { - array[index] = instance.StdStringArray_GetElement(pArray, index); + for (var index = 0; index < elementCount; index++) + { + array[index] = instance.StdStringArray_GetElement(pArray, index); + } } - } - return array; - }); + return array; + }, + pArray + ); } public static void CopyFromArray(Ptr pArray, string[] array) { - V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = array?.Length ?? 0; - instance.StdStringArray_SetElementCount(pArray, elementCount); + V8SplitProxyNative.InvokeRaw( + static (instance, ctx) => + { + var elementCount = ctx.array?.Length ?? 0; + instance.StdStringArray_SetElementCount(ctx.pArray, elementCount); - for (var index = 0; index < elementCount; index++) + for (var index = 0; index < elementCount; index++) + { + instance.StdStringArray_SetElement(ctx.pArray, index, ctx.array[index]); + } + }, + (pArray, array) + ); + } + + public static void CopyFromEnumerable(Ptr pArray, IEnumerable source) + { + V8SplitProxyNative.InvokeRaw( + static (instance, ctx) => { - instance.StdStringArray_SetElement(pArray, index, array[index]); - } - }); + var itemCount = ctx.source?.Count() ?? 0; + instance.StdStringArray_SetElementCount(ctx.pArray, itemCount); + + var index = 0; + foreach (var item in ctx.source) + { + instance.StdStringArray_SetElement(ctx.pArray, index++, item); + } + }, + (pArray, source) + ); } private static Ptr NewFromArray(IV8SplitProxyNative instance, string[] array) @@ -135,13 +185,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -156,54 +206,68 @@ public readonly struct Ptr internal static class StdByteArray { - public static IScope CreateScope(int elementCount = 0) + public static ValueScope CreateScope(int elementCount = 0) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => instance.StdByteArray_New(elementCount), instance.StdByteArray_Delete)); + return ScopeFactory.Create( + static elementCount => V8SplitProxyNative.InvokeRaw(static (instance, elementCount) => instance.StdByteArray_New(elementCount), elementCount), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdByteArray_Delete(pArray), pArray), + elementCount + ); } - public static IScope CreateScope(byte[] array) + public static ValueScope CreateScope(byte[] array) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => NewFromArray(instance, array), instance.StdByteArray_Delete)); + return ScopeFactory.Create( + static array => V8SplitProxyNative.InvokeRaw(static (instance, array) => NewFromArray(instance, array), array), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdByteArray_Delete(pArray), pArray), + array + ); } public static int GetElementCount(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => instance.StdByteArray_GetElementCount(pArray)); + return V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdByteArray_GetElementCount(pArray), pArray); } public static void SetElementCount(Ptr pArray, int elementCount) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.StdByteArray_SetElementCount(pArray, elementCount)); + V8SplitProxyNative.InvokeRaw(static (instance, ctx) => instance.StdByteArray_SetElementCount(ctx.pArray, ctx.elementCount), (pArray, elementCount)); } public static byte[] ToArray(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = instance.StdByteArray_GetElementCount(pArray); - var array = new byte[elementCount]; - - if (elementCount > 0) + return V8SplitProxyNative.InvokeRaw( + static (instance, pArray) => { - Marshal.Copy(instance.StdByteArray_GetData(pArray), array, 0, elementCount); - } + var elementCount = instance.StdByteArray_GetElementCount(pArray); + var array = new byte[elementCount]; - return array; - }); + if (elementCount > 0) + { + Marshal.Copy(instance.StdByteArray_GetData(pArray), array, 0, elementCount); + } + + return array; + }, + pArray + ); } public static void CopyFromArray(Ptr pArray, byte[] array) { - V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = array?.Length ?? 0; - instance.StdByteArray_SetElementCount(pArray, elementCount); - - if (elementCount > 0) + V8SplitProxyNative.InvokeRaw( + static (instance, ctx) => { - Marshal.Copy(array, 0, instance.StdByteArray_GetData(pArray), elementCount); - } - }); + var elementCount = ctx.array?.Length ?? 0; + instance.StdByteArray_SetElementCount(ctx.pArray, elementCount); + + if (elementCount > 0) + { + Marshal.Copy(ctx.array, 0, instance.StdByteArray_GetData(ctx.pArray), elementCount); + } + }, + (pArray, array) + ); } private static Ptr NewFromArray(IV8SplitProxyNative instance, byte[] array) @@ -227,13 +291,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -248,54 +312,90 @@ public readonly struct Ptr internal static class StdInt32Array { - public static IScope CreateScope(int elementCount = 0) + public static ValueScope CreateScope(int elementCount = 0) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => instance.StdInt32Array_New(elementCount), instance.StdInt32Array_Delete)); + return ScopeFactory.Create( + static elementCount => V8SplitProxyNative.InvokeRaw(static (instance, elementCount) => instance.StdInt32Array_New(elementCount), elementCount), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdInt32Array_Delete(pArray), pArray), + elementCount + ); } - public static IScope CreateScope(int[] array) + public static ValueScope CreateScope(int[] array) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => NewFromArray(instance, array), instance.StdInt32Array_Delete)); + return ScopeFactory.Create( + static array => V8SplitProxyNative.InvokeRaw(static (instance, array) => NewFromArray(instance, array), array), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdInt32Array_Delete(pArray), pArray), + array + ); } public static int GetElementCount(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => instance.StdInt32Array_GetElementCount(pArray)); + return V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdInt32Array_GetElementCount(pArray), pArray); } public static void SetElementCount(Ptr pArray, int elementCount) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.StdInt32Array_SetElementCount(pArray, elementCount)); + V8SplitProxyNative.InvokeRaw(static (instance, ctx) => instance.StdInt32Array_SetElementCount(ctx.pArray, ctx.elementCount), (pArray, elementCount)); } public static int[] ToArray(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = instance.StdInt32Array_GetElementCount(pArray); - var array = new int[elementCount]; - - if (elementCount > 0) + return V8SplitProxyNative.InvokeRaw( + static (instance, pArray) => { - Marshal.Copy(instance.StdInt32Array_GetData(pArray), array, 0, elementCount); - } + var elementCount = instance.StdInt32Array_GetElementCount(pArray); + var array = new int[elementCount]; - return array; - }); + if (elementCount > 0) + { + Marshal.Copy(instance.StdInt32Array_GetData(pArray), array, 0, elementCount); + } + + return array; + }, + pArray + ); } public static void CopyFromArray(Ptr pArray, int[] array) { - V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = array?.Length ?? 0; - instance.StdInt32Array_SetElementCount(pArray, elementCount); + V8SplitProxyNative.InvokeRaw( + static (instance, ctx) => + { + var elementCount = ctx.array?.Length ?? 0; + instance.StdInt32Array_SetElementCount(ctx.pArray, elementCount); + + if (elementCount > 0) + { + Marshal.Copy(ctx.array, 0, instance.StdInt32Array_GetData(ctx.pArray), elementCount); + } + }, + (pArray, array) + ); + } - if (elementCount > 0) + public static void CopyFromEnumerable(Ptr pArray, IEnumerable source) + { + V8SplitProxyNative.InvokeRaw( + static (instance, ctx) => { - Marshal.Copy(array, 0, instance.StdInt32Array_GetData(pArray), elementCount); - } - }); + var itemCount = ctx.source?.Count() ?? 0; + instance.StdInt32Array_SetElementCount(ctx.pArray, itemCount); + + if (itemCount > 0) + { + var index = 0; + var pData = instance.StdInt32Array_GetData(ctx.pArray); + foreach (var item in ctx.source) + { + Marshal.WriteInt32(pData, index++, item); + } + } + }, + (pArray, source) + ); } private static Ptr NewFromArray(IV8SplitProxyNative instance, int[] array) @@ -319,13 +419,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -340,54 +440,68 @@ public readonly struct Ptr internal static class StdUInt32Array { - public static IScope CreateScope(int elementCount = 0) + public static ValueScope CreateScope(int elementCount = 0) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => instance.StdUInt32Array_New(elementCount), instance.StdUInt32Array_Delete)); + return ScopeFactory.Create( + static elementCount => V8SplitProxyNative.InvokeRaw(static (instance, elementCount) => instance.StdUInt32Array_New(elementCount), elementCount), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdUInt32Array_Delete(pArray), pArray), + elementCount + ); } - public static IScope CreateScope(uint[] array) + public static ValueScope CreateScope(uint[] array) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => NewFromArray(instance, array), instance.StdUInt32Array_Delete)); + return ScopeFactory.Create( + static array => V8SplitProxyNative.InvokeRaw(static (instance, array) => NewFromArray(instance, array), array), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdUInt32Array_Delete(pArray), pArray), + array + ); } public static int GetElementCount(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => instance.StdUInt32Array_GetElementCount(pArray)); + return V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdUInt32Array_GetElementCount(pArray), pArray); } public static void SetElementCount(Ptr pArray, int elementCount) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.StdUInt32Array_SetElementCount(pArray, elementCount)); + V8SplitProxyNative.InvokeRaw(static (instance, ctx) => instance.StdUInt32Array_SetElementCount(ctx.pArray, ctx.elementCount), (pArray, elementCount)); } public static uint[] ToArray(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = instance.StdUInt32Array_GetElementCount(pArray); - var array = new uint[elementCount]; - - if (elementCount > 0) + return V8SplitProxyNative.InvokeRaw( + static (instance, pArray) => { - UnmanagedMemoryHelpers.Copy(instance.StdUInt32Array_GetData(pArray), (ulong)elementCount, array, 0); - } + var elementCount = instance.StdUInt32Array_GetElementCount(pArray); + var array = new uint[elementCount]; - return array; - }); + if (elementCount > 0) + { + UnmanagedMemoryHelpers.Copy(instance.StdUInt32Array_GetData(pArray), (ulong)elementCount, array, 0); + } + + return array; + }, + pArray + ); } public static void CopyFromArray(Ptr pArray, uint[] array) { - V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = array?.Length ?? 0; - instance.StdUInt32Array_SetElementCount(pArray, elementCount); - - if (elementCount > 0) + V8SplitProxyNative.InvokeRaw( + static (instance, ctx) => { - UnmanagedMemoryHelpers.Copy(array, 0, (ulong)elementCount, instance.StdUInt32Array_GetData(pArray)); - } - }); + var elementCount = ctx.array?.Length ?? 0; + instance.StdUInt32Array_SetElementCount(ctx.pArray, elementCount); + + if (elementCount > 0) + { + UnmanagedMemoryHelpers.Copy(ctx.array, 0, (ulong)elementCount, instance.StdUInt32Array_GetData(ctx.pArray)); + } + }, + (pArray, array) + ); } private static Ptr NewFromArray(IV8SplitProxyNative instance, uint[] array) @@ -411,13 +525,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -432,54 +546,68 @@ public readonly struct Ptr internal static class StdUInt64Array { - public static IScope CreateScope(int elementCount = 0) + public static ValueScope CreateScope(int elementCount = 0) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => instance.StdUInt64Array_New(elementCount), instance.StdUInt64Array_Delete)); + return ScopeFactory.Create( + static elementCount => V8SplitProxyNative.InvokeRaw(static (instance, elementCount) => instance.StdUInt64Array_New(elementCount), elementCount), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdUInt64Array_Delete(pArray), pArray), + elementCount + ); } - public static IScope CreateScope(ulong[] array) + public static ValueScope CreateScope(ulong[] array) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => NewFromArray(instance, array), instance.StdUInt64Array_Delete)); + return ScopeFactory.Create( + static array => V8SplitProxyNative.InvokeRaw(static (instance, array) => NewFromArray(instance, array), array), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdUInt64Array_Delete(pArray), pArray), + array + ); } public static int GetElementCount(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => instance.StdUInt64Array_GetElementCount(pArray)); + return V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdUInt64Array_GetElementCount(pArray), pArray); } public static void SetElementCount(Ptr pArray, int elementCount) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.StdUInt64Array_SetElementCount(pArray, elementCount)); + V8SplitProxyNative.InvokeRaw(static (instance, ctx) => instance.StdUInt64Array_SetElementCount(ctx.pArray, ctx.elementCount), (pArray, elementCount)); } public static ulong[] ToArray(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = instance.StdUInt64Array_GetElementCount(pArray); - var array = new ulong[elementCount]; - - if (elementCount > 0) + return V8SplitProxyNative.InvokeRaw( + static (instance, pArray) => { - UnmanagedMemoryHelpers.Copy(instance.StdUInt64Array_GetData(pArray), (ulong)elementCount, array, 0); - } + var elementCount = instance.StdUInt64Array_GetElementCount(pArray); + var array = new ulong[elementCount]; - return array; - }); + if (elementCount > 0) + { + UnmanagedMemoryHelpers.Copy(instance.StdUInt64Array_GetData(pArray), (ulong)elementCount, array, 0); + } + + return array; + }, + pArray + ); } public static void CopyFromArray(Ptr pArray, ulong[] array) { - V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = array?.Length ?? 0; - instance.StdUInt64Array_SetElementCount(pArray, elementCount); - - if (elementCount > 0) + V8SplitProxyNative.InvokeRaw( + static (instance, ctx) => { - UnmanagedMemoryHelpers.Copy(array, 0, (ulong)elementCount, instance.StdUInt64Array_GetData(pArray)); - } - }); + var elementCount = ctx.array?.Length ?? 0; + instance.StdUInt64Array_SetElementCount(ctx.pArray, elementCount); + + if (elementCount > 0) + { + UnmanagedMemoryHelpers.Copy(ctx.array, 0, (ulong)elementCount, instance.StdUInt64Array_GetData(ctx.pArray)); + } + }, + (pArray, array) + ); } private static Ptr NewFromArray(IV8SplitProxyNative instance, ulong[] array) @@ -503,13 +631,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -524,54 +652,68 @@ public readonly struct Ptr internal static class StdPtrArray { - public static IScope CreateScope(int elementCount = 0) + public static ValueScope CreateScope(int elementCount = 0) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => instance.StdPtrArray_New(elementCount), instance.StdPtrArray_Delete)); + return ScopeFactory.Create( + static elementCount => V8SplitProxyNative.InvokeRaw(static (instance, elementCount) => instance.StdPtrArray_New(elementCount), elementCount), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdPtrArray_Delete(pArray), pArray), + elementCount + ); } - public static IScope CreateScope(IntPtr[] array) + public static ValueScope CreateScope(IntPtr[] array) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => NewFromArray(instance, array), instance.StdPtrArray_Delete)); + return ScopeFactory.Create( + static array => V8SplitProxyNative.InvokeRaw(static (instance, array) => NewFromArray(instance, array), array), + static pArray => V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdPtrArray_Delete(pArray), pArray), + array + ); } public static int GetElementCount(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => instance.StdPtrArray_GetElementCount(pArray)); + return V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdPtrArray_GetElementCount(pArray), pArray); } public static void SetElementCount(Ptr pArray, int elementCount) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.StdPtrArray_SetElementCount(pArray, elementCount)); + V8SplitProxyNative.InvokeRaw(static (instance, ctx) => instance.StdPtrArray_SetElementCount(ctx.pArray, ctx.elementCount), (pArray, elementCount)); } public static IntPtr[] ToArray(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = instance.StdPtrArray_GetElementCount(pArray); - var array = new IntPtr[elementCount]; - - if (elementCount > 0) + return V8SplitProxyNative.InvokeRaw( + static (instance, pArray) => { - Marshal.Copy(instance.StdPtrArray_GetData(pArray), array, 0, elementCount); - } + var elementCount = instance.StdPtrArray_GetElementCount(pArray); + var array = new IntPtr[elementCount]; - return array; - }); + if (elementCount > 0) + { + Marshal.Copy(instance.StdPtrArray_GetData(pArray), array, 0, elementCount); + } + + return array; + }, + pArray + ); } public static void CopyFromArray(Ptr pArray, IntPtr[] array) { - V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = array?.Length ?? 0; - instance.StdPtrArray_SetElementCount(pArray, elementCount); - - if (elementCount > 0) + V8SplitProxyNative.InvokeRaw( + static (instance, ctx) => { - Marshal.Copy(array, 0, instance.StdPtrArray_GetData(pArray), elementCount); - } - }); + var elementCount = ctx.array?.Length ?? 0; + instance.StdPtrArray_SetElementCount(ctx.pArray, elementCount); + + if (elementCount > 0) + { + Marshal.Copy(ctx.array, 0, instance.StdPtrArray_GetData(ctx.pArray), elementCount); + } + }, + (pArray, array) + ); } private static Ptr NewFromArray(IV8SplitProxyNative instance, IntPtr[] array) @@ -595,13 +737,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -616,62 +758,76 @@ public readonly struct Ptr internal static class StdV8ValueArray { - public static IScope CreateScope(int elementCount = 0) + public static ValueScope CreateScope(int elementCount = 0) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => instance.StdV8ValueArray_New(elementCount), instance.StdV8ValueArray_Delete)); + return ScopeFactory.Create( + static elementCount => V8SplitProxyNative.InvokeRaw(static (instance, elementCount) => instance.StdV8ValueArray_New(elementCount), elementCount), + static pArray => V8SplitProxyNative.InvokeNoThrow(static (instance, pArray) => instance.StdV8ValueArray_Delete(pArray), pArray), + elementCount + ); } - public static IScope CreateScope(object[] array) + public static ValueScope CreateScope(object[] array) { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(() => NewFromArray(instance, array), instance.StdV8ValueArray_Delete)); + return ScopeFactory.Create( + static array => V8SplitProxyNative.InvokeNoThrow(static (instance, array) => NewFromArray(instance, array), array), + static pArray => V8SplitProxyNative.InvokeNoThrow(static (instance, pArray) => instance.StdV8ValueArray_Delete(pArray), pArray), + array + ); } public static int GetElementCount(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => instance.StdV8ValueArray_GetElementCount(pArray)); + return V8SplitProxyNative.InvokeRaw(static (instance, pArray) => instance.StdV8ValueArray_GetElementCount(pArray), pArray); } public static void SetElementCount(Ptr pArray, int elementCount) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.StdV8ValueArray_SetElementCount(pArray, elementCount)); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.StdV8ValueArray_SetElementCount(ctx.pArray, ctx.elementCount), (pArray, elementCount)); } public static object[] ToArray(Ptr pArray) { - return V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = instance.StdV8ValueArray_GetElementCount(pArray); - var array = new object[elementCount]; - - if (elementCount > 0) + return V8SplitProxyNative.InvokeNoThrow( + static (instance, pArray) => { - var pElements = instance.StdV8ValueArray_GetData(pArray); - for (var index = 0; index < elementCount; index++) + var elementCount = instance.StdV8ValueArray_GetElementCount(pArray); + var array = new object[elementCount]; + + if (elementCount > 0) { - array[index] = V8Value.Get(GetElementPtr(pElements, index)); + var pElements = instance.StdV8ValueArray_GetData(pArray); + for (var index = 0; index < elementCount; index++) + { + array[index] = V8Value.Get(GetElementPtr(pElements, index)); + } } - } - return array; - }); + return array; + }, + pArray + ); } public static void CopyFromArray(Ptr pArray, object[] array) { - V8SplitProxyNative.InvokeNoThrow(instance => - { - var elementCount = array?.Length ?? 0; - instance.StdV8ValueArray_SetElementCount(pArray, elementCount); - - if (elementCount > 0) + V8SplitProxyNative.InvokeNoThrow( + static (instance, ctx) => { - var pElements = instance.StdV8ValueArray_GetData(pArray); - for (var index = 0; index < elementCount; index++) + var elementCount = ctx.array?.Length ?? 0; + instance.StdV8ValueArray_SetElementCount(ctx.pArray, elementCount); + + if (elementCount > 0) { - V8Value.Set(GetElementPtr(pElements, index), array[index]); + var pElements = instance.StdV8ValueArray_GetData(ctx.pArray); + for (var index = 0; index < elementCount; index++) + { + V8Value.Set(GetElementPtr(pElements, index), ctx.array[index]); + } } - } - }); + }, + (pArray, array) + ); } private static Ptr NewFromArray(IV8SplitProxyNative instance, object[] array) @@ -701,13 +857,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -724,12 +880,18 @@ internal static class V8Value { public const int Size = 16; - public static IScope CreateScope() + private const short positiveOrZero = 0; + private const short negative = 1; + + public static ValueScope CreateScope() { - return V8SplitProxyNative.InvokeNoThrow(instance => Scope.Create(instance.V8Value_New, instance.V8Value_Delete)); + return ScopeFactory.Create( + static () => V8SplitProxyNative.InvokeRaw(static instance => instance.V8Value_New()), + static pV8Value => V8SplitProxyNative.InvokeNoThrow(static (instance, pV8Value) => instance.V8Value_Delete(pV8Value), pV8Value) + ); } - public static IScope CreateScope(object obj) + public static ValueScope CreateScope(object obj) { var scope = CreateScope(); Set(scope.Value, obj); @@ -741,260 +903,173 @@ public static void Set(Ptr pV8Value, object obj) if (obj is Nonexistent) { SetNonexistent(pV8Value); - return; } - - if (obj == null) + else if (obj is null) { SetUndefined(pV8Value); - return; } - - if (obj is DBNull) + else if (obj is DBNull) { SetNull(pV8Value); - return; } - + else if (obj is bool boolValue) { - if (obj is bool value) - { - SetBoolean(pV8Value, value); - return; - } + SetBoolean(pV8Value, boolValue); } - + else if (obj is char charValue) { - if (obj is char value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, charValue); } - + else if (obj is sbyte sbyteValue) { - if (obj is sbyte value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, sbyteValue); } - + else if (obj is byte byteValue) { - if (obj is byte value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, byteValue); } - + else if (obj is short shortValue) { - if (obj is short value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, shortValue); } - + else if (obj is ushort ushortValue) { - if (obj is ushort value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, ushortValue); } - + else if (obj is int intValue) { - if (obj is int value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, intValue); } - + else if (obj is uint uintValue) { - if (obj is uint value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, uintValue); } - + else if (obj is long longValue) { - if (obj is long value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, longValue); } - + else if (obj is ulong ulongValue) { - if (obj is ulong value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, ulongValue); } - + else if (obj is float floatValue) { - if (obj is float value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, floatValue); } - + else if (obj is double doubleValue) { - if (obj is double value) - { - SetNumeric(pV8Value, value); - return; - } + SetNumber(pV8Value, doubleValue); } - + else if (obj is decimal decimalValue) { - if (obj is decimal value) - { - SetNumeric(pV8Value, (double)value); - return; - } + SetNumber(pV8Value, (double)decimalValue); } - + else if (obj is string stringValue) { - if (obj is string value) - { - SetString(pV8Value, value); - return; - } + SetString(pV8Value, stringValue); } - + else if (obj is DateTime dateTimeValue) { - if (obj is DateTime value) - { - SetDateTime(pV8Value, value); - return; - } + SetDateTime(pV8Value, dateTimeValue); } - + else if (obj is BigInteger bigIntegerValue) { - if (obj is BigInteger value) - { - SetBigInt(pV8Value, value); - return; - } + SetBigInteger(pV8Value, bigIntegerValue); } - + else if (obj is V8ObjectImpl v8Object) { - if (obj is V8ObjectImpl v8ObjectImpl) - { - SetV8Object(pV8Value, v8ObjectImpl); - return; - } + SetV8Object(pV8Value, v8Object); + } + else if (obj is IHostItem hostObject) + { + SetHostObject(pV8Value, hostObject); + } + else + { + SetUndefined(pV8Value); } - - SetHostObject(pV8Value, obj); } public static object Get(Ptr pV8Value) { - var decoded = default(Decoded); - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_Decode(pV8Value, out decoded)); - return decoded.Get(); - } - - private static bool TryGetBigInteger(int signBit, int wordCount, IntPtr pWords, out BigInteger result) - { - result = BigInteger.Zero; - - if (wordCount > 0) - { - var byteCount = (ulong)wordCount * sizeof(ulong); - if (byteCount >= int.MaxValue) + return V8SplitProxyNative.InvokeRaw( + static (instance, pV8Value) => { - return false; - } - - // use extra zero byte to force unsigned interpretation - var bytes = new byte[byteCount + 1]; - UnmanagedMemoryHelpers.Copy(pWords, byteCount, bytes, 0); - - // construct result and negate if necessary - result = new BigInteger(bytes); - if (signBit != 0) - { - result = BigInteger.Negate(result); - } - } - - return true; + instance.V8Value_Decode(pV8Value, out var decoded); + return decoded.Get(); + }, + pV8Value + ); } private static void SetNonexistent(Ptr pV8Value) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetNonexistent(pV8Value)); + V8SplitProxyNative.InvokeNoThrow(static (instance, pV8Value) => instance.V8Value_SetNonexistent(pV8Value), pV8Value); } private static void SetUndefined(Ptr pV8Value) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetUndefined(pV8Value)); + V8SplitProxyNative.InvokeNoThrow(static (instance, pV8Value) => instance.V8Value_SetUndefined(pV8Value), pV8Value); } private static void SetNull(Ptr pV8Value) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetNull(pV8Value)); + V8SplitProxyNative.InvokeNoThrow(static (instance, pV8Value) => instance.V8Value_SetNull(pV8Value), pV8Value); } private static void SetBoolean(Ptr pV8Value, bool value) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetBoolean(pV8Value, value)); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8Value_SetBoolean(ctx.pV8Value, ctx.value), (pV8Value, value)); } - private static void SetNumeric(Ptr pV8Value, double value) + private static void SetNumber(Ptr pV8Value, double value) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetNumber(pV8Value, value)); - } - - private static void SetNumeric(Ptr pV8Value, int value) - { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetInt32(pV8Value, value)); - } - - private static void SetNumeric(Ptr pV8Value, uint value) - { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetUInt32(pV8Value, value)); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8Value_SetNumber(ctx.pV8Value, ctx.value), (pV8Value, value)); } private static void SetString(Ptr pV8Value, string value) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetString(pV8Value, value)); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8Value_SetString(ctx.pV8Value, ctx.value), (pV8Value, value)); } private static void SetDateTime(Ptr pV8Value, DateTime value) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetDateTime(pV8Value, (value.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds)); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8Value_SetDateTime(ctx.pV8Value, ctx.value.ToUnixMilliseconds()), (pV8Value, value)); } - private static void SetBigInt(Ptr pV8Value, BigInteger value) + private static void SetBigInteger(Ptr pV8Value, BigInteger value) { - var signBit = 0; + var signBit = positiveOrZero; if (value.Sign < 0) { - signBit = 1; + signBit = negative; value = BigInteger.Negate(value); } var bytes = value.ToByteArray(); - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetBigInt(pV8Value, signBit, bytes)); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8Value_SetBigInt(ctx.pV8Value, ctx.signBit, ctx.bytes), (pV8Value, signBit, bytes)); } - private static void SetV8Object(Ptr pV8Value, V8ObjectImpl v8ObjectImpl) + private static void SetV8Object(Ptr pV8Value, V8ObjectImpl v8Object) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetV8Object(pV8Value, v8ObjectImpl.Handle, v8ObjectImpl.Subtype, v8ObjectImpl.Flags)); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8Value_SetV8Object(ctx.pV8Value, ctx.v8Object.Handle, ctx.v8Object.Subtype, ctx.v8Object.Flags), (pV8Value, v8Object)); } - private static void SetHostObject(Ptr pV8Value, object obj) + private static void SetHostObject(Ptr pV8Value, IHostItem hostObject) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Value_SetHostObject(pV8Value, V8ProxyHelpers.AddRefHostObject(obj))); + var subtype = Subtype.None; + var flags = Flags.None; + + if (hostObject is V8FastHostItem fastHostItem) + { + flags = Flags.Fast; + if (fastHostItem.IsInvocable) + { + subtype = Subtype.Function; + } + } + + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8Value_SetHostObject(ctx.pV8Value, V8ProxyHelpers.AddRefHostObject(ctx.obj), ctx.subtype, ctx.flags), (pV8Value, obj: hostObject, subtype, flags)); } #region Nested type: Type @@ -1007,8 +1082,6 @@ public enum Type : byte Null, Boolean, Number, - Int32, - UInt32, String, DateTime, BigInt, @@ -1053,10 +1126,16 @@ public enum Flags : ushort // IMPORTANT: maintain bitwise equivalence with native enum V8Value::Flags None = 0, Shared = 0x0001, + Fast = 0x0001, Async = 0x0002, - Generator = 0x0004 + Generator = 0x0004, + Pending = 0x0008, + Rejected = 0x0010 } + public static bool HasAllFlags(this Flags value, Flags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this Flags value, Flags flags) => (value & flags) != 0; + #endregion #region Nested type: Ptr @@ -1067,13 +1146,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -1085,12 +1164,12 @@ public readonly struct Ptr #endregion - #region Nested type: Decoded + #region Nested type: WireData [StructLayout(LayoutKind.Explicit)] - public struct Decoded + public struct WireData { - // IMPORTANT: maintain bitwise equivalence with native struct V8Value::Decoded + // IMPORTANT: maintain bitwise equivalence with native struct V8Value::WireData [FieldOffset(0)] public Type Type; [FieldOffset(1)] public Subtype Subtype; [FieldOffset(2)] public Flags Flags; @@ -1098,13 +1177,50 @@ public struct Decoded [FieldOffset(4)] public int Length; [FieldOffset(4)] public int IdentityHash; [FieldOffset(8)] public int Int32Value; - [FieldOffset(8)] public uint UInt32Value; [FieldOffset(8)] public double DoubleValue; [FieldOffset(8)] public IntPtr PtrOrHandle; + public readonly bool TryCreateBigInteger(out BigInteger value) + { + value = BigInteger.Zero; + + if (Length > 0) + { + var byteCount = (ulong)Length * sizeof(ulong); + if (byteCount >= int.MaxValue) + { + return false; + } + + // use extra zero byte to force unsigned interpretation + var bytes = new byte[byteCount + 1]; + UnmanagedMemoryHelpers.Copy(PtrOrHandle, byteCount, bytes, 0); + + // construct result and negate if necessary + value = new BigInteger(bytes); + if (SignBit != 0) + { + value = BigInteger.Negate(value); + } + } + + return true; + } + } + + #endregion + + #region Nested type: Decoded + + [StructLayout(LayoutKind.Explicit)] + public struct Decoded + { + // IMPORTANT: maintain bitwise equivalence with native struct V8Value::Decoded + [FieldOffset(0)] private WireData data; + public object Get() { - switch (Type) + switch (data.Type) { case Type.Nonexistent: return Nonexistent.Value; @@ -1113,41 +1229,32 @@ public object Get() return DBNull.Value; case Type.Boolean: - return Int32Value != 0; + return data.Int32Value != 0; case Type.Number: - return DoubleValue; - - case Type.Int32: - return Int32Value; - - case Type.UInt32: - return UInt32Value; + return data.DoubleValue; case Type.String: - return Marshal.PtrToStringUni(PtrOrHandle, Length); + return Marshal.PtrToStringUni(data.PtrOrHandle, data.Length); case Type.DateTime: - return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) + TimeSpan.FromMilliseconds(DoubleValue); + return DateTimeHelpers.FromUnixMilliseconds(data.DoubleValue); case Type.BigInt: - return TryGetBigInteger(SignBit, Length, PtrOrHandle, out var result) ? (object)result : null; + return data.TryCreateBigInteger(out var result) ? result : null; case Type.V8Object: - return new V8ObjectImpl((V8Object.Handle)PtrOrHandle, Subtype, Flags, IdentityHash); + return new V8ObjectImpl((V8Object.Handle)data.PtrOrHandle, data.Subtype, data.Flags, data.IdentityHash); case Type.HostObject: - return V8ProxyHelpers.GetHostObject(PtrOrHandle); + return V8ProxyHelpers.GetHostObject(data.PtrOrHandle); default: return null; } } - public static unsafe object Get(Ptr pValues, int index) - { - return ((Decoded*)(IntPtr)pValues + index)->Get(); - } + public static unsafe object Get(Ptr pValues, int index) => ((Decoded*)(IntPtr)pValues + index)->Get(); public static object[] ToArray(int count, Ptr pValues) { @@ -1170,13 +1277,354 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); + + public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; + public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; + + public static explicit operator IntPtr(Ptr ptr) => ptr.bits; + public static explicit operator Ptr(IntPtr bits) => new(bits); + + public unsafe ref Decoded AsRef() => ref Unsafe.AsRef(bits.ToPointer()); + public unsafe ReadOnlySpan ToSpan(int length) => new(bits.ToPointer(), length); + + #region Object overrides + + public override bool Equals(object obj) => (obj is Ptr ptr) && (this == ptr); + public override int GetHashCode() => bits.GetHashCode(); + + #endregion + } + + #endregion + } + + #endregion + + #region Nested type: FastArg + + [StructLayout(LayoutKind.Explicit)] + public readonly struct FastArg + { + // IMPORTANT: maintain bitwise equivalence with native struct V8Value::FastArg + [FieldOffset(0)] private readonly WireData data; + + public bool IsUndefined() => (data.Type == Type.Undefined) || (data.Type == Type.Nonexistent); + + public bool IsNull() => data.Type == Type.Null; + + public bool TryGetBoolean(out bool value) + { + if (data.Type == Type.Boolean) + { + value = data.Int32Value != 0; + return true; + } + + value = false; + return false; + } + + public bool TryGetNumber(out double value) + { + if (data.Type == Type.Number) + { + value = data.DoubleValue; + return true; + } + + value = 0; + return false; + } + + public bool TryGetString(out string value) + { + if (data.Type == Type.String) + { + value = Marshal.PtrToStringUni(data.PtrOrHandle, data.Length); + return true; + } + + value = null; + return false; + } + + public unsafe bool TryGetCharSpan(out ReadOnlySpan value) + { + if (data.Type == Type.String) + { + value = new ReadOnlySpan(data.PtrOrHandle.ToPointer(), data.Length); + return true; + } + + value = ReadOnlySpan.Empty; + return false; + } + + public bool TryGetDateTime(out DateTime value) + { + if (data.Type == Type.DateTime) + { + value = DateTimeHelpers.FromUnixMilliseconds(data.DoubleValue); + return true; + } + + value = default; + return false; + } + + public bool TryGetBigInteger(out BigInteger value) + { + if (data.Type == Type.BigInt) + { + return data.TryCreateBigInteger(out value); + } + + value = default; + return false; + } + + public bool TryGetV8Object(out V8ObjectImpl v8Object) + { + if (data.Type == Type.V8Object) + { + v8Object = new V8ObjectImpl((V8Object.Handle)V8Entity.CloneHandle((V8Object.Handle)data.PtrOrHandle), data.Subtype, data.Flags, data.IdentityHash); + return true; + } + + v8Object = null; + return false; + } + + public bool TryGetHostObject(out object hostObject) + { + if (data.Type == Type.HostObject) + { + hostObject = V8ProxyHelpers.GetHostObject(data.PtrOrHandle); + return true; + } + + hostObject = null; + return false; + } + + #region Nested type: Ptr + + // ReSharper disable once MemberHidesStaticFromOuterClass + public readonly struct Ptr + { + private readonly IntPtr bits; + + private Ptr(IntPtr bits) => this.bits = bits; + + public static readonly Ptr Null = new(IntPtr.Zero); + + public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; + public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; + + public static explicit operator IntPtr(Ptr ptr) => ptr.bits; + public static explicit operator Ptr(IntPtr bits) => new(bits); + + public unsafe ref FastArg AsRef() => ref Unsafe.AsRef(bits.ToPointer()); + public unsafe ReadOnlySpan ToSpan(int length) => new(bits.ToPointer(), length); + + #region Object overrides + + public override bool Equals(object obj) => (obj is Ptr ptr) && (this == ptr); + public override int GetHashCode() => bits.GetHashCode(); + + #endregion + } + + #endregion + } + + #endregion + + #region Nested type: FastResult + + [StructLayout(LayoutKind.Explicit)] + public struct FastResult + { + // IMPORTANT: maintain bitwise equivalence with native struct V8Value::FastResult + [FieldOffset(0)] private WireData data; + + public bool IsNonexistent => data.Type == Type.Nonexistent; + + public void SetUndefined() + { + Debug.Assert(IsNonexistent); + data.Type = Type.Undefined; + } + + public void SetNull() + { + Debug.Assert(IsNonexistent); + data.Type = Type.Null; + } + + public void SetBoolean(bool value) + { + Debug.Assert(IsNonexistent); + data.Type = Type.Boolean; + data.Int32Value = value ? 1 : 0; + } + + public void SetNumber(double value) + { + Debug.Assert(IsNonexistent); + data.Type = Type.Number; + data.DoubleValue = value; + } + + public void SetString(string value) + { + Debug.Assert(IsNonexistent); + data.Type = Type.String; + data.Length = value.Length; + data.PtrOrHandle = CreateStringData(value); + } + + public void SetString(in ReadOnlySpan value) + { + Debug.Assert(IsNonexistent); + data.Type = Type.String; + data.Length = value.Length; + data.PtrOrHandle = CreateStringData(value); + } + + public void SetDateTime(DateTime value) + { + Debug.Assert(IsNonexistent); + data.Type = Type.DateTime; + data.DoubleValue = value.ToUnixMilliseconds(); + } + + public void SetBigInteger(BigInteger value) + { + Debug.Assert(IsNonexistent); + data.Type = Type.BigInt; + data.PtrOrHandle = CreateBigIntData(value, out data.SignBit, out data.Length); + } + + public void SetV8Object(V8ObjectImpl v8Object) + { + Debug.Assert(IsNonexistent); + data.Type = Type.V8Object; + data.Subtype = v8Object.Subtype; + data.Flags = v8Object.Flags; + data.IdentityHash = v8Object.IdentityHash; + data.PtrOrHandle = (IntPtr)V8Entity.CloneHandle(v8Object.Handle); + } + + public void SetHostObject(IHostItem hostObject) + { + var subtype = Subtype.None; + var flags = Flags.None; + + if (hostObject is V8FastHostItem fastHostItem) + { + flags = Flags.Fast; + if (fastHostItem.IsInvocable) + { + subtype = Subtype.Function; + } + } + + Debug.Assert(IsNonexistent); + data.Type = Type.HostObject; + data.Subtype = subtype; + data.Flags = flags; + data.PtrOrHandle = V8ProxyHelpers.AddRefHostObject(hostObject); + } + + private static unsafe IntPtr CreateStringData(string value) + { + if (string.IsNullOrEmpty(value)) + { + return IntPtr.Zero; + } + + var length = value.Length; + + var bufferSize = checked((length + 1) * sizeof(char)); + var pBuffer = V8SplitProxyNative.InvokeRaw(static (instance, size) => instance.Memory_AllocateZeroed(size), (UIntPtr)bufferSize); + + if (length > 0) + { + fixed (char* pValue = value) + { + var bytesToCopy = bufferSize - sizeof(char); + Buffer.MemoryCopy(pValue, pBuffer.ToPointer(), bytesToCopy, bytesToCopy); + } + } + + return pBuffer; + } + + private static unsafe IntPtr CreateStringData(in ReadOnlySpan value) + { + if (value.IsEmpty) + { + return IntPtr.Zero; + } + + var length = value.Length; + + var bufferSize = checked((length + 1) * sizeof(char)); + var pBuffer = V8SplitProxyNative.InvokeRaw(static (instance, size) => instance.Memory_AllocateZeroed(size), (UIntPtr)bufferSize); + + if (length > 0) + { + fixed (char* pValue = value) + { + var bytesToCopy = bufferSize - sizeof(char); + Buffer.MemoryCopy(pValue, pBuffer.ToPointer(), bytesToCopy, bytesToCopy); + } + } + + return pBuffer; + } + + private static IntPtr CreateBigIntData(BigInteger value, out short signBit, out int wordCount) + { + signBit = positiveOrZero; + if (value.Sign < 0) + { + signBit = negative; + value = BigInteger.Negate(value); + } + + var bytes = value.ToByteArray(); + var arrayLength = bytes.Length; + + wordCount = checked(arrayLength + sizeof(ulong) - 1) / sizeof(ulong); + var bufferSize = wordCount * sizeof(ulong); + var pWords = V8SplitProxyNative.InvokeRaw(static (instance, size) => instance.Memory_AllocateZeroed(size), (UIntPtr)bufferSize); + + UnmanagedMemoryHelpers.Copy(bytes, 0, (ulong)arrayLength, pWords); + return pWords; + } + + #region Nested type: Ptr + + // ReSharper disable once MemberHidesStaticFromOuterClass + public readonly struct Ptr + { + private readonly IntPtr bits; + + private Ptr(IntPtr bits) => this.bits = bits; + + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); + + public unsafe ref FastResult AsRef() => ref Unsafe.AsRef(bits.ToPointer()); + public unsafe ReadOnlySpan ToSpan(int length) => new(bits.ToPointer(), length); #region Object overrides @@ -1196,38 +1644,75 @@ internal static class V8CpuProfile { public static void ProcessProfile(V8Entity.Handle hEntity, Ptr pProfile, V8.V8CpuProfile profile) { - string name = null; - var startTimestamp = 0UL; - var endTimestamp = 0UL; - var sampleCount = 0; - var pRootNode = Node.Ptr.Null; - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8CpuProfile_GetInfo(pProfile, hEntity, out name, out startTimestamp, out endTimestamp, out sampleCount, out pRootNode)); - - profile.Name = name; - profile.StartTimestamp = startTimestamp; - profile.EndTimestamp = endTimestamp; - - if (pRootNode != Node.Ptr.Null) + var infoCtx = ( + pProfile, + hEntity, + name: (string)null, + startTimestamp: 0UL, + endTimestamp: 0UL, + sampleCount: 0, + pRootNode: Node.Ptr.Null + ); + + V8SplitProxyNative.InvokeNoThrow( + static (instance, pInfoCtx) => + { + ref var infoCtx = ref pInfoCtx.AsRef(); + instance.V8CpuProfile_GetInfo( + infoCtx.pProfile, + infoCtx.hEntity, + out infoCtx.name, + out infoCtx.startTimestamp, + out infoCtx.endTimestamp, + out infoCtx.sampleCount, + out infoCtx.pRootNode + ); + }, + StructPtr.FromRef(ref infoCtx) + ); + + profile.Name = infoCtx.name; + profile.StartTimestamp = infoCtx.startTimestamp; + profile.EndTimestamp = infoCtx.endTimestamp; + + if (infoCtx.pRootNode != Node.Ptr.Null) { - profile.RootNode = CreateNode(hEntity, pRootNode); + profile.RootNode = CreateNode(hEntity, infoCtx.pRootNode); } - if (sampleCount > 0) + if (infoCtx.sampleCount > 0) { - var samples = new List(sampleCount); + var samples = new List(infoCtx.sampleCount); - for (var index = 0; index < sampleCount; index++) + for (var index = 0; index < infoCtx.sampleCount; index++) { - var nodeId = 0UL; - var timestamp = 0UL; - var sampleIndex = index; - var found = V8SplitProxyNative.InvokeNoThrow(instance => instance.V8CpuProfile_GetSample(pProfile, sampleIndex, out nodeId, out timestamp)); + var sampleCtx = ( + pProfile, + sampleIndex: index, + nodeId: 0UL, + timestamp: 0UL + ); + + var found = V8SplitProxyNative.InvokeNoThrow( + static (instance, pSampleCtx) => + { + ref var sampleCtx = ref pSampleCtx.AsRef(); + return instance.V8CpuProfile_GetSample( + sampleCtx.pProfile, + sampleCtx.sampleIndex, + out sampleCtx.nodeId, + out sampleCtx.timestamp + ); + }, + StructPtr.FromRef(ref sampleCtx) + ); + if (found) { - var node = profile.FindNode(nodeId); - if (node != null) + var node = profile.FindNode(sampleCtx.nodeId); + if (node is not null) { - samples.Add(new V8.V8CpuProfile.Sample { Node = node, Timestamp = timestamp }); + samples.Add(new V8.V8CpuProfile.Sample { Node = node, Timestamp = sampleCtx.timestamp }); } } } @@ -1241,45 +1726,87 @@ public static void ProcessProfile(V8Entity.Handle hEntity, Ptr pProfile, V8.V8Cp private static V8.V8CpuProfile.Node CreateNode(V8Entity.Handle hEntity, Node.Ptr pNode) { - var nodeId = 0UL; - var scriptId = 0L; - string scriptName = null; - string functionName = null; - string bailoutReason = null; - var lineNumber = 0L; - var columnNumber = 0L; - var hitCount = 0UL; - var hitLineCount = 0U; - var childCount = 0; - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8CpuProfileNode_GetInfo(pNode, hEntity, out nodeId, out scriptId, out scriptName, out functionName, out bailoutReason, out lineNumber, out columnNumber, out hitCount, out hitLineCount, out childCount)); + var infoCtx = ( + pNode, + hEntity, + nodeId: 0UL, + scriptId: 0L, + scriptName: (string)null, + functionName: (string)null, + bailoutReason: (string)null, + lineNumber: 0L, + columnNumber: 0L, + hitCount: 0UL, + hitLineCount: 0U, + childCount: 0 + ); + + V8SplitProxyNative.InvokeNoThrow( + static (instance, pInfoCtx) => + { + ref var infoCtx = ref pInfoCtx.AsRef(); + instance.V8CpuProfileNode_GetInfo( + infoCtx.pNode, + infoCtx.hEntity, + out infoCtx.nodeId, + out infoCtx.scriptId, + out infoCtx.scriptName, + out infoCtx.functionName, + out infoCtx.bailoutReason, + out infoCtx.lineNumber, + out infoCtx.columnNumber, + out infoCtx.hitCount, + out infoCtx.hitLineCount, + out infoCtx.childCount + ); + }, + StructPtr.FromRef(ref infoCtx) + ); var node = new V8.V8CpuProfile.Node { - NodeId = nodeId, - ScriptId = scriptId, - ScriptName = scriptName, - FunctionName = functionName, - BailoutReason = bailoutReason, - LineNumber = lineNumber, - ColumnNumber = columnNumber, - HitCount = hitCount, + NodeId = infoCtx.nodeId, + ScriptId = infoCtx.scriptId, + ScriptName = infoCtx.scriptName, + FunctionName = infoCtx.functionName, + BailoutReason = infoCtx.bailoutReason, + LineNumber = infoCtx.lineNumber, + ColumnNumber = infoCtx.columnNumber, + HitCount = infoCtx.hitCount, }; - if (hitLineCount > 0) + if (infoCtx.hitLineCount > 0) { - int[] lineNumbers = null; - uint[] hitCounts = null; - if (V8SplitProxyNative.InvokeNoThrow(instance => instance.V8CpuProfileNode_GetHitLines(pNode, out lineNumbers, out hitCounts))) + var hitLinesCtx = ( + pNode, + lineNumbers: (int[])null, + hitCounts: (uint[])null + ); + + var found = V8SplitProxyNative.InvokeNoThrow( + static (instance, pHitLinesCtx) => + { + ref var hitLinesCtx = ref pHitLinesCtx.AsRef(); + return instance.V8CpuProfileNode_GetHitLines( + hitLinesCtx.pNode, + out hitLinesCtx.lineNumbers, + out hitLinesCtx.hitCounts + ); + }, + StructPtr.FromRef(ref hitLinesCtx) + ); + + if (found) { - var actualHitLineCount = Math.Min(lineNumbers.Length, hitCounts.Length); + var actualHitLineCount = Math.Min(hitLinesCtx.lineNumbers.Length, hitLinesCtx.hitCounts.Length); if (actualHitLineCount > 0) { var hitLines = new V8.V8CpuProfile.Node.HitLine[actualHitLineCount]; for (var index = 0; index < actualHitLineCount; index++) { - hitLines[index].LineNumber = lineNumbers[index]; - hitLines[index].HitCount = hitCounts[index]; + hitLines[index].LineNumber = hitLinesCtx.lineNumbers[index]; + hitLines[index].HitCount = hitLinesCtx.hitCounts[index]; } node.HitLines = new ReadOnlyCollection(hitLines); @@ -1287,14 +1814,14 @@ private static V8.V8CpuProfile.Node CreateNode(V8Entity.Handle hEntity, Node.Ptr } } - if (childCount > 0) + if (infoCtx.childCount > 0) { - var childNodes = new List(childCount); + var childNodes = new List(infoCtx.childCount); - for (var index = 0; index < childCount; index++) + for (var index = 0; index < infoCtx.childCount; index++) { var childIndex = index; - var pChildNode = V8SplitProxyNative.InvokeNoThrow(instance => instance.V8CpuProfileNode_GetChildNode(pNode, childIndex)); + var pChildNode = V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8CpuProfileNode_GetChildNode(ctx.pNode, ctx.childIndex), (pNode, childIndex)); if (pChildNode != Node.Ptr.Null) { childNodes.Add(CreateNode(hEntity, pChildNode)); @@ -1318,13 +1845,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -1349,13 +1876,13 @@ public readonly struct Ptr private Ptr(IntPtr bits) => this.bits = bits; - public static readonly Ptr Null = new Ptr(IntPtr.Zero); + public static readonly Ptr Null = new(IntPtr.Zero); public static bool operator ==(Ptr left, Ptr right) => left.bits == right.bits; public static bool operator !=(Ptr left, Ptr right) => left.bits != right.bits; public static explicit operator IntPtr(Ptr ptr) => ptr.bits; - public static explicit operator Ptr(IntPtr bits) => new Ptr(bits); + public static explicit operator Ptr(IntPtr bits) => new(bits); #region Object overrides @@ -1377,6 +1904,11 @@ public readonly struct Ptr internal static class V8Entity { + public static Handle CloneHandle(Handle handle) + { + return V8SplitProxyNative.InvokeRaw(static (instance, handle) => instance.V8Entity_CloneHandle(handle), handle); + } + #region Nested type: Handle public readonly struct Handle @@ -1385,13 +1917,13 @@ public readonly struct Handle private Handle(IntPtr guts) => this.guts = guts; - public static readonly Handle Empty = new Handle(IntPtr.Zero); + public static readonly Handle Empty = new(IntPtr.Zero); public static bool operator ==(Handle left, Handle right) => left.guts == right.guts; public static bool operator !=(Handle left, Handle right) => left.guts != right.guts; public static explicit operator IntPtr(Handle handle) => handle.guts; - public static explicit operator Handle(IntPtr guts) => new Handle(guts); + public static explicit operator Handle(IntPtr guts) => new(guts); #region Object overrides @@ -1414,13 +1946,13 @@ public readonly struct Handle private Handle(IntPtr guts) => this.guts = guts; - public static readonly Handle Empty = new Handle(IntPtr.Zero); + public static readonly Handle Empty = new(IntPtr.Zero); public static bool operator ==(Handle left, Handle right) => left.guts == right.guts; public static bool operator !=(Handle left, Handle right) => left.guts != right.guts; public static explicit operator IntPtr(Handle handle) => handle.guts; - public static explicit operator Handle(IntPtr guts) => new Handle(guts); + public static explicit operator Handle(IntPtr guts) => new(guts); public static implicit operator V8Entity.Handle(Handle handle) => (V8Entity.Handle)handle.guts; public static explicit operator Handle(V8Entity.Handle handle) => (Handle)(IntPtr)handle; @@ -1446,13 +1978,13 @@ public readonly struct Handle private Handle(IntPtr guts) => this.guts = guts; - public static readonly Handle Empty = new Handle(IntPtr.Zero); + public static readonly Handle Empty = new(IntPtr.Zero); public static bool operator ==(Handle left, Handle right) => left.guts == right.guts; public static bool operator !=(Handle left, Handle right) => left.guts != right.guts; public static explicit operator IntPtr(Handle handle) => handle.guts; - public static explicit operator Handle(IntPtr guts) => new Handle(guts); + public static explicit operator Handle(IntPtr guts) => new(guts); public static implicit operator V8Entity.Handle(Handle handle) => (V8Entity.Handle)handle.guts; public static explicit operator Handle(V8Entity.Handle handle) => (Handle)(IntPtr)handle; @@ -1478,13 +2010,13 @@ public readonly struct Handle private Handle(IntPtr guts) => this.guts = guts; - public static readonly Handle Empty = new Handle(IntPtr.Zero); + public static readonly Handle Empty = new(IntPtr.Zero); public static bool operator ==(Handle left, Handle right) => left.guts == right.guts; public static bool operator !=(Handle left, Handle right) => left.guts != right.guts; public static explicit operator IntPtr(Handle handle) => handle.guts; - public static explicit operator Handle(IntPtr guts) => new Handle(guts); + public static explicit operator Handle(IntPtr guts) => new(guts); public static implicit operator V8Entity.Handle(Handle handle) => (V8Entity.Handle)handle.guts; public static explicit operator Handle(V8Entity.Handle handle) => (Handle)(IntPtr)handle; @@ -1510,13 +2042,13 @@ public readonly struct Handle private Handle(IntPtr guts) => this.guts = guts; - public static readonly Handle Empty = new Handle(IntPtr.Zero); + public static readonly Handle Empty = new(IntPtr.Zero); public static bool operator ==(Handle left, Handle right) => left.guts == right.guts; public static bool operator !=(Handle left, Handle right) => left.guts != right.guts; public static explicit operator IntPtr(Handle handle) => handle.guts; - public static explicit operator Handle(IntPtr guts) => new Handle(guts); + public static explicit operator Handle(IntPtr guts) => new(guts); public static implicit operator V8Entity.Handle(Handle handle) => (V8Entity.Handle)handle.guts; public static explicit operator Handle(V8Entity.Handle handle) => (Handle)(IntPtr)handle; @@ -1542,13 +2074,13 @@ public readonly struct Handle private Handle(IntPtr guts) => this.guts = guts; - public static readonly Handle Empty = new Handle(IntPtr.Zero); + public static readonly Handle Empty = new(IntPtr.Zero); public static bool operator ==(Handle left, Handle right) => left.guts == right.guts; public static bool operator !=(Handle left, Handle right) => left.guts != right.guts; public static explicit operator IntPtr(Handle handle) => handle.guts; - public static explicit operator Handle(IntPtr guts) => new Handle(guts); + public static explicit operator Handle(IntPtr guts) => new(guts); public static implicit operator V8Entity.Handle(Handle handle) => (V8Entity.Handle)handle.guts; public static explicit operator Handle(V8Entity.Handle handle) => (Handle)(IntPtr)handle; @@ -1574,13 +2106,13 @@ public readonly struct Handle private Handle(IntPtr guts) => this.guts = guts; - public static readonly Handle Empty = new Handle(IntPtr.Zero); + public static readonly Handle Empty = new(IntPtr.Zero); public static bool operator ==(Handle left, Handle right) => left.guts == right.guts; public static bool operator !=(Handle left, Handle right) => left.guts != right.guts; public static explicit operator IntPtr(Handle handle) => handle.guts; - public static explicit operator Handle(IntPtr guts) => new Handle(guts); + public static explicit operator Handle(IntPtr guts) => new(guts); public static implicit operator V8Entity.Handle(Handle handle) => (V8Entity.Handle)handle.guts; public static explicit operator Handle(V8Entity.Handle handle) => (Handle)(IntPtr)handle; diff --git a/ClearScript/V8/SplitProxy/V8SplitProxyManaged.Net5.cs b/ClearScript/V8/SplitProxy/V8SplitProxyManaged.Net5.cs index 6989ae151..97be1056b 100644 --- a/ClearScript/V8/SplitProxy/V8SplitProxyManaged.Net5.cs +++ b/ClearScript/V8/SplitProxy/V8SplitProxyManaged.Net5.cs @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +#if NET5_0_OR_GREATER + using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -117,29 +119,29 @@ static void Thunk(IntPtr pAction) } } - private static unsafe IntPtr GetHostObjectNamedPropertyFastMethodPtr + private static unsafe IntPtr InvokeHostActionWithArgFastMethodPtr { get { [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] - static void Thunk(IntPtr pObject, StdString.Ptr pName, V8Value.Ptr pValue) + static void Thunk(IntPtr pAction, IntPtr pArg) { - GetHostObjectNamedProperty(pObject, pName, pValue); + InvokeHostActionWithArg(pAction, pArg); } - delegate* unmanaged[Stdcall] pThunk = &Thunk; + delegate* unmanaged[Stdcall] pThunk = &Thunk; return (IntPtr)pThunk; } } - private static unsafe IntPtr GetHostObjectNamedPropertyWithCacheabilityFastMethodPtr + private static unsafe IntPtr GetHostObjectNamedPropertyFastMethodPtr { get { [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] static void Thunk(IntPtr pObject, StdString.Ptr pName, V8Value.Ptr pValue, IntPtr pIsCacheable) { - GetHostObjectNamedPropertyWithCacheability(pObject, pName, pValue, out var isCacheable); + GetHostObjectNamedProperty(pObject, pName, pValue, out var isCacheable); StdBool.Write(pIsCacheable, isCacheable); } @@ -223,6 +225,84 @@ static void Thunk(IntPtr pObject, StdString.Ptr pName, int argCount, V8Value.Dec } } + private static unsafe IntPtr GetFastHostObjectNamedPropertyFastMethodPtr + { + get + { + [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] + static void Thunk(IntPtr pObject, StdString.Ptr pName, V8Value.FastResult.Ptr pValue, IntPtr pIsCacheable) + { + GetFastHostObjectNamedProperty(pObject, pName, pValue, out var isCacheable); + StdBool.Write(pIsCacheable, isCacheable); + } + + delegate* unmanaged[Stdcall] pThunk = &Thunk; + return (IntPtr)pThunk; + } + } + + private static unsafe IntPtr SetFastHostObjectNamedPropertyFastMethodPtr + { + get + { + [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] + static void Thunk(IntPtr pObject, StdString.Ptr pName, V8Value.FastArg.Ptr pValue) + { + SetFastHostObjectNamedProperty(pObject, pName, pValue); + } + + delegate* unmanaged[Stdcall] pThunk = &Thunk; + return (IntPtr)pThunk; + } + } + + private static unsafe IntPtr GetFastHostObjectIndexedPropertyFastMethodPtr + { + get + { + [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] + static void Thunk(IntPtr pObject, int index, V8Value.FastResult.Ptr pValue) + { + GetFastHostObjectIndexedProperty(pObject, index, pValue); + } + + delegate* unmanaged[Stdcall] pThunk = &Thunk; + return (IntPtr)pThunk; + } + } + + private static unsafe IntPtr SetFastHostObjectIndexedPropertyFastMethodPtr + { + get + { + [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] + static void Thunk(IntPtr pObject, int index, V8Value.FastArg.Ptr pValue) + { + SetFastHostObjectIndexedProperty(pObject, index, pValue); + } + + delegate* unmanaged[Stdcall] pThunk = &Thunk; + return (IntPtr)pThunk; + } + } + + private static unsafe IntPtr InvokeFastHostObjectFastMethodPtr + { + get + { + [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] + static void Thunk(IntPtr pObject, StdBool asConstructor, int argCount, V8Value.FastArg.Ptr pArgs, V8Value.FastResult.Ptr pResult) + { + InvokeFastHostObject(pObject, asConstructor, argCount, pArgs, pResult); + } + + delegate* unmanaged[Stdcall] pThunk = &Thunk; + return (IntPtr)pThunk; + } + } + #endregion } } + +#endif // NET5_0_OR_GREATER diff --git a/ClearScript/V8/SplitProxy/V8SplitProxyManaged.cs b/ClearScript/V8/SplitProxy/V8SplitProxyManaged.cs index a21b1f21f..4feb2a889 100644 --- a/ClearScript/V8/SplitProxy/V8SplitProxyManaged.cs +++ b/ClearScript/V8/SplitProxy/V8SplitProxyManaged.cs @@ -9,6 +9,7 @@ using System.Runtime.InteropServices; using Microsoft.ClearScript.JavaScript; using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8.FastProxy; namespace Microsoft.ClearScript.V8.SplitProxy { @@ -35,12 +36,12 @@ public static void Teardown() private static void ScheduleHostException(IntPtr pObject, Exception exception) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.HostException_Schedule(exception.GetBaseException().Message, V8ProxyHelpers.MarshalExceptionToScript(pObject, exception))); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.HostException_Schedule(ctx.exception.GetBaseException().Message, V8ProxyHelpers.MarshalExceptionToScript(ctx.pObject, ctx.exception)), (pObject, exception)); } private static void ScheduleHostException(Exception exception) { - V8SplitProxyNative.InvokeNoThrow(instance => instance.HostException_Schedule(exception.GetBaseException().Message, ScriptEngine.Current?.MarshalToScript(exception))); + V8SplitProxyNative.InvokeNoThrow(static (instance, exception) => instance.HostException_Schedule(exception.GetBaseException().Message, ScriptEngine.Current?.MarshalToScript(exception)), exception); } private static uint GetMaxCacheSizeForCategory(DocumentCategory category) @@ -85,16 +86,29 @@ [In] V8Value.Ptr pInnerException ); [UnmanagedFunctionPointer(CallingConvention.StdCall)] - private delegate void RawInvokeAction( + private delegate void RawInvokeHostAction( [In] IntPtr pAction ); + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawInvokeHostActionWithArg( + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void RawProcessArrayBufferOrViewData( [In] IntPtr pData, [In] IntPtr pAction ); + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawProcessArrayBufferOrViewDataWithArg( + [In] IntPtr pData, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void RawProcessCpuProfile( [In] V8CpuProfile.Ptr pProfile, @@ -173,13 +187,6 @@ [In] IntPtr pObject [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void RawGetHostObjectNamedProperty( - [In] IntPtr pObject, - [In] StdString.Ptr pName, - [In] V8Value.Ptr pValue - ); - - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - private delegate void RawGetHostObjectNamedPropertyWithCacheability( [In] IntPtr pObject, [In] StdString.Ptr pName, [In] V8Value.Ptr pValue, @@ -263,6 +270,94 @@ private delegate void RawGetHostObjectAsyncEnumerator( [In] V8Value.Ptr pResult ); + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawGetFastHostObjectNamedProperty( + [In] IntPtr pObject, + [In] StdString.Ptr pName, + [In] V8Value.FastResult.Ptr pValue, + [Out] [MarshalAs(UnmanagedType.I1)] out bool isCacheable + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawSetFastHostObjectNamedProperty( + [In] IntPtr pObject, + [In] StdString.Ptr pName, + [In] V8Value.FastArg.Ptr pValue + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate V8FastHostPropertyFlags RawQueryFastHostObjectNamedProperty( + [In] IntPtr pObject, + [In] StdString.Ptr pName + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + private delegate bool RawDeleteFastHostObjectNamedProperty( + [In] IntPtr pObject, + [In] StdString.Ptr pName + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawGetFastHostObjectPropertyNames( + [In] IntPtr pObject, + [In] StdStringArray.Ptr pNames + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawGetFastHostObjectIndexedProperty( + [In] IntPtr pObject, + [In] int index, + [In] V8Value.FastResult.Ptr pValue + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawSetFastHostObjectIndexedProperty( + [In] IntPtr pObject, + [In] int index, + [In] V8Value.FastArg.Ptr pValue + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate V8FastHostPropertyFlags RawQueryFastHostObjectIndexedProperty( + [In] IntPtr pObject, + [In] int index + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [return: MarshalAs(UnmanagedType.I1)] + private delegate bool RawDeleteFastHostObjectIndexedProperty( + [In] IntPtr pObject, + [In] int index + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawGetFastHostObjectPropertyIndices( + [In] IntPtr pObject, + [In] StdInt32Array.Ptr pIndices + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawInvokeFastHostObject( + [In] IntPtr pObject, + [In] [MarshalAs(UnmanagedType.I1)] bool asConstructor, + [In] int argCount, + [In] V8Value.FastArg.Ptr pArgs, + [In] V8Value.FastResult.Ptr pResult + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawGetFastHostObjectEnumerator( + [In] IntPtr pObject, + [In] V8Value.FastResult.Ptr pResult + ); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void RawGetFastHostObjectAsyncEnumerator( + [In] IntPtr pObject, + [In] V8Value.FastResult.Ptr pResult + ); + [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void RawQueueNativeCallback( [In] NativeCallback.Handle hCallback @@ -341,11 +436,14 @@ private static void CreateMethodTable() #if NET5_0_OR_GREATER (IntPtr.Zero, InvokeHostActionFastMethodPtr), + (IntPtr.Zero, InvokeHostActionWithArgFastMethodPtr), #else - GetMethodPair(InvokeHostAction), + GetMethodPair(InvokeHostAction), + GetMethodPair(InvokeHostActionWithArg), #endif GetMethodPair(ProcessArrayBufferOrViewData), + GetMethodPair(ProcessArrayBufferOrViewDataWithArg), GetMethodPair(ProcessCpuProfile), GetMethodPair(CreateV8ObjectCache), @@ -377,11 +475,9 @@ private static void CreateMethodTable() #if NET5_0_OR_GREATER (IntPtr.Zero, GetHostObjectNamedPropertyFastMethodPtr), - (IntPtr.Zero, GetHostObjectNamedPropertyWithCacheabilityFastMethodPtr), (IntPtr.Zero, SetHostObjectNamedPropertyFastMethodPtr), #else GetMethodPair(GetHostObjectNamedProperty), - GetMethodPair(GetHostObjectNamedPropertyWithCacheability), GetMethodPair(SetHostObjectNamedProperty), #endif @@ -409,6 +505,40 @@ private static void CreateMethodTable() GetMethodPair(GetHostObjectEnumerator), GetMethodPair(GetHostObjectAsyncEnumerator), + + #if NET5_0_OR_GREATER + (IntPtr.Zero, GetFastHostObjectNamedPropertyFastMethodPtr), + (IntPtr.Zero, SetFastHostObjectNamedPropertyFastMethodPtr), + #else + GetMethodPair(GetFastHostObjectNamedProperty), + GetMethodPair(SetFastHostObjectNamedProperty), + #endif + + GetMethodPair(QueryFastHostObjectNamedProperty), + GetMethodPair(DeleteFastHostObjectNamedProperty), + GetMethodPair(GetFastHostObjectPropertyNames), + + #if NET5_0_OR_GREATER + (IntPtr.Zero, GetFastHostObjectIndexedPropertyFastMethodPtr), + (IntPtr.Zero, SetFastHostObjectIndexedPropertyFastMethodPtr), + #else + GetMethodPair(GetFastHostObjectIndexedProperty), + GetMethodPair(SetFastHostObjectIndexedProperty), + #endif + + GetMethodPair(QueryFastHostObjectIndexedProperty), + GetMethodPair(DeleteFastHostObjectIndexedProperty), + GetMethodPair(GetFastHostObjectPropertyIndices), + + #if NET5_0_OR_GREATER + (IntPtr.Zero, InvokeFastHostObjectFastMethodPtr), + #else + GetMethodPair(InvokeFastHostObject), + #endif + + GetMethodPair(GetFastHostObjectEnumerator), + GetMethodPair(GetFastHostObjectAsyncEnumerator), + GetMethodPair(QueueNativeCallback), GetMethodPair(CreateNativeCallbackTimer), GetMethodPair(ChangeNativeCallbackTimer), @@ -457,13 +587,13 @@ private static (IntPtr, IntPtr) GetMethodPair(T del) return (V8ProxyHelpers.AddRefHostObject(del), Marshal.GetFunctionPointerForDelegate((Delegate)(object)del)); } - #endregion +#endregion #region method table implementation private static void ScheduleForwardingException(V8Value.Ptr pException) { - Debug.Assert(ScheduledException == null); + Debug.Assert(ScheduledException is null); var exception = V8ProxyHelpers.MarshalExceptionToHost(V8Value.Get(pException)); if (exception is ScriptEngineException scriptEngineException) @@ -482,13 +612,13 @@ private static void ScheduleForwardingException(V8Value.Ptr pException) private static void ScheduleInvalidOperationException(StdString.Ptr pMessage) { - Debug.Assert(ScheduledException == null); + Debug.Assert(ScheduledException is null); ScheduledException = new InvalidOperationException(StdString.GetValue(pMessage)); } private static void ScheduleScriptEngineException(StdString.Ptr pEngineName, StdString.Ptr pMessage, StdString.Ptr pStackTrace, bool isFatal, bool executionStarted, V8Value.Ptr pScriptException, V8Value.Ptr pInnerException) { - Debug.Assert(ScheduledException == null); + Debug.Assert(ScheduledException is null); var scriptException = ScriptEngine.Current?.MarshalToHost(V8Value.Get(pScriptException), false); var innerException = V8ProxyHelpers.MarshalExceptionToHost(V8Value.Get(pInnerException)); ScheduledException = new ScriptEngineException(StdString.GetValue(pEngineName), StdString.GetValue(pMessage), StdString.GetValue(pStackTrace), 0, isFatal, executionStarted, scriptException, innerException); @@ -496,7 +626,7 @@ private static void ScheduleScriptEngineException(StdString.Ptr pEngineName, Std private static void ScheduleScriptInterruptedException(StdString.Ptr pEngineName, StdString.Ptr pMessage, StdString.Ptr pStackTrace, bool isFatal, bool executionStarted, V8Value.Ptr pScriptException, V8Value.Ptr pInnerException) { - Debug.Assert(ScheduledException == null); + Debug.Assert(ScheduledException is null); var scriptException = ScriptEngine.Current?.MarshalToHost(V8Value.Get(pScriptException), false); var innerException = V8ProxyHelpers.MarshalExceptionToHost(V8Value.Get(pInnerException)); ScheduledException = new ScriptInterruptedException(StdString.GetValue(pEngineName), StdString.GetValue(pMessage), StdString.GetValue(pStackTrace), 0, isFatal, executionStarted, scriptException, innerException); @@ -514,6 +644,18 @@ private static void InvokeHostAction(IntPtr pAction) } } + private static void InvokeHostActionWithArg(IntPtr pAction, IntPtr pArg) + { + try + { + V8ProxyHelpers.GetHostObject>(pAction)(pArg); + } + catch (Exception exception) + { + ScheduleHostException(exception); + } + } + private static void ProcessArrayBufferOrViewData(IntPtr pData, IntPtr pAction) { try @@ -526,6 +668,18 @@ private static void ProcessArrayBufferOrViewData(IntPtr pData, IntPtr pAction) } } + private static void ProcessArrayBufferOrViewDataWithArg(IntPtr pData, IntPtr pAction, IntPtr pArg) + { + try + { + V8ProxyHelpers.GetHostObject>(pAction)(pData, pArg); + } + catch (Exception exception) + { + ScheduleHostException(exception); + } + } + private static void ProcessCpuProfile(V8CpuProfile.Ptr pProfile, IntPtr pAction) { try @@ -613,19 +767,7 @@ private static Invocability GetHostObjectInvocability(IntPtr pObject) } } - private static void GetHostObjectNamedProperty(IntPtr pObject, StdString.Ptr pName, V8Value.Ptr pValue) - { - try - { - V8Value.Set(pValue, V8ProxyHelpers.GetHostObjectProperty(pObject, StdString.GetValue(pName))); - } - catch (Exception exception) - { - ScheduleHostException(pObject, exception); - } - } - - private static void GetHostObjectNamedPropertyWithCacheability(IntPtr pObject, StdString.Ptr pName, V8Value.Ptr pValue, out bool isCacheable) + private static void GetHostObjectNamedProperty(IntPtr pObject, StdString.Ptr pName, V8Value.Ptr pValue, out bool isCacheable) { try { @@ -659,7 +801,7 @@ private static bool DeleteHostObjectNamedProperty(IntPtr pObject, StdString.Ptr catch (Exception exception) { ScheduleHostException(pObject, exception); - return default; + return false; } } @@ -712,7 +854,7 @@ private static bool DeleteHostObjectIndexedProperty(IntPtr pObject, int index) catch (Exception exception) { ScheduleHostException(pObject, exception); - return default; + return false; } } @@ -780,6 +922,175 @@ private static void GetHostObjectAsyncEnumerator(IntPtr pObject, V8Value.Ptr pRe } } + private static void GetFastHostObjectNamedProperty(IntPtr pObject, StdString.Ptr pName, V8Value.FastResult.Ptr pValue, out bool isCacheable) + { + try + { + V8ProxyHelpers.GetFastHostObjectProperty(pObject, pName, pValue, out isCacheable); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + isCacheable = false; + } + } + + private static void SetFastHostObjectNamedProperty(IntPtr pObject, StdString.Ptr pName, V8Value.FastArg.Ptr pValue) + { + try + { + V8ProxyHelpers.SetFastHostObjectProperty(pObject, pName, pValue); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + } + } + + private static V8FastHostPropertyFlags QueryFastHostObjectNamedProperty(IntPtr pObject, StdString.Ptr pName) + { + try + { + return V8ProxyHelpers.QueryFastHostObjectProperty(pObject, pName); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + return default; + } + } + + private static bool DeleteFastHostObjectNamedProperty(IntPtr pObject, StdString.Ptr pName) + { + try + { + return V8ProxyHelpers.DeleteFastHostObjectProperty(pObject, pName); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + return false; + } + } + + private static void GetFastHostObjectPropertyNames(IntPtr pObject, StdStringArray.Ptr pNames) + { + IEnumerable names; + try + { + names = V8ProxyHelpers.GetFastHostObjectPropertyNames(pObject); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + return; + } + + StdStringArray.CopyFromEnumerable(pNames, names); + } + + private static void GetFastHostObjectIndexedProperty(IntPtr pObject, int index, V8Value.FastResult.Ptr pValue) + { + try + { + V8ProxyHelpers.GetFastHostObjectProperty(pObject, index, pValue); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + } + } + + private static void SetFastHostObjectIndexedProperty(IntPtr pObject, int index, V8Value.FastArg.Ptr pValue) + { + try + { + V8ProxyHelpers.SetFastHostObjectProperty(pObject, index, pValue); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + } + } + + private static V8FastHostPropertyFlags QueryFastHostObjectIndexedProperty(IntPtr pObject, int index) + { + try + { + return V8ProxyHelpers.QueryFastHostObjectProperty(pObject, index); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + return default; + } + } + + private static bool DeleteFastHostObjectIndexedProperty(IntPtr pObject, int index) + { + try + { + return V8ProxyHelpers.DeleteFastHostObjectProperty(pObject, index); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + return false; + } + } + + private static void GetFastHostObjectPropertyIndices(IntPtr pObject, StdInt32Array.Ptr pIndices) + { + IEnumerable indices; + try + { + indices = V8ProxyHelpers.GetFastHostObjectPropertyIndices(pObject); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + return; + } + + StdInt32Array.CopyFromEnumerable(pIndices, indices); + } + + private static void InvokeFastHostObject(IntPtr pObject, bool asConstructor, int argCount, V8Value.FastArg.Ptr pArgs, V8Value.FastResult.Ptr pResult) + { + try + { + V8ProxyHelpers.InvokeFastHostObject(pObject, asConstructor, argCount, pArgs, pResult); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + } + } + + private static void GetFastHostObjectEnumerator(IntPtr pObject, V8Value.FastResult.Ptr pResult) + { + try + { + V8ProxyHelpers.GetFastHostObjectEnumerator(pObject, pResult); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + } + } + + private static void GetFastHostObjectAsyncEnumerator(IntPtr pObject, V8Value.FastResult.Ptr pResult) + { + try + { + V8ProxyHelpers.GetFastHostObjectAsyncEnumerator(pObject, pResult); + } + catch (Exception exception) + { + ScheduleHostException(pObject, exception); + } + } + private static void QueueNativeCallback(NativeCallback.Handle hCallback) { MiscHelpers.QueueNativeCallback(new NativeCallbackImpl(hCallback)); @@ -814,7 +1125,7 @@ private static void LoadModule(IntPtr pSourceDocumentInfo, StdString.Ptr pSpecif catch (Exception exception) { ScheduleHostException(exception); - uniqueId = default; + uniqueId = 0; documentKind = default; pDocumentInfo = default; return; @@ -842,7 +1153,7 @@ private static void CreateModuleContext(IntPtr pDocumentInfo, StdStringArray.Ptr return; } - if (context == null) + if (context is null) { StdStringArray.SetElementCount(pNames, 0); StdV8ValueArray.SetElementCount(pValues, 0); diff --git a/ClearScript/V8/SplitProxy/V8SplitProxyNative.Common.tt b/ClearScript/V8/SplitProxy/V8SplitProxyNative.Common.tt index 18e1c4e01..0e914d706 100644 --- a/ClearScript/V8/SplitProxy/V8SplitProxyNative.Common.tt +++ b/ClearScript/V8/SplitProxy/V8SplitProxyNative.Common.tt @@ -77,6 +77,25 @@ namespace Microsoft.ClearScript.V8.SplitProxy #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -90,6 +109,18 @@ namespace Microsoft.ClearScript.V8.SplitProxy return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -343,16 +374,6 @@ namespace Microsoft.ClearScript.V8.SplitProxy V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -373,9 +394,9 @@ namespace Microsoft.ClearScript.V8.SplitProxy V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -694,6 +715,11 @@ namespace Microsoft.ClearScript.V8.SplitProxy V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -1057,6 +1083,11 @@ namespace Microsoft.ClearScript.V8.SplitProxy V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -1090,13 +1121,18 @@ namespace Microsoft.ClearScript.V8.SplitProxy #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -1158,6 +1194,25 @@ namespace Microsoft.ClearScript.V8.SplitProxy #endregion + #region memory methods + + [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] @@ -1438,18 +1493,6 @@ namespace Microsoft.ClearScript.V8.SplitProxy [In] double value ); - [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -1482,7 +1525,9 @@ namespace Microsoft.ClearScript.V8.SplitProxy [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] @@ -1800,6 +1845,13 @@ namespace Microsoft.ClearScript.V8.SplitProxy [In] IntPtr pAction ); + [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -2107,6 +2159,13 @@ namespace Microsoft.ClearScript.V8.SplitProxy [In] IntPtr pAction ); + [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -2138,13 +2197,18 @@ namespace Microsoft.ClearScript.V8.SplitProxy #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("<#= fileName #>", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity diff --git a/ClearScript/V8/SplitProxy/V8SplitProxyNative.Generated.cs b/ClearScript/V8/SplitProxy/V8SplitProxyNative.Generated.cs index d578dba3c..5d5425781 100644 --- a/ClearScript/V8/SplitProxy/V8SplitProxyNative.Generated.cs +++ b/ClearScript/V8/SplitProxy/V8SplitProxyNative.Generated.cs @@ -119,6 +119,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -132,6 +151,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -385,16 +416,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -415,9 +436,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -736,6 +757,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -1099,6 +1125,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -1132,13 +1163,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -1200,6 +1236,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] @@ -1480,18 +1535,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -1524,7 +1567,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] @@ -1842,6 +1887,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -2149,6 +2201,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -2180,13 +2239,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity @@ -2252,6 +2316,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -2265,6 +2348,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -2518,16 +2613,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -2548,9 +2633,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -2869,6 +2954,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -3232,6 +3322,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -3265,13 +3360,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -3333,6 +3433,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] @@ -3613,18 +3732,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -3657,7 +3764,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] @@ -3975,6 +4084,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -4282,6 +4398,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -4313,13 +4436,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity @@ -4385,6 +4513,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -4398,6 +4545,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -4651,16 +4810,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -4681,9 +4830,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -5002,6 +5151,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -5365,6 +5519,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -5398,13 +5557,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -5466,6 +5630,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] @@ -5746,18 +5929,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -5790,7 +5961,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] @@ -6108,6 +6281,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -6415,6 +6595,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -6446,13 +6633,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity @@ -6518,6 +6710,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -6531,6 +6742,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -6784,16 +7007,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -6814,9 +7027,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -7135,6 +7348,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -7498,6 +7716,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -7531,13 +7754,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -7599,12 +7827,31 @@ [In] uint size #endregion - #region StdString methods + #region memory methods [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] - private static extern StdString.Ptr StdString_New( - [In] [MarshalAs(UnmanagedType.LPWStr)] string value, - [In] int length + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + + #region StdString methods + + [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] + private static extern StdString.Ptr StdString_New( + [In] [MarshalAs(UnmanagedType.LPWStr)] string value, + [In] int length ); [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] @@ -7879,18 +8126,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -7923,7 +8158,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] @@ -8241,6 +8478,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -8548,6 +8792,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -8579,13 +8830,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.linux-x64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity @@ -8651,6 +8907,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -8664,6 +8939,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -8917,16 +9204,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -8947,9 +9224,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -9268,6 +9545,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -9631,6 +9913,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -9664,13 +9951,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -9732,6 +10024,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] @@ -10012,18 +10323,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -10056,7 +10355,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] @@ -10374,6 +10675,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -10681,6 +10989,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -10712,13 +11027,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.linux-arm64.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity @@ -10784,6 +11104,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -10797,6 +11136,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -11050,16 +11401,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -11080,9 +11421,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -11401,6 +11742,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -11764,6 +12110,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -11797,13 +12148,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -11865,6 +12221,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] @@ -12145,18 +12520,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -12189,7 +12552,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] @@ -12507,6 +12872,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -12814,6 +13186,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -12845,13 +13224,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.linux-arm.so", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity @@ -12917,6 +13301,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -12930,6 +13333,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -13183,16 +13598,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -13213,9 +13618,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -13534,6 +13939,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -13897,6 +14307,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -13930,13 +14345,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -13998,6 +14418,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] @@ -14278,18 +14717,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -14322,7 +14749,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] @@ -14640,6 +15069,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -14947,6 +15383,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -14978,13 +15421,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.osx-x64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity @@ -15050,6 +15498,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -15063,6 +15530,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -15316,16 +15795,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -15346,9 +15815,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -15667,6 +16136,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -16030,6 +16504,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -16063,13 +16542,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -16131,6 +16615,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] @@ -16411,18 +16914,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -16455,7 +16946,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] @@ -16773,6 +17266,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -17080,6 +17580,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -17111,13 +17618,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.osx-arm64.dylib", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity diff --git a/ClearScript/V8/SplitProxy/V8SplitProxyNative.UWP.Generated.cs b/ClearScript/V8/SplitProxy/V8SplitProxyNative.UWP.Generated.cs index 5be31a3a9..078c87e1c 100644 --- a/ClearScript/V8/SplitProxy/V8SplitProxyNative.UWP.Generated.cs +++ b/ClearScript/V8/SplitProxy/V8SplitProxyNative.UWP.Generated.cs @@ -75,6 +75,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -88,6 +107,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -341,16 +372,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -371,9 +392,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -692,6 +713,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -1055,6 +1081,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -1088,13 +1119,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -1156,6 +1192,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] @@ -1436,18 +1491,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -1480,7 +1523,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] @@ -1798,6 +1843,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -2105,6 +2157,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -2136,13 +2195,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.win-x86.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity @@ -2208,6 +2272,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -2221,6 +2304,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -2474,16 +2569,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -2504,9 +2589,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -2825,6 +2910,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -3188,6 +3278,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -3221,13 +3316,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -3289,6 +3389,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] @@ -3569,18 +3688,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -3613,7 +3720,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] @@ -3931,6 +4040,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -4238,6 +4354,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -4269,13 +4392,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.win-x64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity @@ -4341,6 +4469,25 @@ void IV8SplitProxyNative.V8Environment_InitializeICU(IntPtr pICUData, uint size) #endregion + #region memory methods + + IntPtr IV8SplitProxyNative.Memory_Allocate(UIntPtr size) + { + return Memory_Allocate(size); + } + + IntPtr IV8SplitProxyNative.Memory_AllocateZeroed(UIntPtr size) + { + return Memory_AllocateZeroed(size); + } + + void IV8SplitProxyNative.Memory_Free(IntPtr pMemory) + { + Memory_Free(pMemory); + } + + #endregion + #region StdString methods StdString.Ptr IV8SplitProxyNative.StdString_New(string value) @@ -4354,6 +4501,18 @@ string IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString) return Marshal.PtrToStringUni(pValue, length); } + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length); + } + + TValue IV8SplitProxyNative.StdString_GetValue(StdString.Ptr pString, Func factory, in TArg arg) + { + var pValue = StdString_GetValue(pString, out var length); + return factory(pValue, length, arg); + } + void IV8SplitProxyNative.StdString_SetValue(StdString.Ptr pString, string value) { StdString_SetValue(pString, value, value.Length); @@ -4607,16 +4766,6 @@ void IV8SplitProxyNative.V8Value_SetNumber(V8Value.Ptr pV8Value, double value) V8Value_SetNumber(pV8Value, value); } - void IV8SplitProxyNative.V8Value_SetInt32(V8Value.Ptr pV8Value, int value) - { - V8Value_SetInt32(pV8Value, value); - } - - void IV8SplitProxyNative.V8Value_SetUInt32(V8Value.Ptr pV8Value, uint value) - { - V8Value_SetUInt32(pV8Value, value); - } - void IV8SplitProxyNative.V8Value_SetString(V8Value.Ptr pV8Value, string value) { V8Value_SetString(pV8Value, value, value.Length); @@ -4637,9 +4786,9 @@ void IV8SplitProxyNative.V8Value_SetV8Object(V8Value.Ptr pV8Value, V8Object.Hand V8Value_SetV8Object(pV8Value, hObject, subtype, flags); } - void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject) + void IV8SplitProxyNative.V8Value_SetHostObject(V8Value.Ptr pV8Value, IntPtr pObject, V8Value.Subtype subtype, V8Value.Flags flags) { - V8Value_SetHostObject(pV8Value, pObject); + V8Value_SetHostObject(pV8Value, pObject, subtype, flags); } void IV8SplitProxyNative.V8Value_Decode(V8Value.Ptr pV8Value, out V8Value.Decoded decoded) @@ -4958,6 +5107,11 @@ void IV8SplitProxyNative.V8Context_InvokeWithLock(V8Context.Handle hContext, Int V8Context_InvokeWithLock(hContext, pAction); } + void IV8SplitProxyNative.V8Context_InvokeWithLockWithArg(V8Context.Handle hContext, IntPtr pAction, IntPtr pArg) + { + V8Context_InvokeWithLockWithArg(hContext, pAction, pArg); + } + object IV8SplitProxyNative.V8Context_GetRootItem(V8Context.Handle hContext) { using (var itemScope = V8Value.CreateScope()) @@ -5321,6 +5475,11 @@ void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewData(V8Object.Handl V8Object_InvokeWithArrayBufferOrViewData(hObject, pAction); } + void IV8SplitProxyNative.V8Object_InvokeWithArrayBufferOrViewDataWithArg(V8Object.Handle hObject, IntPtr pAction, IntPtr pArg) + { + V8Object_InvokeWithArrayBufferOrViewDataWithArg(hObject, pAction, pArg); + } + #endregion #region V8 debug callback methods @@ -5354,13 +5513,18 @@ void IV8SplitProxyNative.NativeCallback_Invoke(NativeCallback.Handle hCallback) #endregion - #region V8 entity cleanup + #region V8 entity methods void IV8SplitProxyNative.V8Entity_Release(V8Entity.Handle hEntity) { V8Entity_Release(hEntity); } + V8Entity.Handle IV8SplitProxyNative.V8Entity_CloneHandle(V8Entity.Handle hEntity) + { + return V8Entity_CloneHandle(hEntity); + } + void IV8SplitProxyNative.V8Entity_DestroyHandle(V8Entity.Handle hEntity) { V8Entity_DestroyHandle(hEntity); @@ -5422,6 +5586,25 @@ [In] uint size #endregion + #region memory methods + + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_Allocate( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr Memory_AllocateZeroed( + [In] UIntPtr size + ); + + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void Memory_Free( + [In] IntPtr pMemory + ); + + #endregion + #region StdString methods [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] @@ -5702,18 +5885,6 @@ private static extern void V8Value_SetNumber( [In] double value ); - [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetInt32( - [In] V8Value.Ptr pV8Value, - [In] int value - ); - - [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] - private static extern void V8Value_SetUInt32( - [In] V8Value.Ptr pV8Value, - [In] uint value - ); - [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetString( [In] V8Value.Ptr pV8Value, @@ -5746,7 +5917,9 @@ [In] V8Value.Flags flags [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Value_SetHostObject( [In] V8Value.Ptr pV8Value, - [In] IntPtr pObject + [In] IntPtr pObject, + [In] V8Value.Subtype subtype, + [In] V8Value.Flags flags ); [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] @@ -6064,6 +6237,13 @@ private static extern void V8Context_InvokeWithLock( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Context_InvokeWithLockWithArg( + [In] V8Context.Handle hContext, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Context_GetRootItem( [In] V8Context.Handle hContext, @@ -6371,6 +6551,13 @@ private static extern void V8Object_InvokeWithArrayBufferOrViewData( [In] IntPtr pAction ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern void V8Object_InvokeWithArrayBufferOrViewDataWithArg( + [In] V8Object.Handle hObject, + [In] IntPtr pAction, + [In] IntPtr pArg + ); + #endregion #region V8 debug callback methods @@ -6402,13 +6589,18 @@ [In] NativeCallback.Handle hCallback #endregion - #region V8 entity cleanup + #region V8 entity methods [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_Release( [In] V8Entity.Handle hEntity ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] + private static extern V8Entity.Handle V8Entity_CloneHandle( + [In] V8Entity.Handle hEntity + ); + [DllImport("ClearScriptV8.win-arm64.dll", CallingConvention = CallingConvention.StdCall)] private static extern void V8Entity_DestroyHandle( [In] V8Entity.Handle hEntity diff --git a/ClearScript/V8/SplitProxy/V8SplitProxyNative.cs b/ClearScript/V8/SplitProxy/V8SplitProxyNative.cs index b1ca55b79..f2766ecd8 100644 --- a/ClearScript/V8/SplitProxy/V8SplitProxyNative.cs +++ b/ClearScript/V8/SplitProxy/V8SplitProxyNative.cs @@ -25,32 +25,57 @@ public static string GetVersion() public static void Invoke(Action action) { var previousScheduledException = MiscHelpers.Exchange(ref V8SplitProxyManaged.ScheduledException, null); - var previousMethodTable = instance.V8SplitProxyManaged_SetMethodTable(V8SplitProxyManaged.MethodTable); try { - action(instance); + InvokeNoThrow(action); ThrowScheduledException(); } finally { - instance.V8SplitProxyManaged_SetMethodTable(previousMethodTable); V8SplitProxyManaged.ScheduledException = previousScheduledException; } } - public static T Invoke(Func func) + public static void Invoke(Action action, in TArg arg) + { + var previousScheduledException = MiscHelpers.Exchange(ref V8SplitProxyManaged.ScheduledException, null); + try + { + InvokeNoThrow(action, arg); + ThrowScheduledException(); + } + finally + { + V8SplitProxyManaged.ScheduledException = previousScheduledException; + } + } + + public static TResult Invoke(Func func) { var previousScheduledException = MiscHelpers.Exchange(ref V8SplitProxyManaged.ScheduledException, null); - var previousMethodTable = instance.V8SplitProxyManaged_SetMethodTable(V8SplitProxyManaged.MethodTable); try { - var result = func(instance); + var result = InvokeNoThrow(func); + ThrowScheduledException(); + return result; + } + finally + { + V8SplitProxyManaged.ScheduledException = previousScheduledException; + } + } + + public static TResult Invoke(Func func, in TArg arg) + { + var previousScheduledException = MiscHelpers.Exchange(ref V8SplitProxyManaged.ScheduledException, null); + try + { + var result = InvokeNoThrow(func, arg); ThrowScheduledException(); return result; } finally { - instance.V8SplitProxyManaged_SetMethodTable(previousMethodTable); V8SplitProxyManaged.ScheduledException = previousScheduledException; } } @@ -60,30 +85,76 @@ public static void InvokeNoThrow(Action action) var previousMethodTable = instance.V8SplitProxyManaged_SetMethodTable(V8SplitProxyManaged.MethodTable); try { - action(instance); + InvokeRaw(action); } finally { - instance.V8SplitProxyManaged_SetMethodTable(previousMethodTable); + if (previousMethodTable != V8SplitProxyManaged.MethodTable) + { + instance.V8SplitProxyManaged_SetMethodTable(previousMethodTable); + } } } - public static T InvokeNoThrow(Func func) + public static void InvokeNoThrow(Action action, in TArg arg) { var previousMethodTable = instance.V8SplitProxyManaged_SetMethodTable(V8SplitProxyManaged.MethodTable); try { - return func(instance); + InvokeRaw(action, arg); } finally { - instance.V8SplitProxyManaged_SetMethodTable(previousMethodTable); + if (previousMethodTable != V8SplitProxyManaged.MethodTable) + { + instance.V8SplitProxyManaged_SetMethodTable(previousMethodTable); + } } } + public static TResult InvokeNoThrow(Func func) + { + var previousMethodTable = instance.V8SplitProxyManaged_SetMethodTable(V8SplitProxyManaged.MethodTable); + try + { + return InvokeRaw(func); + } + finally + { + if (previousMethodTable != V8SplitProxyManaged.MethodTable) + { + instance.V8SplitProxyManaged_SetMethodTable(previousMethodTable); + } + } + } + + public static TResult InvokeNoThrow(Func func, in TArg arg) + { + var previousMethodTable = instance.V8SplitProxyManaged_SetMethodTable(V8SplitProxyManaged.MethodTable); + try + { + return InvokeRaw(func, arg); + } + finally + { + if (previousMethodTable != V8SplitProxyManaged.MethodTable) + { + instance.V8SplitProxyManaged_SetMethodTable(previousMethodTable); + } + } + } + + public static void InvokeRaw(Action action) => action(instance); + + public static void InvokeRaw(Action action, in TArg arg) => action(instance, arg); + + public static TResult InvokeRaw(Func func) => func(instance); + + public static TResult InvokeRaw(Func func, in TArg arg) => func(instance, arg); + private static void ThrowScheduledException() { - if (V8SplitProxyManaged.ScheduledException != null) + if (V8SplitProxyManaged.ScheduledException is not null) { throw V8SplitProxyManaged.ScheduledException; } diff --git a/ClearScript/V8/SplitProxy/V8TestProxyImpl.cs b/ClearScript/V8/SplitProxy/V8TestProxyImpl.cs index eebc1f748..5a5fd0e66 100644 --- a/ClearScript/V8/SplitProxy/V8TestProxyImpl.cs +++ b/ClearScript/V8/SplitProxy/V8TestProxyImpl.cs @@ -9,13 +9,13 @@ internal sealed class V8TestProxyImpl : V8TestProxy { public override UIntPtr GetNativeDigest(string value) { - return V8SplitProxyNative.InvokeNoThrow(instance => instance.V8UnitTestSupport_GetTextDigest(value)); + return V8SplitProxyNative.InvokeNoThrow(static (instance, value) => instance.V8UnitTestSupport_GetTextDigest(value), value); } public override Statistics GetStatistics() { var statistics = new Statistics(); - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8UnitTestSupport_GetStatistics(out statistics.IsolateCount, out statistics.ContextCount)); + V8SplitProxyNative.InvokeNoThrow(static (instance, statistics) => instance.V8UnitTestSupport_GetStatistics(out statistics.IsolateCount, out statistics.ContextCount), statistics); return statistics; } diff --git a/ClearScript/V8/V8ContextProxy.cs b/ClearScript/V8/V8ContextProxy.cs index b61ef7648..ebeae064b 100644 --- a/ClearScript/V8/V8ContextProxy.cs +++ b/ClearScript/V8/V8ContextProxy.cs @@ -22,6 +22,8 @@ public static V8ContextProxy Create(V8IsolateProxy isolateProxy, string name, V8 public abstract void InvokeWithLock(Action action); + public abstract void InvokeWithLock(Action action, in TArg arg); + public abstract object GetRootItem(); public abstract void AddGlobalItem(string name, object item, bool globalMembers); diff --git a/ClearScript/V8/V8CpuProfile.cs b/ClearScript/V8/V8CpuProfile.cs index 94e8aaecd..27ba4cb4d 100644 --- a/ClearScript/V8/V8CpuProfile.cs +++ b/ClearScript/V8/V8CpuProfile.cs @@ -105,7 +105,7 @@ private void WriteNodesJson(TextWriter writer) writer.Write("\"nodes\":["); { - if (RootNode != null) + if (RootNode is not null) { var queue = new Queue(); RootNode.WriteJson(writer, queue); @@ -123,7 +123,7 @@ private void WriteSamplesJson(TextWriter writer) { // V8 Inspector JSON Protocol 1.3: https://github.com/v8/v8/blob/4b9b23521e6fd42373ebbcb20ebe03bf445494f9/src/inspector/js_protocol-1.3.json - if ((Samples != null) && (Samples.Count > 0)) + if ((Samples is not null) && (Samples.Count > 0)) { writer.Write(",\"samples\":[{0}]", string.Join(",", Samples.Select(sample => sample.Node.NodeId))); } @@ -133,7 +133,7 @@ private void WriteTimeDeltasJson(TextWriter writer) { // V8 Inspector JSON Protocol 1.3: https://github.com/v8/v8/blob/4b9b23521e6fd42373ebbcb20ebe03bf445494f9/src/inspector/js_protocol-1.3.json - if ((Samples != null) && (Samples.Count > 0)) + if ((Samples is not null) && (Samples.Count > 0)) { const ulong maxSafeInteger = 9007199254740991UL; // 2^53 - 1 @@ -246,12 +246,12 @@ internal Node FindNode(ulong nodeId) return this; } - if (ChildNodes != null) + if (ChildNodes is not null) { foreach (var childNode in ChildNodes) { var node = childNode.FindNode(nodeId); - if (node != null) + if (node is not null) { return node; } @@ -302,7 +302,7 @@ private void WriteChildrenJson(TextWriter writer, Queue queue) { // V8 Inspector JSON Protocol 1.3: https://github.com/v8/v8/blob/4b9b23521e6fd42373ebbcb20ebe03bf445494f9/src/inspector/js_protocol-1.3.json - if ((ChildNodes != null) && (ChildNodes.Count > 0)) + if ((ChildNodes is not null) && (ChildNodes.Count > 0)) { writer.Write(",\"children\":[{0}]", string.Join(",", ChildNodes.Select(node => node.NodeId))); ChildNodes.ForEach(queue.Enqueue); @@ -313,7 +313,7 @@ private void WritePositionTicksJson(TextWriter writer) { // V8 Inspector JSON Protocol 1.3: https://github.com/v8/v8/blob/4b9b23521e6fd42373ebbcb20ebe03bf445494f9/src/inspector/js_protocol-1.3.json - if ((HitLines != null) && (HitLines.Count > 0)) + if ((HitLines is not null) && (HitLines.Count > 0)) { writer.Write(",\"positionTicks\":["); { diff --git a/ClearScript/V8/V8CpuProfileFlags.cs b/ClearScript/V8/V8CpuProfileFlags.cs index 8a6564a21..eeec685f3 100644 --- a/ClearScript/V8/V8CpuProfileFlags.cs +++ b/ClearScript/V8/V8CpuProfileFlags.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; namespace Microsoft.ClearScript.V8 { @@ -18,4 +21,10 @@ public enum V8CpuProfileFlags /// EnableSampleCollection = 0x00000001 } + + internal static class V8CpuProfileFlagsHelpers + { + public static bool HasAllFlags(this V8CpuProfileFlags value, V8CpuProfileFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this V8CpuProfileFlags value, V8CpuProfileFlags flags) => (value & flags) != 0; + } } diff --git a/ClearScript/V8/V8DebugAgent.cs b/ClearScript/V8/V8DebugAgent.cs index 883b04ddb..206f5d5db 100644 --- a/ClearScript/V8/V8DebugAgent.cs +++ b/ClearScript/V8/V8DebugAgent.cs @@ -30,7 +30,7 @@ internal sealed class V8DebugAgent : IDisposable private TcpListener tcpListener; private V8DebugClient activeClient; - private readonly InterlockedOneWayFlag disposedFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag disposedFlag = new(); #endregion @@ -47,20 +47,26 @@ public V8DebugAgent(string name, string version, int port, bool remote, IV8Debug if (remote) { - started = MiscHelpers.Try(() => - { - tcpListener = new TcpListener(IPAddress.Any, port); - tcpListener.Start(); - }); + started = MiscHelpers.Try( + static ctx => + { + ctx.self.tcpListener = new TcpListener(IPAddress.Any, ctx.port); + ctx.self.tcpListener.Start(); + }, + (self: this, port) + ); } if (!started) { - started = MiscHelpers.Try(() => - { - tcpListener = new TcpListener(IPAddress.Loopback, port); - tcpListener.Start(); - }); + started = MiscHelpers.Try( + static ctx => + { + ctx.self.tcpListener = new TcpListener(IPAddress.Loopback, ctx.port); + ctx.self.tcpListener.Start(); + }, + (self: this, port) + ); } if (started) @@ -110,7 +116,7 @@ private void StartAcceptWebClient() private void OnWebClientAccepted(Task task) { - var succeeded = MiscHelpers.Try(out var socket, () => task.Result); + var succeeded = MiscHelpers.Try(out var socket, static task => task.Result, task); if (!disposedFlag.IsSet) { @@ -125,7 +131,7 @@ private void OnWebClientAccepted(Task task) private void OnWebContextCreated(Task task) { - if (MiscHelpers.Try(out var webContext, () => task.Result) && !disposedFlag.IsSet) + if (MiscHelpers.Try(out var webContext, static task => task.Result, task) && !disposedFlag.IsSet) { if (!webContext.Request.IsWebSocketRequest) { @@ -150,7 +156,7 @@ private void HandleWebRequest(WebContext webContext) if (webContext.Request.RawUrl.Equals("/json", StringComparison.OrdinalIgnoreCase) || webContext.Request.RawUrl.Equals("/json/list", StringComparison.OrdinalIgnoreCase)) { - if (activeClient != null) + if (activeClient is not null) { SendWebResponse(webContext, MiscHelpers.FormatInvariant( "[ {{\r\n" + @@ -249,7 +255,7 @@ private void StartAcceptWebSocket(WebContext webContext) private void OnWebSocketAccepted(WebContext webContext, Task task) { - if (MiscHelpers.Try(out var webSocket, () => task.Result)) + if (MiscHelpers.Try(out var webSocket, static task => task.Result, task)) { if (!ConnectClient(webSocket)) { @@ -265,7 +271,7 @@ private void OnWebSocketAccepted(WebContext webContext, Task task) private bool ConnectClient(WebSocket webSocket) { var client = new V8DebugClient(this, webSocket); - if (Interlocked.CompareExchange(ref activeClient, client, null) == null) + if (Interlocked.CompareExchange(ref activeClient, client, null) is null) { listener.ConnectClient(); client.Start(); @@ -279,7 +285,7 @@ private bool ConnectClient(WebSocket webSocket) private void DisconnectClient(WebSocket.ErrorCode errorCode, string message) { var client = Interlocked.Exchange(ref activeClient, null); - if (client != null) + if (client is not null) { client.Dispose(errorCode, message); listener.DisconnectClient(); @@ -295,9 +301,9 @@ public void Dispose() { if (disposedFlag.Set()) { - if (tcpListener != null) + if (tcpListener is not null) { - MiscHelpers.Try(tcpListener.Stop); + MiscHelpers.Try(static tcpListener => tcpListener.Stop(), tcpListener); } DisconnectClient(WebSocket.ErrorCode.EndpointUnavailable, "The V8 runtime has been destroyed"); diff --git a/ClearScript/V8/V8DebugClient.cs b/ClearScript/V8/V8DebugClient.cs index d2f0284e9..e69325b9a 100644 --- a/ClearScript/V8/V8DebugClient.cs +++ b/ClearScript/V8/V8DebugClient.cs @@ -20,10 +20,10 @@ internal sealed class V8DebugClient private readonly V8DebugAgent agent; private readonly WebSocket webSocket; - private readonly ConcurrentQueue queue = new ConcurrentQueue(); - private readonly SemaphoreSlim sendSemaphore = new SemaphoreSlim(1); + private readonly ConcurrentQueue queue = new(); + private readonly SemaphoreSlim sendSemaphore = new(1); - private readonly InterlockedOneWayFlag disposedFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag disposedFlag = new(); #endregion diff --git a/ClearScript/V8/V8Proxy.cs b/ClearScript/V8/V8Proxy.cs index a0d4898d7..6ac7fac10 100644 --- a/ClearScript/V8/V8Proxy.cs +++ b/ClearScript/V8/V8Proxy.cs @@ -17,7 +17,7 @@ namespace Microsoft.ClearScript.V8 { internal abstract partial class V8Proxy : IDisposable { - private static readonly object dataLock = new object(); + private static readonly object dataLock = new(); private static IntPtr hNativeAssembly; private static ulong splitImplCount; @@ -47,7 +47,7 @@ internal static void OnEntityHolderCreated() } catch { - gotNativeVersion = MiscHelpers.Try(out nativeVersion, V8SplitProxyNative.GetVersion); + gotNativeVersion = MiscHelpers.Try(out nativeVersion, static () => V8SplitProxyNative.GetVersion()); if (!gotNativeVersion) { throw; @@ -151,7 +151,7 @@ private static IntPtr LoadNativeLibrary(string baseName, string platform, string return hLibrary; } - messageBuilder.AppendInvariant("\n{0}: {1}", path, MiscHelpers.EnsureNonBlank(GetLoadLibraryErrorMessage(), "Unknown error")); + messageBuilder.AppendInvariant("\n{0}: {1}", path, GetLoadLibraryErrorMessage().ToNonBlank("Unknown error")); } var message = MiscHelpers.FormatInvariant("Cannot load ClearScript V8 library. Load failure information for {0}:{1}", fileName, messageBuilder); @@ -170,7 +170,7 @@ private static unsafe void InitializeICU() fixed (byte* pBytes = bytes) { var pICUData = (IntPtr)pBytes; - V8SplitProxyNative.InvokeNoThrow(instance => instance.V8Environment_InitializeICU(pICUData, Convert.ToUInt32(length))); + V8SplitProxyNative.InvokeNoThrow(static (instance, ctx) => instance.V8Environment_InitializeICU(ctx.pICUData, Convert.ToUInt32(ctx.length)), (pICUData, length)); } } } @@ -183,7 +183,7 @@ private static IEnumerable GetDirPaths(string platform, string architect var location = typeof(V8Proxy).Assembly.Location; if (!string.IsNullOrWhiteSpace(location)) { - if ((platform != null) && (architecture != null)) + if ((platform is not null) && (architecture is not null)) { yield return Path.Combine(Path.GetDirectoryName(location), "runtimes", $"{platform}-{architecture}", "native"); } diff --git a/ClearScript/V8/V8ProxyHelpers.cs b/ClearScript/V8/V8ProxyHelpers.cs index fccefadce..6a0053d83 100644 --- a/ClearScript/V8/V8ProxyHelpers.cs +++ b/ClearScript/V8/V8ProxyHelpers.cs @@ -7,6 +7,8 @@ using System.Runtime.InteropServices; using Microsoft.ClearScript.JavaScript; using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8.FastProxy; +using Microsoft.ClearScript.V8.SplitProxy; namespace Microsoft.ClearScript.V8 { @@ -29,9 +31,9 @@ public static void ReleaseHostObject(IntPtr pObject) GCHandle.FromIntPtr(pObject).Free(); } - public static IScope CreateAddRefHostObjectScope(object obj) + public static ValueScope CreateAddRefHostObjectScope(object obj) { - return Scope.Create(() => AddRefHostObject(obj), ReleaseHostObject); + return ScopeFactory.Create(static obj => AddRefHostObject(obj), static pObject => ReleaseHostObject(pObject), obj); } #endregion @@ -48,16 +50,6 @@ public static T GetHostObject(IntPtr pObject) where T : class return (T)GetHostObject(pObject); } - public static object GetHostObjectProperty(IntPtr pObject, string name) - { - return GetHostObjectProperty(GetHostObject(pObject), name); - } - - public static object GetHostObjectProperty(object obj, string name) - { - return ((IDynamic)obj).GetProperty(name); - } - public static object GetHostObjectProperty(IntPtr pObject, string name, out bool isCacheable) { return GetHostObjectProperty(GetHostObject(pObject), name, out isCacheable); @@ -166,7 +158,7 @@ public static Invocability GetHostObjectInvocability(IntPtr pObject) public static Invocability GetHostObjectInvocability(object obj) { var hostItem = obj as HostItem; - if (hostItem == null) + if (hostItem is null) { return Invocability.None; } @@ -196,6 +188,140 @@ public static object GetHostObjectAsyncEnumerator(object obj) #endregion + #region fast host object access + + public static void GetFastHostObjectProperty(IntPtr pObject, StdString.Ptr pName, V8Value.FastResult.Ptr pValue, out bool isCacheable) + { + GetFastHostObjectProperty(GetHostObject(pObject), pName, pValue, out isCacheable); + } + + public static void GetFastHostObjectProperty(object obj, StdString.Ptr pName, V8Value.FastResult.Ptr pValue, out bool isCacheable) + { + ((V8FastHostItem)obj).GetProperty(pName, pValue, out isCacheable); + } + + public static void SetFastHostObjectProperty(IntPtr pObject, StdString.Ptr pName, V8Value.FastArg.Ptr pValue) + { + SetFastHostObjectProperty(GetHostObject(pObject), pName, pValue); + } + + public static void SetFastHostObjectProperty(object obj, StdString.Ptr pName, V8Value.FastArg.Ptr pValue) + { + ((V8FastHostItem)obj).SetProperty(pName, pValue); + } + + public static V8FastHostPropertyFlags QueryFastHostObjectProperty(IntPtr pObject, StdString.Ptr pName) + { + return QueryFastHostObjectProperty(GetHostObject(pObject), pName); + } + + public static V8FastHostPropertyFlags QueryFastHostObjectProperty(object obj, StdString.Ptr pName) + { + return ((V8FastHostItem)obj).QueryProperty(pName); + } + + public static bool DeleteFastHostObjectProperty(IntPtr pObject, StdString.Ptr pName) + { + return DeleteFastHostObjectProperty(GetHostObject(pObject), pName); + } + + public static bool DeleteFastHostObjectProperty(object obj, StdString.Ptr pName) + { + return ((V8FastHostItem)obj).DeleteProperty(pName); + } + + public static IEnumerable GetFastHostObjectPropertyNames(IntPtr pObject) + { + return GetFastHostObjectPropertyNames(GetHostObject(pObject)); + } + + public static IEnumerable GetFastHostObjectPropertyNames(object obj) + { + return ((V8FastHostItem)obj).GetPropertyNames(); + } + + public static void GetFastHostObjectProperty(IntPtr pObject, int index, V8Value.FastResult.Ptr pValue) + { + GetFastHostObjectProperty(GetHostObject(pObject), index, pValue); + } + + public static void GetFastHostObjectProperty(object obj, int index, V8Value.FastResult.Ptr pValue) + { + ((V8FastHostItem)obj).GetProperty(index, pValue); + } + + public static void SetFastHostObjectProperty(IntPtr pObject, int index, V8Value.FastArg.Ptr pValue) + { + SetFastHostObjectProperty(GetHostObject(pObject), index, pValue); + } + + public static void SetFastHostObjectProperty(object obj, int index, V8Value.FastArg.Ptr pValue) + { + ((V8FastHostItem)obj).SetProperty(index, pValue); + } + + public static V8FastHostPropertyFlags QueryFastHostObjectProperty(IntPtr pObject, int index) + { + return QueryFastHostObjectProperty(GetHostObject(pObject), index); + } + + public static V8FastHostPropertyFlags QueryFastHostObjectProperty(object obj, int index) + { + return ((V8FastHostItem)obj).QueryProperty(index); + } + + public static bool DeleteFastHostObjectProperty(IntPtr pObject, int index) + { + return DeleteFastHostObjectProperty(GetHostObject(pObject), index); + } + + public static bool DeleteFastHostObjectProperty(object obj, int index) + { + return ((V8FastHostItem)obj).DeleteProperty(index); + } + + public static IEnumerable GetFastHostObjectPropertyIndices(IntPtr pObject) + { + return GetFastHostObjectPropertyIndices(GetHostObject(pObject)); + } + + public static IEnumerable GetFastHostObjectPropertyIndices(object obj) + { + return ((V8FastHostItem)obj).GetPropertyIndices(); + } + + public static void InvokeFastHostObject(IntPtr pObject, bool asConstructor, int argCount, V8Value.FastArg.Ptr pArgs, V8Value.FastResult.Ptr pResult) + { + InvokeFastHostObject(GetHostObject(pObject), asConstructor, argCount, pArgs, pResult); + } + + public static void InvokeFastHostObject(object obj, bool asConstructor, int argCount, V8Value.FastArg.Ptr pArgs, V8Value.FastResult.Ptr pResult) + { + ((V8FastHostItem)obj).Invoke(asConstructor, argCount, pArgs, pResult); + } + + public static void GetFastHostObjectEnumerator(IntPtr pObject, V8Value.FastResult.Ptr pResult) + { + GetFastHostObjectEnumerator(GetHostObject(pObject), pResult); + } + + public static void GetFastHostObjectEnumerator(object obj, V8Value.FastResult.Ptr pResult) + { + ((V8FastHostItem)obj).CreateEnumerator(pResult); + } + + public static void GetFastHostObjectAsyncEnumerator(IntPtr pObject, V8Value.FastResult.Ptr pResult) + { + GetFastHostObjectAsyncEnumerator(GetHostObject(pObject), pResult); + } + + public static void GetFastHostObjectAsyncEnumerator(object obj, V8Value.FastResult.Ptr pResult) + { + ((V8FastHostItem)obj).CreateAsyncEnumerator(pResult); + } + + #endregion + #region exception marshaling public static object MarshalExceptionToScript(IntPtr pSource, Exception exception) @@ -205,7 +331,7 @@ public static object MarshalExceptionToScript(IntPtr pSource, Exception exceptio public static object MarshalExceptionToScript(object source, Exception exception) { - return ((IScriptMarshalWrapper)source).Engine.MarshalToScript(exception); + return ((source as IScriptMarshalWrapper)?.Engine ?? ScriptEngine.Current)?.MarshalToScript(exception); } public static Exception MarshalExceptionToHost(object exception) @@ -220,7 +346,7 @@ public static Exception MarshalExceptionToHost(object exception) public static string LoadModule(IntPtr pSourceDocumentInfo, string specifier, out UniqueDocumentInfo documentInfo, out object exports) { var engine = ScriptEngine.Current; - if (!(engine is IJavaScriptEngine javaScriptEngine)) + if (engine is not IJavaScriptEngine javaScriptEngine) { throw new InvalidOperationException("Module loading requires a JavaScript engine"); } @@ -246,7 +372,7 @@ public static string LoadModule(IntPtr pSourceDocumentInfo, string specifier, ou else { var uri = document.Info.Uri; - var name = (uri != null) ? (uri.IsFile ? uri.LocalPath : uri.AbsoluteUri) : document.Info.Name; + var name = (uri is not null) ? (uri.IsFile ? uri.LocalPath : uri.AbsoluteUri) : document.Info.Name; throw new FileLoadException($"Unsupported document category '{category}'", name); } @@ -256,7 +382,7 @@ public static string LoadModule(IntPtr pSourceDocumentInfo, string specifier, ou public static IDictionary CreateModuleContext(IntPtr pDocumentInfo) { var engine = ScriptEngine.Current; - if (!(engine is IJavaScriptEngine)) + if (engine is not IJavaScriptEngine) { throw new InvalidOperationException("Module context construction requires a JavaScript engine"); } @@ -264,7 +390,7 @@ public static IDictionary CreateModuleContext(IntPtr pDocumentIn var documentInfo = (UniqueDocumentInfo)GetHostObject(pDocumentInfo); var callback = documentInfo.ContextCallback ?? engine.DocumentSettings.ContextCallback; - if ((callback != null) && MiscHelpers.Try(out var sharedContext, () => callback(documentInfo.Info)) && (sharedContext != null)) + if ((callback is not null) && MiscHelpers.Try(out var sharedContext, static ctx => ctx.callback(ctx.documentInfo.Info), (callback, documentInfo)) && (sharedContext is not null)) { var context = new Dictionary(sharedContext.Count); foreach (var pair in sharedContext) diff --git a/ClearScript/V8/V8Runtime.cs b/ClearScript/V8/V8Runtime.cs index 8475b6924..abd383d3b 100644 --- a/ClearScript/V8/V8Runtime.cs +++ b/ClearScript/V8/V8Runtime.cs @@ -18,10 +18,10 @@ public sealed class V8Runtime : IDisposable private static readonly IUniqueNameManager nameManager = new UniqueNameManager(); private DocumentSettings documentSettings; - private readonly DocumentSettings defaultDocumentSettings = new DocumentSettings(); + private readonly DocumentSettings defaultDocumentSettings = new(); private readonly V8IsolateProxy proxy; - private readonly InterlockedOneWayFlag disposedFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag disposedFlag = new(); #endregion @@ -977,7 +977,7 @@ public void WriteHeapSnapshot(Stream stream) using (var engine = CreateScriptEngine(Name)) { - engine.ScriptInvoke(() => proxy.WriteHeapSnapshot(stream)); + engine.ScriptInvoke(static ctx => ctx.proxy.WriteHeapSnapshot(ctx.stream), (proxy, stream)); } } @@ -985,9 +985,9 @@ public void WriteHeapSnapshot(Stream stream) #region internal members - internal readonly UniqueFileNameManager DocumentNameManager = new UniqueFileNameManager(); + internal readonly UniqueFileNameManager DocumentNameManager = new(); - internal readonly HostItemCollateral HostItemCollateral = new HostItemCollateral(); + internal readonly HostItemCollateral HostItemCollateral = new(); internal static void OnDebuggerConnected(V8RuntimeDebuggerEventArgs args) { diff --git a/ClearScript/V8/V8ScriptEngine.InitScript.cs b/ClearScript/V8/V8ScriptEngine.InitScript.cs index 3017ae449..538b53ce3 100644 --- a/ClearScript/V8/V8ScriptEngine.InitScript.cs +++ b/ClearScript/V8/V8ScriptEngine.InitScript.cs @@ -9,6 +9,6 @@ namespace Microsoft.ClearScript.V8 { public sealed partial class V8ScriptEngine { - private const string initScript = "Object.defineProperty(this,'EngineInternal',{value:(t=>{let e=t=>t.bind();function r(){return new this(...arguments)}let o=t.isHostObjectKey;delete t.isHostObjectKey;let n=t=>!!t&&!0===t[o],c=Promise,i=JSON,a=Symbol(),s=t.toJson;return delete t.toJson,Object.freeze({commandHolder:{},getCommandResult:e(t=>null==t?t:'function'!=typeof t.hasOwnProperty?'Module'===t[Symbol.toStringTag]?'[module]':'[external]':!0===t[o]?t:'function'!=typeof t.toString?'['+typeof t+']':t.toString()),strictEquals:e((t,e)=>t===e),invokeConstructor:e((t,e)=>{if('function'!=typeof t)throw Error('Function expected');return r.apply(t,Array.from(e))}),invokeMethod:e((t,e,r)=>{if('function'!=typeof e)throw Error('Function expected');return e.apply(t,Array.from(r))}),createPromise:e(function(){return new c(...arguments)}),isPromise:e(t=>t instanceof c),isHostObject:e(n),completePromiseWithResult:e((t,e,r)=>{try{e(t())}catch(o){r(o)}}),completePromise:e((t,e,r)=>{try{t(),e()}catch(o){r(o)}}),throwValue:e(t=>{throw t}),getStackTrace:e(()=>{try{throw Error('[stack trace]')}catch(t){return t.stack}}),toIterator:e(function*(t){try{for(;t.ScriptableMoveNext();)yield t.ScriptableCurrent}finally{t.ScriptableDispose()}}),toAsyncIterator:e(async function*(t){try{for(;await t.ScriptableMoveNextAsync();)yield t.ScriptableCurrent}finally{await t.ScriptableDisposeAsync()}}),getIterator:e(t=>t?.[Symbol.iterator]?.()),getAsyncIterator:e(t=>t?.[Symbol.asyncIterator]?.()),checkpoint:e(()=>{let e=t[a];if(e)throw e}),toJson:e((t,e)=>s?i.parse(s(t,e)):e),parseJson:e(t=>i.parse(t)),asyncGenerator:async function*(){}().constructor})})(this)});"; + private const string initScript = "Object.defineProperty(this,'EngineInternal',{value:(e=>{let t=e=>e.bind();function r(){return new this(...arguments)}let o=e.isHostObjectKey;delete e.isHostObjectKey;let n=e=>!!e&&!0===e[o],i=e.moduleResultKey;delete e.moduleResultKey;let c=e.getPromiseState;delete e.getPromiseState;let s=e.getPromiseResult;delete e.getPromiseResult;let a=Promise,l=JSON,u=Symbol(),y=e.toJson;return delete e.toJson,Object.freeze({commandHolder:{},getCommandResult:t(e=>null==e?e:'function'!=typeof e.hasOwnProperty?'Module'===e[Symbol.toStringTag]?'[module]':'[external]':!0===e[o]?e:'function'!=typeof e.toString?'['+typeof e+']':e.toString()),strictEquals:t((e,t)=>e===t),isPromise:t(e=>e instanceof a),isHostObject:t(n),invokeConstructor:t((e,t)=>{if('function'!=typeof e)throw Error('Function expected');return r.apply(e,Array.from(t))}),invokeMethod:t((e,t,r)=>{if('function'!=typeof t)throw Error('Function expected');return t.apply(e,Array.from(r))}),createPromise:t(function(){return new a(...arguments)}),createSettledPromiseWithResult:t(e=>{try{return a.resolve(e())}catch(t){return a.reject(t)}}),createSettledPromise:t(e=>{try{return e(),a.resolve()}catch(t){return a.reject(t)}}),completePromiseWithResult:t((e,t,r)=>{try{t(e())}catch(o){r(o)}}),completePromise:t((e,t,r)=>{try{e(),t()}catch(o){r(o)}}),getPromiseState:t(c),getPromiseResult:t(s),initializeTask:t((e,t,r,o,n)=>{t?e.then(o,n):r?n(s(e)):o(s(e))}),createArray:t(()=>[]),throwValue:t(e=>{throw e}),getStackTrace:t(()=>{try{throw Error('[stack trace]')}catch(e){return e.stack}}),toIterator:t(function*(e){try{for(;e.ScriptableMoveNext();)yield e.ScriptableCurrent}finally{e.ScriptableDispose()}}),toAsyncIterator:t(async function*(e){try{for(;await e.ScriptableMoveNextAsync();)yield e.ScriptableCurrent}finally{await e.ScriptableDisposeAsync()}}),getIterator:t(e=>e?.[Symbol.iterator]?.()),getAsyncIterator:t(e=>e?.[Symbol.asyncIterator]?.()),checkpoint:t(()=>{let t=e[u];if(t)throw t}),toJson:t((e,t)=>y?l.parse(y(e,t)):t),parseJson:t(e=>l.parse(e)),asyncGenerator:async function*(){}().constructor,getModuleResult:t(async(e,t)=>(await e,t[0]?.[i]))})})(this)});"; } } diff --git a/ClearScript/V8/V8ScriptEngine.InitScript.js b/ClearScript/V8/V8ScriptEngine.InitScript.js index cf81c7b0e..b61526d20 100644 --- a/ClearScript/V8/V8ScriptEngine.InitScript.js +++ b/ClearScript/V8/V8ScriptEngine.InitScript.js @@ -13,6 +13,15 @@ Object.defineProperty(this, 'EngineInternal', { value: (globalObject => { delete globalObject.isHostObjectKey; const isHostObject = value => !!value && (value[isHostObjectKey] === true); + const moduleResultKey = globalObject.moduleResultKey; + delete globalObject.moduleResultKey; + + const getPromiseState = globalObject.getPromiseState; + delete globalObject.getPromiseState; + + const getPromiseResult = globalObject.getPromiseResult; + delete globalObject.getPromiseResult; + const savedPromise = Promise; const savedJSON = JSON; const checkpointSymbol = Symbol(); @@ -45,6 +54,10 @@ Object.defineProperty(this, 'EngineInternal', { value: (globalObject => { strictEquals: bind((left, right) => left === right), + isPromise: bind(value => value instanceof savedPromise), + + isHostObject: bind(isHostObject), + invokeConstructor: bind((constructor, args) => { if (typeof(constructor) !== 'function') { throw new Error('Function expected'); @@ -63,9 +76,24 @@ Object.defineProperty(this, 'EngineInternal', { value: (globalObject => { return new savedPromise(...arguments); }), - isPromise: bind(value => value instanceof savedPromise), + createSettledPromiseWithResult: bind(getResult => { + try { + return savedPromise.resolve(getResult()); + } + catch (exception) { + return savedPromise.reject(exception); + } + }), - isHostObject: bind(isHostObject), + createSettledPromise: bind(wait => { + try { + wait(); + return savedPromise.resolve(); + } + catch (exception) { + return savedPromise.reject(exception); + } + }), completePromiseWithResult: bind((getResult, resolve, reject) => { try { @@ -88,6 +116,25 @@ Object.defineProperty(this, 'EngineInternal', { value: (globalObject => { return undefined; }), + getPromiseState: bind(getPromiseState), + + getPromiseResult: bind(getPromiseResult), + + initializeTask: bind((promise, isPending, isRejected, onResolved, onRejected) => { + if (isPending) { + promise.then(onResolved, onRejected); + } + else if (isRejected) { + onRejected(getPromiseResult(promise)); + } + else { + onResolved(getPromiseResult(promise)); + } + return undefined; + }), + + createArray: bind(() => []), + throwValue: bind(value => { throw value; }), @@ -138,7 +185,12 @@ Object.defineProperty(this, 'EngineInternal', { value: (globalObject => { parseJson: bind(json => savedJSON.parse(json)), - asyncGenerator: (async function* () {})().constructor + asyncGenerator: (async function* () {})().constructor, + + getModuleResult: bind(async (result, metaHolder) => { + await result; + return metaHolder[0]?.[moduleResultKey]; + }) }); })(this) }); diff --git a/ClearScript/V8/V8ScriptEngine.NetStandard.cs b/ClearScript/V8/V8ScriptEngine.NetStandard.cs deleted file mode 100644 index 858553c26..000000000 --- a/ClearScript/V8/V8ScriptEngine.NetStandard.cs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Reflection; -using System.Threading.Tasks; -using Microsoft.ClearScript.JavaScript; -using Microsoft.ClearScript.Util; - -namespace Microsoft.ClearScript.V8 -{ - public sealed partial class V8ScriptEngine - { - #region internal members - - private void CompletePromise(ValueTask valueTask, object resolve, object reject) - { - Func getResult = () => valueTask.Result; - var engineInternal = (ScriptObject)script.GetProperty("EngineInternal"); - engineInternal.InvokeMethod("completePromiseWithResult", getResult, resolve, reject); - } - - private void CompletePromise(ValueTask valueTask, object resolve, object reject) - { - Action wait = () => WaitForValueTask(valueTask); - var engineInternal = (ScriptObject)script.GetProperty("EngineInternal"); - engineInternal.InvokeMethod("completePromise", wait, resolve, reject); - } - - private static void WaitForValueTask(ValueTask valueTask) - { - if (valueTask.IsCompletedSuccessfully) - { - return; - } - - if (valueTask.IsCanceled) - { - throw new TaskCanceledException(); - } - - valueTask.AsTask().Wait(); - } - - partial void TryConvertValueTaskToPromise(object obj, Action setResult) - { - if (obj.GetType().IsAssignableToGenericType(typeof(ValueTask<>), out var typeArgs)) - { - setResult(typeof(ValueTaskConverter<>).MakeSpecificType(typeArgs).InvokeMember("ToPromise", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new[] { obj, this })); - } - else if (obj is ValueTask valueTask) - { - setResult(valueTask.ToPromise(this)); - } - } - - #endregion - - #region IJavaScriptEngine implementation - - object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) - { - if (valueTask.IsCompleted) - { - return CreatePromise((resolve, reject) => CompletePromise(valueTask, resolve, reject)); - } - - return ((IJavaScriptEngine)this).CreatePromiseForTask(valueTask.AsTask()); - } - - object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) - { - if (valueTask.IsCompleted) - { - return CreatePromise((resolve, reject) => CompletePromise(valueTask, resolve, reject)); - } - - return ((IJavaScriptEngine)this).CreatePromiseForTask(valueTask.AsTask()); - } - - #endregion - - #region Nested type: ValueTaskConverter - - private static class ValueTaskConverter - { - // ReSharper disable UnusedMember.Local - - public static object ToPromise(ValueTask valueTask, V8ScriptEngine engine) - { - return valueTask.ToPromise(engine); - } - - // ReSharper restore UnusedMember.Local - } - - #endregion - } -} diff --git a/ClearScript/V8/V8ScriptEngine.cs b/ClearScript/V8/V8ScriptEngine.cs index e88d3209d..7a0089f43 100644 --- a/ClearScript/V8/V8ScriptEngine.cs +++ b/ClearScript/V8/V8ScriptEngine.cs @@ -2,16 +2,19 @@ // Licensed under the MIT license. using System; +using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Numerics; using System.Reflection; +using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using Microsoft.ClearScript.JavaScript; using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8.FastProxy; using Newtonsoft.Json; namespace Microsoft.ClearScript.V8 @@ -32,15 +35,14 @@ public sealed partial class V8ScriptEngine : ScriptEngine, IJavaScriptEngine { #region data - private static readonly DocumentInfo initScriptInfo = new DocumentInfo(MiscHelpers.FormatInvariant("{0} [internal]", nameof(V8ScriptEngine))); + private static readonly DocumentInfo initScriptInfo = new(MiscHelpers.FormatInvariant("{0} [internal]", nameof(V8ScriptEngine))); private readonly V8Runtime runtime; private readonly bool usingPrivateRuntime; - private readonly V8ScriptEngineFlags engineFlags; private readonly V8ContextProxy proxy; private readonly V8ScriptItem script; - private readonly InterlockedOneWayFlag disposedFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag disposedFlag = new(); private const int continuationInterval = 2000; private bool inContinuationTimerScope; @@ -214,9 +216,9 @@ public V8ScriptEngine(string name, V8RuntimeConstraints constraints, V8ScriptEng } internal V8ScriptEngine(V8Runtime runtime, string name, V8RuntimeConstraints constraints, V8ScriptEngineFlags flags, int debugPort) - : base((runtime != null) ? runtime.Name + ":" + name : name, "js") + : base((runtime is not null) ? runtime.Name + ":" + name : name, "js") { - if (runtime != null) + if (runtime is not null) { this.runtime = runtime; } @@ -229,18 +231,18 @@ internal V8ScriptEngine(V8Runtime runtime, string name, V8RuntimeConstraints con DocumentNameManager = runtime.DocumentNameManager; HostItemCollateral = runtime.HostItemCollateral; - engineFlags = flags; + Flags = flags; proxy = V8ContextProxy.Create(runtime.IsolateProxy, Name, flags, debugPort); script = (V8ScriptItem)GetRootItem(); - if (flags.HasFlag(V8ScriptEngineFlags.EnableStringifyEnhancements)) + if (flags.HasAllFlags(V8ScriptEngineFlags.EnableStringifyEnhancements)) { script.SetProperty("toJson", new Func(new JsonHelper(this).ToJson)); } Execute(initScriptInfo, initScript); - if (flags.HasFlag(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.AwaitDebuggerAndPauseOnStart)) + if (flags.HasAllFlags(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.AwaitDebuggerAndPauseOnStart)) { awaitDebuggerAndPause = true; } @@ -490,7 +492,7 @@ public V8Script Compile(string documentName, string code) public V8Script Compile(DocumentInfo documentInfo, string code) { VerifyNotDisposed(); - return ScriptInvoke(() => CompileInternal(documentInfo.MakeUnique(this), code)); + return ScriptInvoke(static ctx => ctx.self.CompileInternal(ctx.documentInfo.MakeUnique(ctx.self), ctx.code), (self: this, documentInfo, code)); } /// @@ -545,13 +547,18 @@ public V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cach { VerifyNotDisposed(); - V8Script tempScript = null; - cacheBytes = ScriptInvoke(() => - { - tempScript = CompileInternal(documentInfo.MakeUnique(this), code, cacheKind, out var tempCacheBytes); - return tempCacheBytes; - }); + var ctx = (self: this, documentInfo, code, cacheKind, cacheBytes: (byte[])null); + + var tempScript = ScriptInvoke( + static pCtx => + { + ref var ctx = ref pCtx.AsRef(); + return ctx.self.CompileInternal(ctx.documentInfo.MakeUnique(ctx.self), ctx.code, ctx.cacheKind, out ctx.cacheBytes); + }, + StructPtr.FromRef(ref ctx) + ); + cacheBytes = ctx.cacheBytes; return tempScript; } @@ -616,13 +623,18 @@ public V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cach { VerifyNotDisposed(); - V8Script tempScript = null; - cacheAccepted = ScriptInvoke(() => - { - tempScript = CompileInternal(documentInfo.MakeUnique(this), code, cacheKind, cacheBytes, out var tempCacheAccepted); - return tempCacheAccepted; - }); + var ctx = (self: this, documentInfo, code, cacheKind, cacheBytes, cacheAccepted: false); + + var tempScript = ScriptInvoke( + static pCtx => + { + ref var ctx = ref pCtx.AsRef(); + return ctx.self.CompileInternal(ctx.documentInfo.MakeUnique(ctx.self), ctx.code, ctx.cacheKind, ctx.cacheBytes, out ctx.cacheAccepted); + }, + StructPtr.FromRef(ref ctx) + ); + cacheAccepted = ctx.cacheAccepted; return tempScript; } @@ -681,19 +693,23 @@ public V8Script Compile(DocumentInfo documentInfo, string code, V8CacheKind cach { VerifyNotDisposed(); - V8Script tempScript = null; - var tempCacheBytes = cacheBytes; - cacheResult = ScriptInvoke(() => - { - tempScript = CompileInternal(documentInfo.MakeUnique(this), code, cacheKind, ref tempCacheBytes, out var tempCacheUpdated); - return tempCacheUpdated; - }); + var ctx = (self: this, documentInfo, code, cacheKind, cacheBytes, cacheResult: V8CacheResult.Disabled); - if (cacheResult == V8CacheResult.Updated) + var tempScript = ScriptInvoke( + static pCtx => + { + ref var ctx = ref pCtx.AsRef(); + return ctx.self.CompileInternal(ctx.documentInfo.MakeUnique(ctx.self), ctx.code, ctx.cacheKind, ref ctx.cacheBytes, out ctx.cacheResult); + }, + StructPtr.FromRef(ref ctx) + ); + + if (ctx.cacheResult == V8CacheResult.Updated) { - cacheBytes = tempCacheBytes; + cacheBytes = ctx.cacheBytes; } + cacheResult = ctx.cacheResult; return tempScript; } @@ -1046,13 +1062,15 @@ public void WriteRuntimeHeapSnapshot(Stream stream) MiscHelpers.VerifyNonNullArgument(stream, nameof(stream)); VerifyNotDisposed(); - ScriptInvoke(() => proxy.WriteIsolateHeapSnapshot(stream)); + ScriptInvoke(static ctx => ctx.proxy.WriteIsolateHeapSnapshot(ctx.stream), (proxy, stream)); } #endregion #region internal members + internal V8ScriptEngineFlags Flags { get; } + internal V8Runtime.Statistics GetRuntimeStatistics() { VerifyNotDisposed(); @@ -1062,17 +1080,20 @@ internal V8Runtime.Statistics GetRuntimeStatistics() internal Statistics GetStatistics() { VerifyNotDisposed(); - return ScriptInvoke(() => - { - var statistics = proxy.GetStatistics(); - - if (commonJSManager != null) + return ScriptInvoke( + static self => { - statistics.CommonJSModuleCacheSize = CommonJSManager.ModuleCacheSize; - } + var statistics = self.proxy.GetStatistics(); - return statistics; - }); + if (self.commonJSManager is not null) + { + statistics.CommonJSModuleCacheSize = self.commonJSManager.ModuleCacheSize; + } + + return statistics; + }, + this + ); } internal bool Equals(V8ScriptItem left, V8ScriptItem right) @@ -1092,7 +1113,7 @@ internal bool Equals(V8ScriptItem left, V8ScriptItem right) private object GetRootItem() { - return MarshalToHost(ScriptInvoke(() => proxy.GetRootItem()), false); + return MarshalToHost(ScriptInvoke(static proxy => proxy.GetRootItem(), proxy), false); } private void VerifyNotDisposed() @@ -1103,6 +1124,8 @@ private void VerifyNotDisposed() } } + private string BaseExecuteCommand(string command) => base.ExecuteCommand(command); + // ReSharper disable ParameterHidesMember private object Execute(V8Script script, bool evaluate) @@ -1110,39 +1133,45 @@ private object Execute(V8Script script, bool evaluate) MiscHelpers.VerifyNonNullArgument(script, nameof(script)); VerifyNotDisposed(); - return MarshalToHost(ScriptInvoke(() => - { - if (inContinuationTimerScope || (ContinuationCallback == null)) - { - if (ShouldAwaitDebuggerAndPause(script.DocumentInfo)) + return MarshalToHost( + ScriptInvoke( + static ctx => { - proxy.AwaitDebuggerAndPause(); - } - - return ExecuteInternal(script, evaluate); - } + if (ctx.self.inContinuationTimerScope || (ctx.self.ContinuationCallback is null)) + { + if (ctx.self.ShouldAwaitDebuggerAndPause(ctx.script.DocumentInfo)) + { + ctx.self.proxy.AwaitDebuggerAndPause(); + } - var state = new Timer[] { null }; - using (state[0] = new Timer(_ => OnContinuationTimer(state[0]), null, Timeout.Infinite, Timeout.Infinite)) - { - inContinuationTimerScope = true; - try - { - state[0].Change(continuationInterval, Timeout.Infinite); + return ctx.self.ExecuteInternal(ctx.script, ctx.evaluate); + } - if (ShouldAwaitDebuggerAndPause(script.DocumentInfo)) + var state = new Timer[] { null }; + using (state[0] = new Timer(_ => ctx.self.OnContinuationTimer(state[0]), null, Timeout.Infinite, Timeout.Infinite)) { - proxy.AwaitDebuggerAndPause(); + ctx.self.inContinuationTimerScope = true; + try + { + state[0].Change(continuationInterval, Timeout.Infinite); + + if (ctx.self.ShouldAwaitDebuggerAndPause(ctx.script.DocumentInfo)) + { + ctx.self.proxy.AwaitDebuggerAndPause(); + } + + return ctx.self.ExecuteInternal(ctx.script, ctx.evaluate); + } + finally + { + ctx.self.inContinuationTimerScope = false; + } } - - return ExecuteInternal(script, evaluate); - } - finally - { - inContinuationTimerScope = false; - } - } - }), false); + }, + (self: this, script, evaluate) + ), + false + ); } // ReSharper restore ParameterHidesMember @@ -1168,7 +1197,7 @@ private V8Script CompileInternal(UniqueDocumentInfo documentInfo, string code) // ReSharper disable once LocalVariableHidesMember var script = proxy.Compile(documentInfo, code); - if (module != null) + if (module is not null) { module.Evaluator = () => proxy.Execute(script, true); } @@ -1197,7 +1226,7 @@ private V8Script CompileInternal(UniqueDocumentInfo documentInfo, string code, V // ReSharper disable once LocalVariableHidesMember var script = proxy.Compile(documentInfo, code, cacheKind, out cacheBytes); - if (module != null) + if (module is not null) { module.Evaluator = () => proxy.Execute(script, true); } @@ -1226,7 +1255,7 @@ private V8Script CompileInternal(UniqueDocumentInfo documentInfo, string code, V // ReSharper disable once LocalVariableHidesMember var script = proxy.Compile(documentInfo, code, cacheKind, cacheBytes, out cacheAccepted); - if (module != null) + if (module is not null) { module.Evaluator = () => proxy.Execute(script, true); } @@ -1255,7 +1284,7 @@ private V8Script CompileInternal(UniqueDocumentInfo documentInfo, string code, V // ReSharper disable once LocalVariableHidesMember var script = proxy.Compile(documentInfo, code, cacheKind, ref cacheBytes, out cacheResult); - if (module != null) + if (module is not null) { module.Evaluator = () => proxy.Execute(script, true); } @@ -1303,7 +1332,7 @@ private bool ShouldAwaitDebuggerAndPause(DocumentInfo documentInfo) { if (!awaitDebuggerAndPause.HasValue) { - if (documentInfo.Flags.GetValueOrDefault().HasFlag(DocumentFlags.AwaitDebuggerAndPause)) + if (documentInfo.Flags.GetValueOrDefault().HasAllFlags(DocumentFlags.AwaitDebuggerAndPause)) { awaitDebuggerAndPause = false; return true; @@ -1326,7 +1355,7 @@ private void OnContinuationTimer(Timer timer) try { var callback = ContinuationCallback; - if ((callback != null) && !callback()) + if ((callback is not null) && !callback()) { Interrupt(); } @@ -1347,6 +1376,38 @@ private object CreatePromise(Action executor) return V8ScriptItem.Wrap(this, v8Internal.InvokeMethod(false, "createPromise", executor)); } + private object CreateSettledPromise(Task task) + { + VerifyNotDisposed(); + Func getResult = () => task.Result; + var v8Internal = (V8ScriptItem)script.GetProperty("EngineInternal"); + return V8ScriptItem.Wrap(this, v8Internal.InvokeMethod(false, "createSettledPromiseWithResult", getResult)); + } + + private object CreateSettledPromise(Task task) + { + VerifyNotDisposed(); + Action wait = task.Wait; + var v8Internal = (V8ScriptItem)script.GetProperty("EngineInternal"); + return V8ScriptItem.Wrap(this, v8Internal.InvokeMethod(false, "createSettledPromise", wait)); + } + + private object CreateSettledPromise(ValueTask valueTask) + { + VerifyNotDisposed(); + Func getResult = () => valueTask.Result; + var v8Internal = (V8ScriptItem)script.GetProperty("EngineInternal"); + return V8ScriptItem.Wrap(this, v8Internal.InvokeMethod(false, "createSettledPromiseWithResult", getResult)); + } + + private object CreateSettledPromise(ValueTask valueTask) + { + VerifyNotDisposed(); + Action wait = () => WaitForValueTask(valueTask); + var v8Internal = (V8ScriptItem)script.GetProperty("EngineInternal"); + return V8ScriptItem.Wrap(this, v8Internal.InvokeMethod(false, "createSettledPromise", wait)); + } + private void CompletePromise(Task task, object resolve, object reject) { Func getResult = () => task.Result; @@ -1361,7 +1422,20 @@ private void CompletePromise(Task task, object resolve, object reject) engineInternal.InvokeMethod("completePromise", wait, resolve, reject); } - partial void TryConvertValueTaskToPromise(object obj, Action setResult); + private static void WaitForValueTask(ValueTask valueTask) + { + if (valueTask.IsCompletedSuccessfully) + { + return; + } + + if (valueTask.IsCanceled) + { + throw new TaskCanceledException(); + } + + valueTask.AsTask().Wait(); + } #endregion @@ -1415,13 +1489,16 @@ public override ScriptObject Global /// public override string ExecuteCommand(string command) { - return ScriptInvoke(() => - { - var engineInternal = (ScriptObject)script.GetProperty("EngineInternal"); - var commandHolder = (ScriptObject)engineInternal.GetProperty("commandHolder"); - commandHolder.SetProperty("command", command); - return base.ExecuteCommand("EngineInternal.getCommandResult(eval(EngineInternal.commandHolder.command))"); - }); + return ScriptInvoke( + static ctx => + { + var engineInternal = (ScriptObject)ctx.self.script.GetProperty("EngineInternal"); + var commandHolder = (ScriptObject)engineInternal.GetProperty("commandHolder"); + commandHolder.SetProperty("command", ctx.command); + return ctx.self.BaseExecuteCommand("EngineInternal.getCommandResult(eval(EngineInternal.commandHolder.command))"); + }, + (self: this, command) + ); } /// @@ -1463,43 +1540,49 @@ public override void CollectGarbage(bool exhaustive) internal override bool EnumerateExtensionMethods => base.EnumerateExtensionMethods && !SuppressExtensionMethodEnumeration; - internal override bool UseCaseInsensitiveMemberBinding => engineFlags.HasFlag(V8ScriptEngineFlags.UseCaseInsensitiveMemberBinding); + internal override bool UseCaseInsensitiveMemberBinding => Flags.HasAllFlags(V8ScriptEngineFlags.UseCaseInsensitiveMemberBinding); internal override void AddHostItem(string itemName, HostItemFlags flags, object item) { VerifyNotDisposed(); - var globalMembers = flags.HasFlag(HostItemFlags.GlobalMembers); - if (globalMembers && engineFlags.HasFlag(V8ScriptEngineFlags.DisableGlobalMembers)) + var globalMembers = flags.HasAllFlags(HostItemFlags.GlobalMembers); + if (globalMembers && Flags.HasAllFlags(V8ScriptEngineFlags.DisableGlobalMembers)) { throw new InvalidOperationException("GlobalMembers support is disabled in this script engine"); } MiscHelpers.VerifyNonNullArgument(itemName, nameof(itemName)); - Debug.Assert(item != null); + Debug.Assert(item is not null); - ScriptInvoke(() => - { - var marshaledItem = MarshalToScript(item, flags); - if (!(marshaledItem is HostItem)) + ScriptInvoke( + static ctx => { - throw new InvalidOperationException("Invalid host item"); - } + var marshaledItem = ctx.self.MarshalToScript(ctx.item, ctx.flags); + if ((marshaledItem is not HostItem) && (marshaledItem is not V8FastHostItem)) + { + throw new InvalidOperationException("Invalid host item"); + } - proxy.AddGlobalItem(itemName, marshaledItem, globalMembers); - }); + ctx.self.proxy.AddGlobalItem(ctx.itemName, marshaledItem, ctx.globalMembers); + }, + (self: this, itemName, flags, item, globalMembers) + ); } internal override object MarshalToScript(object obj, HostItemFlags flags) { - const long maxIntInDouble = (1L << 53) - 1; + return MarshalToScriptInternal(obj, flags, null); + } - if (obj == null) + private object MarshalToScriptInternal(object obj, HostItemFlags flags, Dictionary marshaledArrayMap) + { + if (obj is null) { obj = NullExportValue; } - if (obj == null) + if (obj is null) { return DBNull.Value; } @@ -1531,12 +1614,12 @@ internal override object MarshalToScript(object obj, HostItemFlags flags) if (obj is long longValue) { - if (engineFlags.HasFlag(V8ScriptEngineFlags.MarshalAllLongAsBigInt)) + if (Flags.HasAllFlags(V8ScriptEngineFlags.MarshalAllInt64AsBigInt)) { return new BigInteger(longValue); } - if (engineFlags.HasFlag(V8ScriptEngineFlags.MarshalUnsafeLongAsBigInt) && (Math.Abs(longValue) > maxIntInDouble)) + if (Flags.HasAllFlags(V8ScriptEngineFlags.MarshalUnsafeInt64AsBigInt) && ((longValue < -MiscHelpers.MaxInt64InDouble) || (longValue > MiscHelpers.MaxInt64InDouble))) { return new BigInteger(longValue); } @@ -1544,23 +1627,23 @@ internal override object MarshalToScript(object obj, HostItemFlags flags) if (obj is ulong ulongValue) { - if (engineFlags.HasFlag(V8ScriptEngineFlags.MarshalAllLongAsBigInt)) + if (Flags.HasAllFlags(V8ScriptEngineFlags.MarshalAllInt64AsBigInt)) { return new BigInteger(ulongValue); } - if (engineFlags.HasFlag(V8ScriptEngineFlags.MarshalUnsafeLongAsBigInt) && (ulongValue > maxIntInDouble)) + if (Flags.HasAllFlags(V8ScriptEngineFlags.MarshalUnsafeInt64AsBigInt) && (ulongValue > MiscHelpers.MaxInt64InDouble)) { return new BigInteger(ulongValue); } } - if (engineFlags.HasFlag(V8ScriptEngineFlags.EnableDateTimeConversion) && (obj is DateTime)) + if (Flags.HasAllFlags(V8ScriptEngineFlags.EnableDateTimeConversion) && (obj is DateTime)) { return obj; } - if (engineFlags.HasFlag(V8ScriptEngineFlags.EnableTaskPromiseConversion)) + if (Flags.HasAllFlags(V8ScriptEngineFlags.EnableTaskPromiseConversion)) { // .NET Core async functions return Task subclass instances that trigger result wrapping @@ -1570,19 +1653,26 @@ internal override object MarshalToScript(object obj, HostItemFlags flags) testObject = testHostObject.Target; } - if (testObject != null) + if (testObject is not null) { - if (testObject.GetType().IsAssignableToGenericType(typeof(Task<>), out var typeArgs)) + if (testObject.GetType().IsAssignableToGenericType(typeof(Task<>), out var taskTypeArgs) && (taskTypeArgs.Length > 0) && taskTypeArgs[0].IsAccessible(this)) { - obj = typeof(TaskConverter<>).MakeSpecificType(typeArgs).InvokeMember("ToPromise", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new[] { testObject, this }); + obj = typeof(TaskConverter<>).MakeSpecificType(taskTypeArgs).InvokeMember("ToPromise", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new[] { testObject, this }); } else if (testObject is Task task) { obj = task.ToPromise(this); } - else if (engineFlags.HasFlag(V8ScriptEngineFlags.EnableValueTaskPromiseConversion)) + else if (Flags.HasAllFlags(V8ScriptEngineFlags.EnableValueTaskPromiseConversion)) { - TryConvertValueTaskToPromise(testObject, result => obj = result); + if (obj.GetType().IsAssignableToGenericType(typeof(ValueTask<>), out var valueTaskTypeArgs)) + { + obj = typeof(ValueTaskConverter<>).MakeSpecificType(valueTaskTypeArgs).InvokeMember("ToPromise", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new[] { obj, this }); + } + else if (obj is ValueTask valueTask) + { + obj = valueTask.ToPromise(this); + } } } } @@ -1598,11 +1688,34 @@ internal override object MarshalToScript(object obj, HostItemFlags flags) } var hostTarget = obj as HostTarget; - if ((hostTarget != null) && !(hostTarget is IHostVariable)) + if ((hostTarget is not null) && (hostTarget is not IHostVariable)) { obj = hostTarget.Target; } + if (Flags.HasAllFlags(V8ScriptEngineFlags.EnableArrayConversion)) + { + if ((obj is Array array) && ((hostTarget is null) || hostTarget.Type.IsArray) && (array.Rank == 1)) + { + if (marshaledArrayMap?.TryGetValue(array, out var scriptArray) != true) + { + var v8Internal = (V8ScriptItem)script.GetProperty("EngineInternal"); + scriptArray = (V8ScriptItem)V8ScriptItem.Wrap(this, v8Internal.InvokeMethod(false, "createArray")); + (marshaledArrayMap ?? (marshaledArrayMap = new Dictionary())).Add(array, scriptArray); + + var elementType = array.GetType().GetElementType(); + var upperBound = array.GetUpperBound(0); + for (var index = array.GetLowerBound(0); index <= upperBound; index++) + { + var result = PrepareResult(array.GetValue(index), elementType, ScriptMemberFlags.None, false); + scriptArray.SetProperty(false, index, MarshalToScriptInternal(result, flags, marshaledArrayMap)); + } + } + + obj = scriptArray; + } + } + if (obj is ScriptItem scriptItem) { if ((scriptItem.Engine is V8ScriptEngine that) && (that.runtime == runtime)) @@ -1616,19 +1729,29 @@ internal override object MarshalToScript(object obj, HostItemFlags flags) } } + if (obj is IV8FastHostObject fastObject) + { + return V8FastHostItem.Wrap(this, fastObject, flags); + } + return HostItem.Wrap(this, hostTarget ?? obj, flags); } internal override object MarshalToHost(object obj, bool preserveHostTarget) { - if (obj == null) + return MarshalToHostInternal(obj, preserveHostTarget, null); + } + + private object MarshalToHostInternal(object obj, bool preserveHostTarget, Dictionary marshaledArrayMap) + { + if (obj is null) { return UndefinedImportValue; } if (obj is DBNull) { - return null; + return NullImportValue; } if (MiscHelpers.TryMarshalPrimitiveToHost(obj, DisableFloatNarrowing, out var result)) @@ -1636,6 +1759,11 @@ internal override object MarshalToHost(object obj, bool preserveHostTarget) return result; } + if (obj is V8FastHostItem fastHostItem) + { + return fastHostItem.Target; + } + if (obj is HostTarget hostTarget) { return preserveHostTarget ? hostTarget : hostTarget.Target; @@ -1651,57 +1779,83 @@ internal override object MarshalToHost(object obj, bool preserveHostTarget) return obj; } - var scriptItem = V8ScriptItem.Wrap(this, obj); - if (engineFlags.HasFlag(V8ScriptEngineFlags.EnableTaskPromiseConversion) && (obj is IV8Object v8Object) && v8Object.IsPromise) - { - return scriptItem.ToTask(); - } - - return scriptItem; - } + var wrappedObject = V8ScriptItem.Wrap(this, obj); - internal override object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate) - { - VerifyNotDisposed(); - - return ScriptInvoke(() => + if (obj is IV8Object v8Object) { - if ((documentNames != null) && !documentInfo.Flags.GetValueOrDefault().HasFlag(DocumentFlags.IsTransient)) + var scriptItem = (V8ScriptItem)wrappedObject; + + if (Flags.HasAllFlags(V8ScriptEngineFlags.EnableTaskPromiseConversion) && v8Object.IsPromise) { - documentNames.Add(documentInfo.UniqueName); + return wrappedObject.ToTask(); } - if (inContinuationTimerScope || (ContinuationCallback == null)) + if (Flags.HasAllFlags(V8ScriptEngineFlags.EnableArrayConversion) && v8Object.IsArray) { - if (ShouldAwaitDebuggerAndPause(documentInfo.Info)) + if (marshaledArrayMap?.TryGetValue(scriptItem, out var array) != true) { - proxy.AwaitDebuggerAndPause(); + array = new object[((IList)scriptItem).Count]; + (marshaledArrayMap ?? (marshaledArrayMap = new Dictionary())).Add(scriptItem, array); + + var length = array.Length; + for (var index = 0; index < length; index++) + { + array[index] = MarshalToHostInternal(scriptItem.GetProperty(false, index), false, marshaledArrayMap); + } } - return ExecuteInternal(documentInfo, code, evaluate); + return array; } + } + + return wrappedObject; + } + + internal override object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate) + { + VerifyNotDisposed(); - var state = new Timer[] { null }; - using (state[0] = new Timer(_ => OnContinuationTimer(state[0]), null, Timeout.Infinite, Timeout.Infinite)) + return ScriptInvoke( + static ctx => { - inContinuationTimerScope = true; - try + if ((ctx.self.documentNames is not null) && !ctx.documentInfo.Flags.GetValueOrDefault().HasAllFlags(DocumentFlags.IsTransient)) { - state[0].Change(continuationInterval, Timeout.Infinite); + ctx.self.documentNames.Add(ctx.documentInfo.UniqueName); + } - if (ShouldAwaitDebuggerAndPause(documentInfo.Info)) + if (ctx.self.inContinuationTimerScope || (ctx.self.ContinuationCallback is null)) + { + if (ctx.self.ShouldAwaitDebuggerAndPause(ctx.documentInfo.Info)) { - proxy.AwaitDebuggerAndPause(); + ctx.self.proxy.AwaitDebuggerAndPause(); } - return ExecuteInternal(documentInfo, code, evaluate); + return ctx.self.ExecuteInternal(ctx.documentInfo, ctx.code, ctx.evaluate); } - finally + + var state = new Timer[] { null }; + using (state[0] = new Timer(_ => ctx.self.OnContinuationTimer(state[0]), null, Timeout.Infinite, Timeout.Infinite)) { - inContinuationTimerScope = false; + ctx.self.inContinuationTimerScope = true; + try + { + state[0].Change(continuationInterval, Timeout.Infinite); + + if (ctx.self.ShouldAwaitDebuggerAndPause(ctx.documentInfo.Info)) + { + ctx.self.proxy.AwaitDebuggerAndPause(); + } + + return ctx.self.ExecuteInternal(ctx.documentInfo, ctx.code, ctx.evaluate); + } + finally + { + ctx.self.inContinuationTimerScope = false; + } } - } - }); + }, + (self: this, documentInfo, code, evaluate) + ); } internal override object ExecuteRaw(UniqueDocumentInfo documentInfo, string code, bool evaluate) @@ -1714,7 +1868,7 @@ internal override object ExecuteRaw(UniqueDocumentInfo documentInfo, string code internal override void OnAccessSettingsChanged() { base.OnAccessSettingsChanged(); - ScriptInvoke(() => proxy.OnAccessSettingsChanged()); + ScriptInvoke(static proxy => proxy.OnAccessSettingsChanged(), proxy); } #endregion @@ -1726,18 +1880,56 @@ internal override void ScriptInvoke(Action action) VerifyNotDisposed(); using (CreateEngineScope()) { - proxy.InvokeWithLock(() => ScriptInvokeInternal(action)); + proxy.InvokeWithLock(static ctx => ctx.self.ScriptInvokeInternal(ctx.action), (self: this, action)); } } - internal override T ScriptInvoke(Func func) + internal override void ScriptInvoke(Action action, in TArg arg) { VerifyNotDisposed(); using (CreateEngineScope()) { - var result = default(T); - proxy.InvokeWithLock(() => result = ScriptInvokeInternal(func)); - return result; + proxy.InvokeWithLock(static ctx => ctx.self.ScriptInvokeInternal(ctx.action, ctx.arg), (self: this, action, arg)); + } + } + + internal override TResult ScriptInvoke(Func func) + { + VerifyNotDisposed(); + using (CreateEngineScope()) + { + var ctx = (self: this, func, result: default(TResult)); + + proxy.InvokeWithLock( + static pCtx => + { + ref var ctx = ref pCtx.AsRef(); + ctx.result = ctx.self.ScriptInvokeInternal(ctx.func); + }, + StructPtr.FromRef(ref ctx) + ); + + return ctx.result; + } + } + + internal override TResult ScriptInvoke(Func func, in TArg arg) + { + VerifyNotDisposed(); + using (CreateEngineScope()) + { + var ctx = (self: this, func, arg, result: default(TResult)); + + proxy.InvokeWithLock( + static pCtx => + { + ref var ctx = ref pCtx.AsRef(); + ctx.result = ctx.self.ScriptInvokeInternal(ctx.func, ctx.arg); + }, + StructPtr.FromRef(ref ctx) + ); + + return ctx.result; } } @@ -1782,6 +1974,72 @@ protected override void Dispose(bool disposing) #endregion + #region fast host item cache + + private readonly ConditionalWeakTable>> fastHostItemCache = new(); + + internal V8FastHostItem GetOrCreateFastHostItem(IV8FastHostObject target, HostItemFlags flags) + { + var cacheEntry = fastHostItemCache.GetOrCreateValue(target); + + List> activeWeakRefs = null; + var staleWeakRefCount = 0; + + foreach (var weakRef in cacheEntry) + { + if (!weakRef.TryGetTarget(out var hostItem)) + { + staleWeakRefCount++; + } + else + { + if (hostItem.Flags == flags) + { + return hostItem; + } + + if (activeWeakRefs is null) + { + activeWeakRefs = new List>(cacheEntry.Count); + } + + activeWeakRefs.Add(weakRef); + } + } + + if (staleWeakRefCount > 4) + { + cacheEntry.Clear(); + if (activeWeakRefs is not null) + { + cacheEntry.Capacity = activeWeakRefs.Count + 1; + cacheEntry.AddRange(activeWeakRefs); + } + } + + return CreateFastHostItem(target, flags, cacheEntry); + } + + private V8FastHostItem CreateFastHostItem(IV8FastHostObject target, HostItemFlags flags, List> cacheEntry) + { + var newHostItem = new V8FastHostItem(this, target, flags); + + if (cacheEntry is not null) + { + cacheEntry.Add(new WeakReference(newHostItem)); + } + + // ReSharper disable once SuspiciousTypeConversion.Global + if (target is IScriptableObject scriptableObject) + { + scriptableObject.OnExposedToScriptCode(this); + } + + return newHostItem; + } + + #endregion + #region IJavaScriptEngine implementation uint IJavaScriptEngine.BaseLanguageVersion => 8; @@ -1792,7 +2050,12 @@ protected override void Dispose(bool disposing) object IJavaScriptEngine.CreatePromiseForTask(Task task) { - var scheduler = (engineFlags.HasFlag(V8ScriptEngineFlags.UseSynchronizationContexts) && MiscHelpers.Try(out var contextScheduler, TaskScheduler.FromCurrentSynchronizationContext)) ? contextScheduler : TaskScheduler.Current; + if (task.IsCompleted) + { + return CreateSettledPromise(task); + } + + var scheduler = (Flags.HasAllFlags(V8ScriptEngineFlags.UseSynchronizationContexts) && MiscHelpers.Try(out var contextScheduler, static () => TaskScheduler.FromCurrentSynchronizationContext())) ? contextScheduler : TaskScheduler.Current; return CreatePromise((resolve, reject) => { task.ContinueWith(_ => CompletePromise(task, resolve, reject), CancellationToken.None, TaskContinuationOptions.ExecuteSynchronously, scheduler); @@ -1801,28 +2064,55 @@ object IJavaScriptEngine.CreatePromiseForTask(Task task) object IJavaScriptEngine.CreatePromiseForTask(Task task) { - var scheduler = (engineFlags.HasFlag(V8ScriptEngineFlags.UseSynchronizationContexts) && MiscHelpers.Try(out var contextScheduler, TaskScheduler.FromCurrentSynchronizationContext)) ? contextScheduler : TaskScheduler.Current; + if (task.IsCompleted) + { + return CreateSettledPromise(task); + } + + var scheduler = (Flags.HasAllFlags(V8ScriptEngineFlags.UseSynchronizationContexts) && MiscHelpers.Try(out var contextScheduler, static () => TaskScheduler.FromCurrentSynchronizationContext())) ? contextScheduler : TaskScheduler.Current; return CreatePromise((resolve, reject) => { task.ContinueWith(_ => CompletePromise(task, resolve, reject), CancellationToken.None, TaskContinuationOptions.ExecuteSynchronously, scheduler); }); } + object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) + { + if (valueTask.IsCompleted) + { + return CreateSettledPromise(valueTask); + } + + return ((IJavaScriptEngine)this).CreatePromiseForTask(valueTask.AsTask()); + } + + object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) + { + if (valueTask.IsCompleted) + { + return CreateSettledPromise(valueTask); + } + + return ((IJavaScriptEngine)this).CreatePromiseForTask(valueTask.AsTask()); + } + Task IJavaScriptEngine.CreateTaskForPromise(ScriptObject promise) { - if (!(promise is V8ScriptItem v8ScriptItem) || !v8ScriptItem.IsPromise) + if ((promise is not V8ScriptItem v8ScriptItem) || !v8ScriptItem.IsPromise) { throw new ArgumentException("The object is not a V8 promise", nameof(promise)); } var source = new TaskCompletionSource(); - var context = engineFlags.HasFlag(V8ScriptEngineFlags.UseSynchronizationContexts) ? SynchronizationContext.Current : null; + var context = Flags.HasAllFlags(V8ScriptEngineFlags.UseSynchronizationContexts) ? SynchronizationContext.Current : null; Action setResultWorker = result => source.SetResult(result); - var setResult = (context == null) ? setResultWorker : result => context.Post(_ => setResultWorker(result), null); + var setResult = (context is null) ? setResultWorker : result => context.Post(_ => setResultWorker(result), null); Action setExceptionWorker = exception => source.SetException(exception); - var setException = (context == null) ? setExceptionWorker : exception => context.Post(_ => setExceptionWorker(exception), null); + var setException = (context is null) ? setExceptionWorker : exception => context.Post(_ => setExceptionWorker(exception), null); + + var v8Internal = (V8ScriptItem)script.GetProperty("EngineInternal"); Action onResolved = result => { @@ -1833,8 +2123,7 @@ Task IJavaScriptEngine.CreateTaskForPromise(ScriptObject promise) { try { - var engineInternal = (ScriptObject)script.GetProperty("EngineInternal"); - engineInternal.InvokeMethod("throwValue", error); + v8Internal.InvokeMethod("throwValue", error); } catch (Exception exception) { @@ -1842,7 +2131,8 @@ Task IJavaScriptEngine.CreateTaskForPromise(ScriptObject promise) } }; - v8ScriptItem.InvokeMethod(false, "then", onResolved, onRejected); + var flags = v8ScriptItem.Flags; + v8Internal.InvokeMethod(false, "initializeTask", v8ScriptItem, flags.HasAllFlags(JavaScriptObjectFlags.Pending), flags.HasAllFlags(JavaScriptObjectFlags.Rejected), onResolved, onRejected); return source.Task; } @@ -1891,13 +2181,29 @@ public static object ToPromise(Task task, V8ScriptEngine engine) #endregion + #region Nested type: ValueTaskConverter + + private static class ValueTaskConverter + { + // ReSharper disable UnusedMember.Local + + public static object ToPromise(ValueTask valueTask, V8ScriptEngine engine) + { + return valueTask.ToPromise(engine); + } + + // ReSharper restore UnusedMember.Local + } + + #endregion + #region Nested type: JsonHelper /// public sealed class JsonHelper : JsonConverter { private readonly ScriptObject stringify; - private readonly HashSet cycleDetectionSet = new HashSet(); + private readonly HashSet cycleDetectionSet = new(); /// public JsonHelper(V8ScriptEngine engine) @@ -1909,14 +2215,13 @@ public JsonHelper(V8ScriptEngine engine) /// public string ToJson(object key, object value) { - key = MiscHelpers.EnsureNonBlank(key.ToString(), "[root]"); + key = key.ToString().ToNonBlank("[root]"); - if (cycleDetectionSet.Contains(value)) + if (!cycleDetectionSet.Add(value)) { throw new InvalidOperationException($"Cycle detected at key '{key}' during JSON serialization"); } - cycleDetectionSet.Add(value); try { return JsonConvert.SerializeObject(value, this); diff --git a/ClearScript/V8/V8ScriptEngineFlags.cs b/ClearScript/V8/V8ScriptEngineFlags.cs index 9fb36b3f5..28bd9945f 100644 --- a/ClearScript/V8/V8ScriptEngineFlags.cs +++ b/ClearScript/V8/V8ScriptEngineFlags.cs @@ -62,21 +62,33 @@ public enum V8ScriptEngineFlags EnableDynamicModuleImports = 0x00000020, /// - /// Specifies that long integers with values greater than + /// Specifies that 64-bit integers with values greater than /// Number.MAX_SAFE_INTEGER /// or less than /// Number.MIN_SAFE_INTEGER /// are to be marshaled as /// BigInt. - /// This option is ignored if is specified. + /// This option is ignored if is specified. /// - MarshalUnsafeLongAsBigInt = 0x00000040, + MarshalUnsafeInt64AsBigInt = 0x00000040, /// - /// Specifies that all long integers are to be marshaled as + /// Equivalent to . + /// + [Obsolete("This option has been renamed to MarshalUnsafeInt64AsBigInt.")] + MarshalUnsafeLongAsBigInt = MarshalUnsafeInt64AsBigInt, + + /// + /// Specifies that all 64-bit integers are to be marshaled as /// BigInt. /// - MarshalAllLongAsBigInt = 0x00000080, + MarshalAllInt64AsBigInt = 0x00000080, + + /// + /// Equivalent to . + /// + [Obsolete("This option has been renamed to MarshalAllInt64AsBigInt.")] + MarshalAllLongAsBigInt = MarshalAllInt64AsBigInt, /// /// Specifies that the script engine is to perform automatic conversion between @@ -146,6 +158,22 @@ public enum V8ScriptEngineFlags /// hint and may be ignored on some systems. On platforms that support it, this option can /// degrade overall system performance or power efficiency, so caution is recommended. /// - SetTimerResolution = 0x00008000 + SetTimerResolution = 0x00008000, + + /// + /// Specifies that the script engine is to perform automatic conversion between .NET and + /// JavaScript arrays. This conversion is bidirectional and lossy. A .NET array constructed + /// from a JavaScript array always has an element type of , + /// making it impossible for script code to specify a strongly typed array as a .NET method + /// argument or property value. Excessive copying of array contents can also impact + /// application performance and/or memory consumption. Caution is recommended. + /// + EnableArrayConversion = 0x00010000 + } + + internal static class V8ScriptEngineFlagsHelpers + { + public static bool HasAllFlags(this V8ScriptEngineFlags value, V8ScriptEngineFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this V8ScriptEngineFlags value, V8ScriptEngineFlags flags) => (value & flags) != 0; } } diff --git a/ClearScript/V8/V8ScriptItem.cs b/ClearScript/V8/V8ScriptItem.cs index 49eeba8bb..7d002556d 100644 --- a/ClearScript/V8/V8ScriptItem.cs +++ b/ClearScript/V8/V8ScriptItem.cs @@ -18,7 +18,7 @@ internal abstract class V8ScriptItem : ScriptItem, IJavaScriptObject private readonly V8ScriptEngine engine; private readonly IV8Object target; private V8ScriptItem holder; - private readonly InterlockedOneWayFlag disposedFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag disposedFlag = new(); private V8ScriptItem(V8ScriptEngine engine, IV8Object target) { @@ -28,9 +28,9 @@ private V8ScriptItem(V8ScriptEngine engine, IV8Object target) public static object Wrap(V8ScriptEngine engine, object obj) { - Debug.Assert(!(obj is IScriptMarshalWrapper)); + Debug.Assert(obj is not IScriptMarshalWrapper); - if (obj == null) + if (obj is null) { return null; } @@ -98,11 +98,24 @@ public static object Wrap(V8ScriptEngine engine, object obj) public bool IsShared => target.IsShared; + public object GetProperty(bool marshalValue, int index) + { + VerifyNotDisposed(); + var value = engine.ScriptInvoke(static ctx => ctx.target.GetProperty(ctx.index), (target, index)); + return marshalValue ? engine.MarshalToHost(value, false) : value; + } + + public void SetProperty(bool marshalValue, int index, object value) + { + VerifyNotDisposed(); + engine.ScriptInvoke(static ctx => ctx.self.target.SetProperty(ctx.index, ctx.marshalValue ? ctx.self.engine.MarshalToScript(ctx.value) : ctx.value), (self: this, marshalValue, index, value)); + } + public object InvokeMethod(bool marshalResult, string name, params object[] args) { VerifyNotDisposed(); - var result = engine.ScriptInvoke(() => target.InvokeMethod(name, engine.MarshalToScript(args))); + var result = engine.ScriptInvoke(static ctx => ctx.self.target.InvokeMethod(ctx.name, ctx.self.engine.MarshalToScript(ctx.args)), (self: this, name, args)); if (marshalResult) { return engine.MarshalToHost(result, false); @@ -133,7 +146,7 @@ protected override bool TryBindAndInvoke(DynamicMetaObjectBinder binder, object[ return true; } - if ((binder is SetMemberBinder setMemberBinder) && (args != null) && (args.Length > 0)) + if ((binder is SetMemberBinder setMemberBinder) && (args is not null) && (args.Length > 0)) { target.SetProperty(setMemberBinder.Name, args[0]); result = args[0]; @@ -142,7 +155,7 @@ protected override bool TryBindAndInvoke(DynamicMetaObjectBinder binder, object[ if (binder is GetIndexBinder) { - if ((args != null) && (args.Length == 1)) + if ((args is not null) && (args.Length == 1)) { result = MiscHelpers.TryGetNumericIndex(args[0], out int index) ? target.GetProperty(index) : target.GetProperty(args[0].ToString()); return true; @@ -153,7 +166,7 @@ protected override bool TryBindAndInvoke(DynamicMetaObjectBinder binder, object[ if (binder is SetIndexBinder) { - if ((args != null) && (args.Length == 2)) + if ((args is not null) && (args.Length == 2)) { if (MiscHelpers.TryGetNumericIndex(args[0], out int index)) { @@ -185,7 +198,7 @@ protected override bool TryBindAndInvoke(DynamicMetaObjectBinder binder, object[ } catch (Exception exception) { - if (engine.CurrentScriptFrame != null) + if (engine.CurrentScriptFrame is not null) { if (exception is IScriptEngineException scriptError) { @@ -210,13 +223,13 @@ protected override bool TryBindAndInvoke(DynamicMetaObjectBinder binder, object[ public override string[] GetPropertyNames() { VerifyNotDisposed(); - return engine.ScriptInvoke(() => target.GetPropertyNames(false /*includeIndices*/)); + return engine.ScriptInvoke(static target => target.GetPropertyNames(false), target); } public override int[] GetPropertyIndices() { VerifyNotDisposed(); - return engine.ScriptInvoke(() => target.GetPropertyIndices()); + return engine.ScriptInvoke(static target => target.GetPropertyIndices(), target); } #endregion @@ -226,12 +239,12 @@ public override int[] GetPropertyIndices() public override object GetProperty(string name, params object[] args) { VerifyNotDisposed(); - if ((args != null) && (args.Length != 0)) + if ((args is not null) && (args.Length != 0)) { throw new InvalidOperationException("Invalid argument or index count"); } - var result = engine.MarshalToHost(engine.ScriptInvoke(() => target.GetProperty(name)), false); + var result = engine.MarshalToHost(engine.ScriptInvoke(static ctx => ctx.target.GetProperty(ctx.name), (target, name)), false); if ((result is V8ScriptItem resultScriptItem) && (resultScriptItem.engine == engine)) { @@ -244,45 +257,43 @@ public override object GetProperty(string name, params object[] args) public override void SetProperty(string name, params object[] args) { VerifyNotDisposed(); - if ((args == null) || (args.Length != 1)) + if ((args is null) || (args.Length != 1)) { throw new InvalidOperationException("Invalid argument or index count"); } - engine.ScriptInvoke(() => target.SetProperty(name, engine.MarshalToScript(args[0]))); + engine.ScriptInvoke(static ctx => ctx.self.target.SetProperty(ctx.name, ctx.self.engine.MarshalToScript(ctx.value)), (self: this, name, value: args[0])); } public override bool DeleteProperty(string name) { VerifyNotDisposed(); - return engine.ScriptInvoke(() => target.DeleteProperty(name)); + return engine.ScriptInvoke(static ctx => ctx.target.DeleteProperty(ctx.name), (target, name)); } public override object GetProperty(int index) { - VerifyNotDisposed(); - return engine.MarshalToHost(engine.ScriptInvoke(() => target.GetProperty(index)), false); + return GetProperty(true, index); } public override void SetProperty(int index, object value) { - VerifyNotDisposed(); - engine.ScriptInvoke(() => target.SetProperty(index, engine.MarshalToScript(value))); + SetProperty(true, index, value); } public override bool DeleteProperty(int index) { VerifyNotDisposed(); - return engine.ScriptInvoke(() => target.DeleteProperty(index)); + return engine.ScriptInvoke(static ctx => ctx.target.DeleteProperty(ctx.index), (target, index)); } public override object Invoke(bool asConstructor, params object[] args) { VerifyNotDisposed(); - if (asConstructor || (holder == null)) + if (asConstructor || (holder is null)) { - return engine.MarshalToHost(engine.ScriptInvoke(() => target.Invoke(asConstructor, engine.MarshalToScript(args))), false); + return engine.MarshalToHost(engine.ScriptInvoke(static ctx => ctx.self.target.Invoke(ctx.asConstructor, ctx.self.engine.MarshalToScript(ctx.args)), (self: this, asConstructor, args)), false); } var engineInternal = (ScriptObject)engine.Global.GetProperty("EngineInternal"); @@ -348,10 +359,20 @@ private bool TryGetProperty(string name, out object value) { VerifyNotDisposed(); - object tempResult = null; - if (engine.ScriptInvoke(() => target.TryGetProperty(name, out tempResult))) + var ctx = (target, name, value: (object)null); + + var found = engine.ScriptInvoke( + static pCtx => + { + ref var ctx = ref pCtx.AsRef(); + return ctx.target.TryGetProperty(ctx.name, out ctx.value); + }, + StructPtr.FromRef(ref ctx) + ); + + if (found) { - var result = engine.MarshalToHost(tempResult, false); + var result = engine.MarshalToHost(ctx.value, false); if ((result is V8ScriptItem resultScriptItem) && (resultScriptItem.engine == engine)) { resultScriptItem.holder = this; @@ -376,16 +397,18 @@ private bool TryGetProperty(string name, out object value) private string[] GetPropertyKeys() { VerifyNotDisposed(); - return engine.ScriptInvoke(() => target.GetPropertyNames(true /*includeIndices*/)); + return engine.ScriptInvoke(static target => target.GetPropertyNames(true), target); } IEnumerator> IEnumerable>.GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return KeyValuePairs.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return ThisDictionary.GetEnumerator(); } @@ -531,6 +554,7 @@ int IList.IndexOf(object item) IEnumerator IEnumerable.GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return ThisGenericList.GetEnumerator(); } @@ -672,61 +696,201 @@ protected V8ArrayBufferOrView(V8ScriptEngine engine, IV8Object target) protected byte[] GetBytes() { var size = Size; - var result = new byte[size]; - InvokeWithDirectAccess(pData => UnmanagedMemoryHelpers.Copy(pData, size, result, 0)); - return result; + return InvokeWithDirectAccess( + static (pData, size) => + { + var result = new byte[size]; + UnmanagedMemoryHelpers.Copy(pData, size, result, 0); + return result; + }, + size + ); } protected ulong ReadBytes(ulong offset, ulong count, byte[] destination, ulong destinationIndex) { var size = Size; - if (offset >= size) + if (size < 1) + { + if (offset > 0) + { + throw new ArgumentOutOfRangeException(nameof(offset)); + } + + if (count > 0) + { + throw new ArgumentOutOfRangeException(nameof(count)); + } + } + else if (offset >= size) + { + throw new ArgumentOutOfRangeException(nameof(offset)); + } + + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(GetPtrWithOffset(pData, ctx.offset), Math.Min(ctx.count, ctx.size - ctx.offset), ctx.destination, ctx.destinationIndex), + (offset, count, destination, destinationIndex, size) + ); + } + + protected unsafe ulong ReadBytes(ulong offset, ulong count, Span destination, ulong destinationIndex) + { + var size = Size; + if (size < 1) + { + if (offset > 0) + { + throw new ArgumentOutOfRangeException(nameof(offset)); + } + + if (count > 0) + { + throw new ArgumentOutOfRangeException(nameof(count)); + } + } + else if (offset >= size) { throw new ArgumentOutOfRangeException(nameof(offset)); } - return InvokeWithDirectAccess(pData => UnmanagedMemoryHelpers.Copy(GetPtrWithOffset(pData, offset), Math.Min(count, size - offset), destination, destinationIndex)); + fixed (void* pDestination = destination) + { + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(GetPtrWithOffset(pData, ctx.offset), Math.Min(ctx.count, ctx.size - ctx.offset), new Span(ctx.pDestination.ToPointer(), ctx.destinationLength), ctx.destinationIndex), + (offset, count, pDestination: (IntPtr)pDestination, destinationLength: destination.Length, destinationIndex, size) + ); + } } protected ulong WriteBytes(byte[] source, ulong sourceIndex, ulong count, ulong offset) { var size = Size; - if (offset >= size) + if (size < 1) + { + if (offset > 0) + { + throw new ArgumentOutOfRangeException(nameof(offset)); + } + + if (count > 0) + { + throw new ArgumentOutOfRangeException(nameof(count)); + } + } + else if (offset >= size) + { + throw new ArgumentOutOfRangeException(nameof(offset)); + } + + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(ctx.source, ctx.sourceIndex, Math.Min(ctx.count, ctx.size - ctx.offset), GetPtrWithOffset(pData, ctx.offset)), + (source, sourceIndex, count, offset, size) + ); + } + + protected unsafe ulong WriteBytes(in ReadOnlySpan source, ulong sourceIndex, ulong count, ulong offset) + { + var size = Size; + if (size < 1) + { + if (offset > 0) + { + throw new ArgumentOutOfRangeException(nameof(offset)); + } + + if (count > 0) + { + throw new ArgumentOutOfRangeException(nameof(count)); + } + } + else if (offset >= size) { throw new ArgumentOutOfRangeException(nameof(offset)); } - return InvokeWithDirectAccess(pData => UnmanagedMemoryHelpers.Copy(source, sourceIndex, Math.Min(count, size - offset), GetPtrWithOffset(pData, offset))); + fixed (void* pSource = source) + { + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(new ReadOnlySpan(ctx.pSource.ToPointer(), ctx.sourceLength), ctx.sourceIndex, Math.Min(ctx.count, ctx.size - ctx.offset), GetPtrWithOffset(pData, ctx.offset)), + (pSource: (IntPtr)pSource, sourceLength: source.Length, sourceIndex, count, offset, size) + ); + } } protected void InvokeWithDirectAccess(Action action) { - engine.ScriptInvoke(() => target.InvokeWithArrayBufferOrViewData(action)); + engine.ScriptInvoke(static ctx => ctx.target.InvokeWithArrayBufferOrViewData(ctx.action), (target, action)); } - protected T InvokeWithDirectAccess(Func func) + protected TResult InvokeWithDirectAccess(Func func) { - return engine.ScriptInvoke(() => - { - var result = default(T); - target.InvokeWithArrayBufferOrViewData(pData => result = func(pData)); - return result; - }); + var ctx = (self: this, func, result: default(TResult)); + + return engine.ScriptInvoke( + static pCtx => + { + ref var ctx = ref pCtx.AsRef(); + + ctx.self.target.InvokeWithArrayBufferOrViewData( + static (pData, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + ctx.result = ctx.func(pData); + }, + pCtx + ); + + return ctx.result; + }, + StructPtr.FromRef(ref ctx) + ); + } + + protected void InvokeWithDirectAccess(Action action, in TArg arg) + { + engine.ScriptInvoke(static ctx => ctx.target.InvokeWithArrayBufferOrViewData(ctx.action, ctx.arg), (target, action, arg)); + } + + protected TResult InvokeWithDirectAccess(Func func, in TArg arg) + { + var ctx = (self: this, func, arg, result: default(TResult)); + + return engine.ScriptInvoke( + static pCtx => + { + ref var ctx = ref pCtx.AsRef(); + + ctx.self.target.InvokeWithArrayBufferOrViewData( + static (pData, pCtx) => + { + ref var ctx = ref pCtx.AsRef(); + ctx.result = ctx.func(pData, ctx.arg); + }, + pCtx + ); + + return ctx.result; + }, + StructPtr.FromRef(ref ctx) + ); } private V8ArrayBufferOrViewInfo GetInfo() { VerifyNotDisposed(); - if (info == null) + if (info is null) { - engine.ScriptInvoke(() => - { - if (info == null) + engine.ScriptInvoke( + static ctx => { - info = target.GetArrayBufferOrViewInfo(); - } - }); + if (ctx.self.info is null) + { + ctx.self.info = ctx.target.GetArrayBufferOrViewInfo(); + } + }, + (self: this, target) + ); } return info; @@ -739,8 +903,13 @@ private IArrayBuffer GetArrayBuffer() private static IntPtr GetPtrWithOffset(IntPtr pData, ulong offset) { + if (offset < 1) + { + return pData; + } + var baseAddr = unchecked((ulong)pData.ToInt64()); - return new IntPtr(unchecked((long)checked(baseAddr + offset))); + return (IntPtr)unchecked((long)checked(baseAddr + offset)); } } @@ -769,23 +938,45 @@ ulong IArrayBuffer.ReadBytes(ulong offset, ulong count, byte[] destination, ulon return ReadBytes(offset, count, destination, destinationIndex); } + ulong IArrayBuffer.ReadBytes(ulong offset, ulong count, Span destination, ulong destinationIndex) + { + return ReadBytes(offset, count, destination, destinationIndex); + } + ulong IArrayBuffer.WriteBytes(byte[] source, ulong sourceIndex, ulong count, ulong offset) { return WriteBytes(source, sourceIndex, count, offset); } + ulong IArrayBuffer.WriteBytes(ReadOnlySpan source, ulong sourceIndex, ulong count, ulong offset) + { + return WriteBytes(source, sourceIndex, count, offset); + } + void IArrayBuffer.InvokeWithDirectAccess(Action action) { MiscHelpers.VerifyNonNullArgument(action, nameof(action)); InvokeWithDirectAccess(action); } - T IArrayBuffer.InvokeWithDirectAccess(Func func) + TResult IArrayBuffer.InvokeWithDirectAccess(Func func) { MiscHelpers.VerifyNonNullArgument(func, nameof(func)); return InvokeWithDirectAccess(func); } + void IArrayBuffer.InvokeWithDirectAccess(Action action, in TArg arg) + { + MiscHelpers.VerifyNonNullArgument(action, nameof(action)); + InvokeWithDirectAccess(action, arg); + } + + TResult IArrayBuffer.InvokeWithDirectAccess(Func func, in TArg arg) + { + MiscHelpers.VerifyNonNullArgument(func, nameof(func)); + return InvokeWithDirectAccess(func, arg); + } + #endregion } @@ -818,23 +1009,45 @@ ulong IArrayBufferView.ReadBytes(ulong offset, ulong count, byte[] destination, return ReadBytes(offset, count, destination, destinationIndex); } + ulong IArrayBufferView.ReadBytes(ulong offset, ulong count, Span destination, ulong destinationIndex) + { + return ReadBytes(offset, count, destination, destinationIndex); + } + ulong IArrayBufferView.WriteBytes(byte[] source, ulong sourceIndex, ulong count, ulong offset) { return WriteBytes(source, sourceIndex, count, offset); } + ulong IArrayBufferView.WriteBytes(ReadOnlySpan source, ulong sourceIndex, ulong count, ulong offset) + { + return WriteBytes(source, sourceIndex, count, offset); + } + void IArrayBufferView.InvokeWithDirectAccess(Action action) { MiscHelpers.VerifyNonNullArgument(action, nameof(action)); InvokeWithDirectAccess(action); } - T IArrayBufferView.InvokeWithDirectAccess(Func func) + TResult IArrayBufferView.InvokeWithDirectAccess(Func func) { MiscHelpers.VerifyNonNullArgument(func, nameof(func)); return InvokeWithDirectAccess(func); } + void IArrayBufferView.InvokeWithDirectAccess(Action action, in TArg arg) + { + MiscHelpers.VerifyNonNullArgument(action, nameof(action)); + InvokeWithDirectAccess(action, arg); + } + + TResult IArrayBufferView.InvokeWithDirectAccess(Func func, in TArg arg) + { + MiscHelpers.VerifyNonNullArgument(func, nameof(func)); + return InvokeWithDirectAccess(func, arg); + } + #endregion } @@ -863,8 +1076,13 @@ protected V8TypedArray(V8ScriptEngine engine, IV8Object target) protected IntPtr GetPtrWithIndex(IntPtr pData, ulong index) { + if (index < 1) + { + return pData; + } + var baseAddr = unchecked((ulong)pData.ToInt64()); - return new IntPtr(unchecked((long)checked(baseAddr + (index * (Size / Length))))); + return (IntPtr)unchecked((long)checked(baseAddr + (index * (Size / Length)))); } #region ITypedArray implementation @@ -878,7 +1096,7 @@ protected IntPtr GetPtrWithIndex(IntPtr pData, ulong index) #region Nested type: V8TypedArray - private class V8TypedArray : V8TypedArray, ITypedArray + private class V8TypedArray : V8TypedArray, ITypedArray where T : unmanaged { public V8TypedArray(V8ScriptEngine engine, IV8Object target) : base(engine, target) @@ -890,31 +1108,125 @@ public V8TypedArray(V8ScriptEngine engine, IV8Object target) T[] ITypedArray.ToArray() { var length = Length; - var result = new T[length]; - InvokeWithDirectAccess(pData => UnmanagedMemoryHelpers.Copy(pData, length, result, 0)); - return result; + return InvokeWithDirectAccess( + static (pData, length) => + { + var result = new T[length]; + UnmanagedMemoryHelpers.Copy(pData, length, result, 0); + return result; + }, + length + ); } ulong ITypedArray.Read(ulong index, ulong length, T[] destination, ulong destinationIndex) { var totalLength = Length; - if (index >= totalLength) + if (totalLength < 1) + { + if (index > 0) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (index >= totalLength) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(ctx.self.GetPtrWithIndex(pData, ctx.index), Math.Min(ctx.length, ctx.totalLength - ctx.index), ctx.destination, ctx.destinationIndex), + (self: this, index, length, destination, destinationIndex, totalLength) + ); + } + + unsafe ulong ITypedArray.Read(ulong index, ulong length, Span destination, ulong destinationIndex) + { + var totalLength = Length; + if (totalLength < 1) + { + if (index > 0) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (index >= totalLength) { throw new ArgumentOutOfRangeException(nameof(index)); } - return InvokeWithDirectAccess(pData => UnmanagedMemoryHelpers.Copy(GetPtrWithIndex(pData, index), Math.Min(length, totalLength - index), destination, destinationIndex)); + fixed (void* pDestination = destination) + { + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(ctx.self.GetPtrWithIndex(pData, ctx.index), Math.Min(ctx.length, ctx.totalLength - ctx.index), new Span(ctx.pDestination.ToPointer(), ctx.destinationLength), ctx.destinationIndex), + (self: this, index, length, pDestination: (IntPtr)pDestination, destinationLength: destination.Length, destinationIndex, totalLength) + ); + } } ulong ITypedArray.Write(T[] source, ulong sourceIndex, ulong length, ulong index) { var totalLength = Length; - if (index >= totalLength) + if (totalLength < 1) + { + if (index > 0) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (index >= totalLength) { throw new ArgumentOutOfRangeException(nameof(index)); } - return InvokeWithDirectAccess(pData => UnmanagedMemoryHelpers.Copy(source, sourceIndex, Math.Min(length, totalLength - index), GetPtrWithIndex(pData, index))); + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(ctx.source, ctx.sourceIndex, Math.Min(ctx.length, ctx.totalLength - ctx.index), ctx.self.GetPtrWithIndex(pData, ctx.index)), + (self: this, source, sourceIndex, length, index, totalLength) + ); + } + + unsafe ulong ITypedArray.Write(ReadOnlySpan source, ulong sourceIndex, ulong length, ulong index) + { + var totalLength = Length; + if (totalLength < 1) + { + if (index > 0) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (index >= totalLength) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + fixed (void* pSource = source) + { + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(new ReadOnlySpan(ctx.pSource.ToPointer(), ctx.sourceLength), ctx.sourceIndex, Math.Min(ctx.length, ctx.totalLength - ctx.index), ctx.self.GetPtrWithIndex(pData, ctx.index)), + (self: this, pSource: (IntPtr)pSource, sourceLength: source.Length, sourceIndex, length, index, totalLength) + ); + } } #endregion @@ -938,31 +1250,125 @@ public V8UInt16Array(V8ScriptEngine engine, IV8Object target) char[] ITypedArray.ToArray() { var length = Length; - var result = new char[length]; - InvokeWithDirectAccess(pData => UnmanagedMemoryHelpers.Copy(pData, length, result, 0)); - return result; + return InvokeWithDirectAccess( + static (pData, length) => + { + var result = new char[length]; + UnmanagedMemoryHelpers.Copy(pData, length, result, 0); + return result; + }, + length + ); } ulong ITypedArray.Read(ulong index, ulong length, char[] destination, ulong destinationIndex) { var totalLength = Length; - if (index >= totalLength) + if (totalLength < 1) + { + if (index > 0) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (index >= totalLength) { throw new ArgumentOutOfRangeException(nameof(index)); } - return InvokeWithDirectAccess(pData => UnmanagedMemoryHelpers.Copy(GetPtrWithIndex(pData, index), Math.Min(length, totalLength - index), destination, destinationIndex)); + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(ctx.self.GetPtrWithIndex(pData, ctx.index), Math.Min(ctx.length, ctx.totalLength - ctx.index), ctx.destination, ctx.destinationIndex), + (self: this, index, length, destination, destinationIndex, totalLength) + ); + } + + unsafe ulong ITypedArray.Read(ulong index, ulong length, Span destination, ulong destinationIndex) + { + var totalLength = Length; + if (totalLength < 1) + { + if (index > 0) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (index >= totalLength) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + fixed (void* pDestination = destination) + { + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(ctx.self.GetPtrWithIndex(pData, ctx.index), Math.Min(ctx.length, ctx.totalLength - ctx.index), new Span(ctx.pDestination.ToPointer(), ctx.destinationLength), ctx.destinationIndex), + (self: this, index, length, pDestination: (IntPtr)pDestination, destinationLength: destination.Length, destinationIndex, totalLength) + ); + } } ulong ITypedArray.Write(char[] source, ulong sourceIndex, ulong length, ulong index) { var totalLength = Length; - if (index >= totalLength) + if (totalLength < 1) + { + if (index > 0) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (index >= totalLength) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(ctx.source, ctx.sourceIndex, Math.Min(ctx.length, ctx.totalLength - ctx.index), ctx.self.GetPtrWithIndex(pData, ctx.index)), + (self: this, source, sourceIndex, length, index, totalLength) + ); + } + + unsafe ulong ITypedArray.Write(ReadOnlySpan source, ulong sourceIndex, ulong length, ulong index) + { + var totalLength = Length; + if (totalLength < 1) + { + if (index > 0) + { + throw new ArgumentOutOfRangeException(nameof(index)); + } + + if (length > 0) + { + throw new ArgumentOutOfRangeException(nameof(length)); + } + } + else if (index >= totalLength) { throw new ArgumentOutOfRangeException(nameof(index)); } - return InvokeWithDirectAccess(pData => UnmanagedMemoryHelpers.Copy(source, sourceIndex, Math.Min(length, totalLength - index), GetPtrWithIndex(pData, index))); + fixed (void* pSource = source) + { + return InvokeWithDirectAccess( + static (pData, ctx) => UnmanagedMemoryHelpers.Copy(new ReadOnlySpan(ctx.pSource.ToPointer(), ctx.sourceLength), ctx.sourceIndex, Math.Min(ctx.length, ctx.totalLength - ctx.index), ctx.self.GetPtrWithIndex(pData, ctx.index)), + (self: this, pSource: (IntPtr)pSource, sourceLength: source.Length, sourceIndex, length, index, totalLength) + ); + } } #endregion diff --git a/ClearScript/VoidResult.cs b/ClearScript/VoidResult.cs index 9a159d151..7749a285e 100644 --- a/ClearScript/VoidResult.cs +++ b/ClearScript/VoidResult.cs @@ -20,7 +20,7 @@ public class VoidResult /// /// The sole instance of the class. /// - public static readonly VoidResult Value = new VoidResult(); + public static readonly VoidResult Value = new(); private VoidResult() { diff --git a/ClearScript/Windows/Core/ActiveXDebugging.cs b/ClearScript/Windows/Core/ActiveXDebugging.cs index c9e58abc4..8df00c14e 100644 --- a/ClearScript/Windows/Core/ActiveXDebugging.cs +++ b/ClearScript/Windows/Core/ActiveXDebugging.cs @@ -95,7 +95,7 @@ internal enum BreakpointState #region structures [StructLayout(LayoutKind.Sequential)] - internal struct DebugStackFrameDescriptor + internal ref struct DebugStackFrameDescriptor { [MarshalAs(UnmanagedType.Interface)] public IDebugStackFrame Frame; @@ -110,7 +110,7 @@ internal struct DebugStackFrameDescriptor } [StructLayout(LayoutKind.Sequential)] - internal struct DebugStackFrameDescriptor64 + internal ref struct DebugStackFrameDescriptor64 { [MarshalAs(UnmanagedType.Interface)] public IDebugStackFrame Frame; diff --git a/ClearScript/Windows/Core/ActiveXScripting.cs b/ClearScript/Windows/Core/ActiveXScripting.cs index d3f88f3fb..78fe6e10d 100644 --- a/ClearScript/Windows/Core/ActiveXScripting.cs +++ b/ClearScript/Windows/Core/ActiveXScripting.cs @@ -21,6 +21,12 @@ internal enum ScriptInfoFlags : uint // ReSharper restore InconsistentNaming } + internal static class ScriptInfoFlagsHelpers + { + public static bool HasAllFlags(this ScriptInfoFlags value, ScriptInfoFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this ScriptInfoFlags value, ScriptInfoFlags flags) => (value & flags) != 0; + } + [Flags] internal enum ScriptInterruptFlags : uint { diff --git a/ClearScript/Windows/Core/ActiveXWrappers.cs b/ClearScript/Windows/Core/ActiveXWrappers.cs index f58b0f5ed..7835bb9e8 100644 --- a/ClearScript/Windows/Core/ActiveXWrappers.cs +++ b/ClearScript/Windows/Core/ActiveXWrappers.cs @@ -127,7 +127,7 @@ public ActiveScriptWrapper32(string progID, WindowsScriptEngineFlags flags) activeScriptGarbageCollector = activeScript as IActiveScriptGarbageCollector; debugStackFrameSniffer = activeScript as IDebugStackFrameSnifferEx32; - if (flags.HasFlag(WindowsScriptEngineFlags.EnableStandardsMode)) + if (flags.HasAllFlags(WindowsScriptEngineFlags.EnableStandardsMode)) { if (activeScript is IActiveScriptProperty activeScriptProperty) { @@ -139,7 +139,7 @@ public ActiveScriptWrapper32(string progID, WindowsScriptEngineFlags flags) } } - if (!flags.HasFlag(WindowsScriptEngineFlags.DoNotEnableVTablePatching) && MiscHelpers.ProcessorArchitectureIsIntel()) + if (!flags.HasAllFlags(WindowsScriptEngineFlags.DoNotEnableVTablePatching) && MiscHelpers.ProcessorArchitectureIsIntel()) { HostItem.EnableVTablePatching = true; } @@ -197,7 +197,7 @@ public override void EnumCodeContextsOfPosition(UIntPtr sourceContext, uint offs public override void EnumStackFrames(out IEnumDebugStackFrames enumFrames) { - if (debugStackFrameSniffer != null) + if (debugStackFrameSniffer is not null) { debugStackFrameSniffer.EnumStackFrames(out enumFrames); } @@ -280,7 +280,7 @@ public ActiveScriptWrapper64(string progID, WindowsScriptEngineFlags flags) activeScriptGarbageCollector = activeScript as IActiveScriptGarbageCollector; debugStackFrameSniffer = activeScript as IDebugStackFrameSnifferEx64; - if (flags.HasFlag(WindowsScriptEngineFlags.EnableStandardsMode)) + if (flags.HasAllFlags(WindowsScriptEngineFlags.EnableStandardsMode)) { if (activeScript is IActiveScriptProperty activeScriptProperty) { @@ -292,7 +292,7 @@ public ActiveScriptWrapper64(string progID, WindowsScriptEngineFlags flags) } } - if (!flags.HasFlag(WindowsScriptEngineFlags.DoNotEnableVTablePatching) && MiscHelpers.ProcessorArchitectureIsIntel()) + if (!flags.HasAllFlags(WindowsScriptEngineFlags.DoNotEnableVTablePatching) && MiscHelpers.ProcessorArchitectureIsIntel()) { HostItem.EnableVTablePatching = true; } @@ -350,7 +350,7 @@ public override void EnumCodeContextsOfPosition(UIntPtr sourceContext, uint offs public override void EnumStackFrames(out IEnumDebugStackFrames enumFrames) { - if (debugStackFrameSniffer != null) + if (debugStackFrameSniffer is not null) { debugStackFrameSniffer.EnumStackFrames(out enumFrames); } diff --git a/ClearScript/Windows/Core/JScriptEngine.NetStandard.cs b/ClearScript/Windows/Core/JScriptEngine.NetStandard.cs deleted file mode 100644 index 763d6c443..000000000 --- a/ClearScript/Windows/Core/JScriptEngine.NetStandard.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Threading.Tasks; -using Microsoft.ClearScript.JavaScript; - -namespace Microsoft.ClearScript.Windows.Core -{ - public partial class JScriptEngine - { - #region IJavaScriptEngine implementation - - object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) - { - throw new NotImplementedException(); - } - - object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) - { - throw new NotImplementedException(); - } - - #endregion - } -} diff --git a/ClearScript/Windows/Core/JScriptEngine.cs b/ClearScript/Windows/Core/JScriptEngine.cs index 05c623eeb..c1c448157 100644 --- a/ClearScript/Windows/Core/JScriptEngine.cs +++ b/ClearScript/Windows/Core/JScriptEngine.cs @@ -26,7 +26,7 @@ public partial class JScriptEngine : WindowsScriptEngine, IJavaScriptEngine, IJS { #region data - internal static readonly Dictionary StaticRuntimeErrorMap = new Dictionary + internal static readonly Dictionary StaticRuntimeErrorMap = new() { // https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/scripting-articles/1dk3k160(v=vs.84) { 5029, "Array length must be a finite positive integer" }, @@ -62,7 +62,7 @@ public partial class JScriptEngine : WindowsScriptEngine, IJavaScriptEngine, IJS { 5013, "VBArray expected" } }; - internal static readonly Dictionary StaticSyntaxErrorMap = new Dictionary + internal static readonly Dictionary StaticSyntaxErrorMap = new() { // https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/scripting-articles/6bby3x2e(v=vs.84) { 1019, "Can't have 'break' outside of loop" }, @@ -224,7 +224,7 @@ internal override object Execute(UniqueDocumentInfo documentInfo, string code, b if (documentInfo.Category == ModuleCategory.CommonJS) { var module = CommonJSManager.GetOrCreateModule(documentInfo, code); - return ScriptInvoke(() => module.Process()); + return ScriptInvoke(static module => module.Process(), module); } if (documentInfo.Category != DocumentCategory.Script) @@ -255,6 +255,16 @@ object IJavaScriptEngine.CreatePromiseForTask(Task task) throw new NotImplementedException(); } + object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) + { + throw new NotImplementedException(); + } + + object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) + { + throw new NotImplementedException(); + } + Task IJavaScriptEngine.CreateTaskForPromise(ScriptObject promise) { throw new NotImplementedException(); diff --git a/ClearScript/Windows/Core/VBScriptEngine.cs b/ClearScript/Windows/Core/VBScriptEngine.cs index 8df8c9c22..abaa2bd8d 100644 --- a/ClearScript/Windows/Core/VBScriptEngine.cs +++ b/ClearScript/Windows/Core/VBScriptEngine.cs @@ -18,7 +18,7 @@ public class VBScriptEngine : WindowsScriptEngine, IVBScriptEngineTag { #region data - internal static readonly Dictionary StaticRuntimeErrorMap = new Dictionary + internal static readonly Dictionary StaticRuntimeErrorMap = new() { // https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/scripting-articles/xe43cc8d(v=vs.84) { 429, "ActiveX component can't create object" }, @@ -66,7 +66,7 @@ public class VBScriptEngine : WindowsScriptEngine, IVBScriptEngineTag { 450, "Wrong number of arguments or invalid property assignment" } }; - internal static readonly Dictionary StaticSyntaxErrorMap = new Dictionary + internal static readonly Dictionary StaticSyntaxErrorMap = new() { // https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/scripting-articles/2z84dwk8(v=vs.84) { 1052, "Cannot have multiple default property/method in a Class" }, diff --git a/ClearScript/Windows/Core/WindowsScriptEngine.Debug.cs b/ClearScript/Windows/Core/WindowsScriptEngine.Debug.cs index 7652d33fb..5183264c2 100644 --- a/ClearScript/Windows/Core/WindowsScriptEngine.Debug.cs +++ b/ClearScript/Windows/Core/WindowsScriptEngine.Debug.cs @@ -60,7 +60,7 @@ private string GetFileName() private string GetUrl() { - if (documentInfo.Uri != null) + if (documentInfo.Uri is not null) { return documentInfo.Uri.IsAbsoluteUri ? documentInfo.Uri.AbsoluteUri : documentInfo.Uri.ToString(); } @@ -70,7 +70,7 @@ private string GetUrl() private bool TryGetSourceMapUrl(out string sourceMapUrl) { - if (documentInfo.SourceMapUri != null) + if (documentInfo.SourceMapUri is not null) { sourceMapUrl = documentInfo.SourceMapUri.IsAbsoluteUri ? documentInfo.SourceMapUri.AbsoluteUri : documentInfo.SourceMapUri.ToString(); return true; diff --git a/ClearScript/Windows/Core/WindowsScriptEngine.Site.cs b/ClearScript/Windows/Core/WindowsScriptEngine.Site.cs index 35a8f0784..11ba4bc2b 100644 --- a/ClearScript/Windows/Core/WindowsScriptEngine.Site.cs +++ b/ClearScript/Windows/Core/WindowsScriptEngine.Site.cs @@ -27,7 +27,7 @@ public ScriptSite(WindowsScriptEngine engine) private string GetDetails(object error, string message) { - if (engine.processDebugManager != null) + if (engine.processDebugManager is not null) { try { @@ -134,12 +134,12 @@ public void GetItemInfo(string name, ScriptInfoFlags mask, ref IntPtr pUnkItem, { var item = engine.hostItemMap[name]; - if (mask.HasFlag(ScriptInfoFlags.IUnknown)) + if (mask.HasAllFlags(ScriptInfoFlags.IUnknown)) { pUnkItem = Marshal.GetIUnknownForObject(item); } - if (mask.HasFlag(ScriptInfoFlags.ITypeInfo)) + if (mask.HasAllFlags(ScriptInfoFlags.ITypeInfo)) { pTypeInfo = item.GetType().GetTypeInfo(); } @@ -160,7 +160,7 @@ public void OnStateChange(ScriptState state) public void OnScriptError(IActiveScriptError error) { - if ((engine.CurrentScriptFrame != null) && (error != null)) + if ((engine.CurrentScriptFrame is not null) && (error is not null)) { error.GetExceptionInfo(out var excepInfo); if (excepInfo.scode == HResult.E_ABORT) @@ -186,7 +186,7 @@ public void OnScriptError(IActiveScriptError error) else { innerException = engine.CurrentScriptFrame.HostException; - if ((innerException != null) && string.IsNullOrWhiteSpace(description)) + if ((innerException is not null) && string.IsNullOrWhiteSpace(description)) { description = innerException.GetBaseException().Message; } @@ -213,8 +213,8 @@ public void OnLeaveScript() public uint QueryContinue() { var callback = engine.ContinuationCallback; - var keepGoing = ((callback == null) || callback()); - if (engine.CurrentScriptFrame != null) + var keepGoing = ((callback is null) || callback()); + if (engine.CurrentScriptFrame is not null) { keepGoing = keepGoing && !engine.CurrentScriptFrame.InterruptRequested; } @@ -263,7 +263,7 @@ public void GetRootApplicationNode(out IDebugApplicationNode node) public void OnScriptErrorDebug(IActiveScriptErrorDebug errorDebug, out bool enterDebugger, out bool callOnScriptErrorWhenContinuing) { - if ((engine.CurrentScriptFrame != null) && (errorDebug != null)) + if ((engine.CurrentScriptFrame is not null) && (errorDebug is not null)) { errorDebug.GetExceptionInfo(out var excepInfo); if (excepInfo.scode == HResult.E_ABORT) @@ -283,7 +283,7 @@ public void OnScriptErrorDebug(IActiveScriptErrorDebug errorDebug, out bool ente else { innerException = engine.CurrentScriptFrame.HostException; - if ((innerException != null) && string.IsNullOrWhiteSpace(description)) + if ((innerException is not null) && string.IsNullOrWhiteSpace(description)) { description = innerException.GetBaseException().Message; } @@ -293,7 +293,7 @@ public void OnScriptErrorDebug(IActiveScriptErrorDebug errorDebug, out bool ente } } - enterDebugger = engine.engineFlags.HasFlag(WindowsScriptEngineFlags.EnableJITDebugging); + enterDebugger = engine.engineFlags.HasAllFlags(WindowsScriptEngineFlags.EnableJITDebugging); callOnScriptErrorWhenContinuing = true; } @@ -334,12 +334,12 @@ public CustomQueryInterfaceResult GetInterface(ref Guid iid, out IntPtr pInterfa if ((iid == typeof(IActiveScriptSiteDebug32).GUID) || (iid == typeof(IActiveScriptSiteDebug64).GUID) || (iid == typeof(IActiveScriptSiteDebugEx).GUID)) { - return (engine.processDebugManager != null) ? CustomQueryInterfaceResult.NotHandled : CustomQueryInterfaceResult.Failed; + return (engine.processDebugManager is not null) ? CustomQueryInterfaceResult.NotHandled : CustomQueryInterfaceResult.Failed; } if (iid == typeof(IActiveScriptSiteWindow).GUID) { - return (engine.HostWindow != null) ? CustomQueryInterfaceResult.NotHandled : CustomQueryInterfaceResult.Failed; + return (engine.HostWindow is not null) ? CustomQueryInterfaceResult.NotHandled : CustomQueryInterfaceResult.Failed; } return CustomQueryInterfaceResult.NotHandled; diff --git a/ClearScript/Windows/Core/WindowsScriptEngine.cs b/ClearScript/Windows/Core/WindowsScriptEngine.cs index 05215303f..85a5cf17c 100644 --- a/ClearScript/Windows/Core/WindowsScriptEngine.cs +++ b/ClearScript/Windows/Core/WindowsScriptEngine.cs @@ -29,7 +29,7 @@ public abstract partial class WindowsScriptEngine : ScriptEngine, IWindowsScript private ActiveScriptWrapper activeScript; private WindowsScriptEngineFlags engineFlags; - private readonly HostItemMap hostItemMap = new HostItemMap(); + private readonly HostItemMap hostItemMap = new(); private readonly WindowsScriptItem script; private ProcessDebugManagerWrapper processDebugManager; @@ -37,11 +37,11 @@ public abstract partial class WindowsScriptEngine : ScriptEngine, IWindowsScript private uint debugApplicationCookie; private bool sourceManagement; - private readonly DebugDocumentMap debugDocumentMap = new DebugDocumentMap(); + private readonly DebugDocumentMap debugDocumentMap = new(); private uint nextSourceContext = 1; private readonly ISyncInvoker syncInvoker; - private readonly InterlockedOneWayFlag disposedFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag disposedFlag = new(); #endregion @@ -65,33 +65,36 @@ protected WindowsScriptEngine(string progID, string name, string fileNameExtensi MiscHelpers.VerifyNonNullArgument(syncInvoker, nameof(syncInvoker)); this.syncInvoker = syncInvoker; - script = (WindowsScriptItem)base.ScriptInvoke(() => - { - activeScript = ActiveScriptWrapper.Create(progID, flags); - engineFlags = flags; - - if (flags.HasFlag(WindowsScriptEngineFlags.EnableDebugging) && ProcessDebugManagerWrapper.TryCreate(out processDebugManager)) + script = (WindowsScriptItem)base.ScriptInvoke( + static ctx => { - processDebugManager.CreateApplication(out debugApplication); - debugApplication.SetName(Name); + ctx.self.activeScript = ActiveScriptWrapper.Create(ctx.progID, ctx.flags); + ctx.self.engineFlags = ctx.flags; - if (processDebugManager.TryAddApplication(debugApplication, out debugApplicationCookie)) - { - sourceManagement = !flags.HasFlag(WindowsScriptEngineFlags.DisableSourceManagement); - } - else + if (ctx.flags.HasAllFlags(WindowsScriptEngineFlags.EnableDebugging) && ProcessDebugManagerWrapper.TryCreate(out ctx.self.processDebugManager)) { - debugApplication.Close(); - debugApplication = null; - processDebugManager = null; + ctx.self.processDebugManager.CreateApplication(out ctx.self.debugApplication); + ctx.self.debugApplication.SetName(ctx.self.Name); + + if (ctx.self.processDebugManager.TryAddApplication(ctx.self.debugApplication, out ctx.self.debugApplicationCookie)) + { + ctx.self.sourceManagement = !ctx.flags.HasAllFlags(WindowsScriptEngineFlags.DisableSourceManagement); + } + else + { + ctx.self.debugApplication.Close(); + ctx.self.debugApplication = null; + ctx.self.processDebugManager = null; + } } - } - activeScript.SetScriptSite(new ScriptSite(this)); - activeScript.InitNew(); - activeScript.SetScriptState(ScriptState.Started); - return WindowsScriptItem.Wrap(this, GetScriptDispatch()); - }); + ctx.self.activeScript.SetScriptSite(new ScriptSite(ctx.self)); + ctx.self.activeScript.InitNew(); + ctx.self.activeScript.SetScriptState(ScriptState.Started); + return WindowsScriptItem.Wrap(ctx.self, ctx.self.GetScriptDispatch()); + }, + (self: this, progID, flags) + ); } #endregion @@ -162,7 +165,7 @@ private void Parse(UniqueDocumentInfo documentInfo, string code, ScriptTextFlags } finally { - if (documentInfo.Flags.GetValueOrDefault().HasFlag(DocumentFlags.IsTransient) && (sourceContext != UIntPtr.Zero)) + if (documentInfo.Flags.GetValueOrDefault().HasAllFlags(DocumentFlags.IsTransient) && (sourceContext != UIntPtr.Zero)) { debugDocumentMap.Remove(sourceContext); debugDocument.Close(); @@ -190,7 +193,7 @@ private UIntPtr CreateDebugDocument(UniqueDocumentInfo documentInfo, string code private string GetStackTraceInternal() { - Debug.Assert(processDebugManager != null); + Debug.Assert(processDebugManager is not null); var stackTrace = string.Empty; activeScript.EnumStackFrames(out var enumFrames); @@ -209,7 +212,7 @@ private string GetStackTraceInternal() descriptor.Frame.GetCodeContext(out var codeContext); codeContext.GetDocumentContext(out var documentContext); - if (documentContext == null) + if (documentContext is null) { stackTrace += MiscHelpers.FormatInvariant(" at {0}\n", description); } @@ -278,7 +281,7 @@ private bool GetDirectAccessItem(object item, out object directAccessItem) continue; } - if ((item != null) && (item.GetType().IsCOMObject || item.GetType().IsCOMVisible(this))) + if ((item is not null) && (item.GetType().IsCOMObject || item.GetType().IsCOMVisible(this))) { directAccessItem = item; return true; @@ -293,9 +296,9 @@ private bool GetDirectAccessItem(object item, out object directAccessItem) private object MarshalToScriptInternal(object obj, HostItemFlags flags, HashSet marshaledArraySet) { - if (obj == null) + if (obj is null) { - if (engineFlags.HasFlag(WindowsScriptEngineFlags.MarshalNullAsDispatch)) + if (engineFlags.HasAllFlags(WindowsScriptEngineFlags.MarshalNullAsDispatch)) { return nullDispatch; } @@ -303,7 +306,7 @@ private object MarshalToScriptInternal(object obj, HostItemFlags flags, HashSet< obj = NullExportValue; } - if (obj == null) + if (obj is null) { return DBNull.Value; } @@ -328,12 +331,12 @@ private object MarshalToScriptInternal(object obj, HostItemFlags flags, HashSet< return nullDispatch; } - if (engineFlags.HasFlag(WindowsScriptEngineFlags.MarshalDateTimeAsDate) && (obj is DateTime)) + if (engineFlags.HasAllFlags(WindowsScriptEngineFlags.MarshalDateTimeAsDate) && (obj is DateTime)) { return obj; } - if (engineFlags.HasFlag(WindowsScriptEngineFlags.MarshalDecimalAsCurrency) && (obj is decimal)) + if (engineFlags.HasAllFlags(WindowsScriptEngineFlags.MarshalDecimalAsCurrency) && (obj is decimal)) { return new CurrencyWrapper(obj); } @@ -349,7 +352,7 @@ private object MarshalToScriptInternal(object obj, HostItemFlags flags, HashSet< } var hostTarget = obj as HostTarget; - if ((hostTarget != null) && !(hostTarget is IHostVariable)) + if ((hostTarget is not null) && (hostTarget is not IHostVariable)) { obj = hostTarget.Target; } @@ -362,12 +365,12 @@ private object MarshalToScriptInternal(object obj, HostItemFlags flags, HashSet< } } - if (engineFlags.HasFlag(WindowsScriptEngineFlags.MarshalArraysByValue)) + if (engineFlags.HasAllFlags(WindowsScriptEngineFlags.MarshalArraysByValue)) { - if ((obj is Array array) && ((hostTarget == null) || hostTarget.Type.IsArray)) + if ((obj is Array array) && ((hostTarget is null) || hostTarget.Type.IsArray)) { bool alreadyMarshaled; - if (marshaledArraySet != null) + if (marshaledArraySet is not null) { alreadyMarshaled = marshaledArraySet.Contains(array); } @@ -396,14 +399,14 @@ private object MarshalToScriptInternal(object obj, HostItemFlags flags, HashSet< private object MarshalToHostInternal(object obj, bool preserveHostTarget, HashSet marshaledArraySet) { - if (obj == null) + if (obj is null) { return UndefinedImportValue; } if (obj is DBNull) { - return null; + return NullImportValue; } if (MiscHelpers.TryMarshalPrimitiveToHost(obj, DisableFloatNarrowing, out var result)) @@ -416,7 +419,7 @@ private object MarshalToHostInternal(object obj, bool preserveHostTarget, HashSe // COM interop converts VBScript arrays to managed arrays bool alreadyMarshaled; - if (marshaledArraySet != null) + if (marshaledArraySet is not null) { alreadyMarshaled = marshaledArraySet.Contains(array); } @@ -455,7 +458,7 @@ private object MarshalToHostInternal(object obj, bool preserveHostTarget, HashSe private void ThrowHostException(Exception exception) { - if (CurrentScriptFrame != null) + if (CurrentScriptFrame is not null) { // Record the host exception in the script frame and throw an easily recognizable // surrogate across the COM boundary. Recording the host exception enables @@ -486,7 +489,7 @@ private void ThrowScriptError(Exception exception) ThrowScriptError(CurrentScriptFrame.ScriptError ?? CurrentScriptFrame.PendingScriptError); var hostException = CurrentScriptFrame.HostException; - if (hostException != null) + if (hostException is not null) { throw new ScriptEngineException(Name, hostException.Message, null, HResult.CLEARSCRIPT_E_HOSTEXCEPTION, false, true, null, hostException); } @@ -549,7 +552,7 @@ public override ScriptObject Global public override string GetStackTrace() { VerifyNotDisposed(); - return (processDebugManager != null) ? ScriptInvoke(GetStackTraceInternal) : string.Empty; + return (processDebugManager is not null) ? ScriptInvoke(static self => self.GetStackTraceInternal(), this) : string.Empty; } /// @@ -565,7 +568,7 @@ public override void Interrupt() public override void CollectGarbage(bool exhaustive) { VerifyNotDisposed(); - ScriptInvoke(() => activeScript.CollectGarbage(exhaustive ? ScriptGCType.Exhaustive : ScriptGCType.Normal)); + ScriptInvoke(static ctx => ctx.self.activeScript.CollectGarbage(ctx.exhaustive ? ScriptGCType.Exhaustive : ScriptGCType.Normal), (self: this, exhaustive)); } #endregion @@ -579,52 +582,55 @@ internal override void AddHostItem(string itemName, HostItemFlags flags, object VerifyNotDisposed(); MiscHelpers.VerifyNonNullArgument(itemName, nameof(itemName)); - Debug.Assert(item != null); + Debug.Assert(item is not null); - ScriptInvoke(() => - { - if (!flags.HasFlag(HostItemFlags.DirectAccess) || !GetDirectAccessItem(item, out var marshaledItem)) + ScriptInvoke( + static ctx => { - marshaledItem = MarshalToScript(item, flags); - if (!(marshaledItem is HostItem)) + if (!ctx.flags.HasAllFlags(HostItemFlags.DirectAccess) || !ctx.self.GetDirectAccessItem(ctx.item, out var marshaledItem)) { - throw new InvalidOperationException("Invalid host item"); + marshaledItem = ctx.self.MarshalToScript(ctx.item, ctx.flags); + if (marshaledItem is not HostItem) + { + throw new InvalidOperationException("Invalid host item"); + } } - } - var oldItem = ((IDictionary)hostItemMap)[itemName]; - hostItemMap[itemName] = marshaledItem; + var oldItem = ((IDictionary)ctx.self.hostItemMap)[ctx.itemName]; + ctx.self.hostItemMap[ctx.itemName] = marshaledItem; - var nativeFlags = ScriptItemFlags.IsVisible; - if (flags.HasFlag(HostItemFlags.GlobalMembers)) - { - nativeFlags |= ScriptItemFlags.GlobalMembers; - } - - try - { - activeScript.AddNamedItem(itemName, nativeFlags); - } - catch - { - if (oldItem != null) + var nativeFlags = ScriptItemFlags.IsVisible; + if (ctx.flags.HasAllFlags(HostItemFlags.GlobalMembers)) { - hostItemMap[itemName] = oldItem; + nativeFlags |= ScriptItemFlags.GlobalMembers; } - else + + try { - hostItemMap.Remove(itemName); + ctx.self.activeScript.AddNamedItem(ctx.itemName, nativeFlags); } + catch + { + if (oldItem is not null) + { + ctx.self.hostItemMap[ctx.itemName] = oldItem; + } + else + { + ctx.self.hostItemMap.Remove(ctx.itemName); + } - throw; - } - }); + throw; + } + }, + (self: this, itemName, flags, item) + ); } internal override object PrepareResult(object result, Type type, ScriptMemberFlags flags, bool isListIndexResult) { var tempResult = base.PrepareResult(result, type, flags, isListIndexResult); - if ((tempResult != null) || !engineFlags.HasFlag(WindowsScriptEngineFlags.MarshalNullAsDispatch)) + if ((tempResult is not null) || !engineFlags.HasAllFlags(WindowsScriptEngineFlags.MarshalNullAsDispatch)) { return tempResult; } @@ -650,7 +656,7 @@ internal override object MarshalToHost(object obj, bool preserveHostTarget) internal override object Execute(UniqueDocumentInfo documentInfo, string code, bool evaluate) { VerifyNotDisposed(); - return ScriptInvoke(() => ExecuteRaw(documentInfo, code, evaluate)); + return ScriptInvoke(static ctx => ctx.self.ExecuteRaw(ctx.documentInfo, ctx.code, ctx.evaluate), (self: this, documentInfo, code, evaluate)); } internal sealed override object ExecuteRaw(UniqueDocumentInfo documentInfo, string code, bool evaluate) @@ -670,7 +676,7 @@ internal sealed override object ExecuteRaw(UniqueDocumentInfo documentInfo, stri } } - internal override HostItemCollateral HostItemCollateral { get; } = new HostItemCollateral(); + internal override HostItemCollateral HostItemCollateral { get; } = new(); #endregion @@ -689,7 +695,20 @@ internal override void HostInvoke(Action action) } } - internal override T HostInvoke(Func func) + internal override void HostInvoke(Action action, in TArg arg) + { + try + { + base.HostInvoke(action, arg); + } + catch (Exception exception) + { + ThrowHostException(exception); + throw; + } + } + + internal override TResult HostInvoke(Func func) { try { @@ -702,6 +721,19 @@ internal override T HostInvoke(Func func) } } + internal override TResult HostInvoke(Func func, in TArg arg) + { + try + { + return base.HostInvoke(func, arg); + } + catch (Exception exception) + { + ThrowHostException(exception); + throw; + } + } + #endregion #region ScriptEngine overrides (script-side invocation) @@ -709,35 +741,81 @@ internal override T HostInvoke(Func func) internal override void ScriptInvoke(Action action) { VerifyAccess(); - base.ScriptInvoke(() => - { - try + base.ScriptInvoke( + static ctx => { - action(); - } - catch (Exception exception) + try + { + ctx.action(); + } + catch (Exception exception) + { + ctx.self.ThrowScriptError(exception); + throw; + } + }, + (self: this, action) + ); + } + + internal override void ScriptInvoke(Action action, in TArg arg) + { + VerifyAccess(); + base.ScriptInvoke( + static ctx => { - ThrowScriptError(exception); - throw; - } - }); + try + { + ctx.action(ctx.arg); + } + catch (Exception exception) + { + ctx.self.ThrowScriptError(exception); + throw; + } + }, + (self: this, action, arg) + ); } - internal override T ScriptInvoke(Func func) + internal override TResult ScriptInvoke(Func func) { VerifyAccess(); - return base.ScriptInvoke(() => - { - try + return base.ScriptInvoke( + static ctx => { - return func(); - } - catch (Exception exception) + try + { + return ctx.func(); + } + catch (Exception exception) + { + ctx.self.ThrowScriptError(exception); + throw; + } + }, + (self: this, func) + ); + } + + internal override TResult ScriptInvoke(Func func, in TArg arg) + { + VerifyAccess(); + return base.ScriptInvoke( + static ctx => { - ThrowScriptError(exception); - throw; - } - }); + try + { + return ctx.func(ctx.arg); + } + catch (Exception exception) + { + ctx.self.ThrowScriptError(exception); + throw; + } + }, + (self: this, func, arg) + ); } #endregion @@ -784,7 +862,7 @@ protected override void Dispose(bool disposing) debugDocumentMap.Values.ForEach(debugDocument => debugDocument.Close()); } - if (processDebugManager != null) + if (processDebugManager is not null) { processDebugManager.RemoveApplication(debugApplicationCookie); debugApplication.Close(); diff --git a/ClearScript/Windows/Core/WindowsScriptItem.cs b/ClearScript/Windows/Core/WindowsScriptItem.cs index 116d89de3..16d406328 100644 --- a/ClearScript/Windows/Core/WindowsScriptItem.cs +++ b/ClearScript/Windows/Core/WindowsScriptItem.cs @@ -21,7 +21,7 @@ internal class WindowsScriptItem : ScriptItem, IWindowsScriptObject, IDictionary private readonly WindowsScriptEngine engine; private readonly IDispatchEx target; private WindowsScriptItem holder; - private readonly InterlockedOneWayFlag disposedFlag = new InterlockedOneWayFlag(); + private readonly InterlockedOneWayFlag disposedFlag = new(); private WindowsScriptItem(WindowsScriptEngine engine, IDispatchEx target) { @@ -31,9 +31,9 @@ private WindowsScriptItem(WindowsScriptEngine engine, IDispatchEx target) public static object Wrap(WindowsScriptEngine engine, object obj) { - Debug.Assert(!(obj is IScriptMarshalWrapper)); + Debug.Assert(obj is not IScriptMarshalWrapper); - if (obj == null) + if (obj is null) { return null; } @@ -67,7 +67,7 @@ private bool TryGetScriptError(Exception exception, out IScriptEngineException s } scriptError = exception as IScriptEngineException; - if (scriptError != null) + if (scriptError is not null) { return true; } @@ -75,16 +75,16 @@ private bool TryGetScriptError(Exception exception, out IScriptEngineException s if (exception is COMException comException) { var result = comException.ErrorCode; - if (((result == HResult.SCRIPT_E_REPORTED) || (result == HResult.CLEARSCRIPT_E_HOSTEXCEPTION)) && (engine.CurrentScriptFrame != null)) + if (((result == HResult.SCRIPT_E_REPORTED) || (result == HResult.CLEARSCRIPT_E_HOSTEXCEPTION)) && (engine.CurrentScriptFrame is not null)) { scriptError = engine.CurrentScriptFrame.ScriptError ?? engine.CurrentScriptFrame.PendingScriptError; - if (scriptError != null) + if (scriptError is not null) { return true; } var hostException = engine.CurrentScriptFrame.HostException; - if (hostException != null) + if (hostException is not null) { scriptError = new ScriptEngineException(engine.Name, hostException.Message, null, HResult.CLEARSCRIPT_E_HOSTEXCEPTION, false, true, null, hostException); return true; @@ -116,7 +116,7 @@ private bool TryGetScriptError(Exception exception, out IScriptEngineException s } else { - if ((exception is ArgumentException argumentException) && (argumentException.ParamName == null)) + if ((exception is ArgumentException argumentException) && (argumentException.ParamName is null)) { // this usually indicates invalid object or property access in VBScript scriptError = new ScriptEngineException(engine.Name, "Invalid object or property access", null, HResult.CLEARSCRIPT_E_SCRIPTITEMEXCEPTION, false, false, null, exception.InnerException); @@ -139,32 +139,37 @@ private bool TryGetProperty(string name, out object value) { VerifyNotDisposed(); - object tempResult = null; - var found = engine.ScriptInvoke(() => - { - try - { - tempResult = target.GetProperty(name, false); - return !(tempResult is Nonexistent); - } - catch (Exception exception) + var ctx = (self: this, name, value: (object)null); + + var found = engine.ScriptInvoke( + static pCtx => { - if (!name.IsDispIDName(out _) && (exception.HResult != HResult.DISP_E_UNKNOWNNAME)) + ref var ctx = ref pCtx.AsRef(); + try { - // Property retrieval failed, but a method with the given name exists; - // create a tear-off method. This currently applies only to VBScript. - - tempResult = new ScriptMethod(this, name); - return true; + ctx.value = ctx.self.target.GetProperty(ctx.name, false); + return ctx.value is not Nonexistent; } + catch (Exception exception) + { + if (!ctx.name.IsDispIDName(out _) && (exception.HResult != HResult.DISP_E_UNKNOWNNAME)) + { + // Property retrieval failed, but a method with the given name exists; + // create a tear-off method. This currently applies only to VBScript. - return false; - } - }); + ctx.value = new ScriptMethod(ctx.self, ctx.name); + return true; + } + + return false; + } + }, + StructPtr.FromRef(ref ctx) + ); if (found) { - var result = engine.MarshalToHost(tempResult, false); + var result = engine.MarshalToHost(ctx.value, false); if ((result is WindowsScriptItem resultScriptItem) && (resultScriptItem.engine == engine)) { resultScriptItem.holder = this; @@ -187,7 +192,7 @@ protected override bool TryBindAndInvoke(DynamicMetaObjectBinder binder, object[ var succeeded = DynamicHelpers.TryBindAndInvoke(binder, target, args, out result); if (!succeeded) { - if ((result is Exception exception) && (engine.CurrentScriptFrame != null)) + if ((result is Exception exception) && (engine.CurrentScriptFrame is not null)) { var scriptError = exception as IScriptEngineException ?? GetScriptError(exception); @@ -215,13 +220,13 @@ protected override object[] AdjustInvokeArgs(object[] args) public override string[] GetPropertyNames() { VerifyNotDisposed(); - return engine.ScriptInvoke(() => target.GetPropertyNames().ExcludeIndices().ToArray()); + return engine.ScriptInvoke(static target => target.GetPropertyNames().ExcludeIndices().ToArray(), target); } public override int[] GetPropertyIndices() { VerifyNotDisposed(); - return engine.ScriptInvoke(() => target.GetPropertyNames().GetIndices().ToArray()); + return engine.ScriptInvoke(static target => target.GetPropertyNames().GetIndices().ToArray(), target); } #endregion @@ -232,26 +237,32 @@ public override object GetProperty(string name, params object[] args) { VerifyNotDisposed(); - var result = engine.MarshalToHost(engine.ScriptInvoke(() => - { - try - { - var value = target.GetProperty(name, false, engine.MarshalToScript(args)); - return (value is Nonexistent) ? Undefined.Value : value; - } - catch (Exception exception) - { - if (!name.IsDispIDName(out _) && (exception.HResult != HResult.DISP_E_UNKNOWNNAME)) + var result = engine.MarshalToHost( + engine.ScriptInvoke( + static ctx => { - // Property retrieval failed, but a method with the given name exists; - // create a tear-off method. This currently applies only to VBScript. - - return new ScriptMethod(this, name); - } - - return Undefined.Value; - } - }), false); + try + { + var value = ctx.self.target.GetProperty(ctx.name, false, ctx.self.engine.MarshalToScript(ctx.args)); + return (value is Nonexistent) ? Undefined.Value : value; + } + catch (Exception exception) + { + if (!ctx.name.IsDispIDName(out _) && (exception.HResult != HResult.DISP_E_UNKNOWNNAME)) + { + // Property retrieval failed, but a method with the given name exists; + // create a tear-off method. This currently applies only to VBScript. + + return new ScriptMethod(ctx.self, ctx.name); + } + + return Undefined.Value; + } + }, + (self: this, name, args) + ), + false + ); if ((result is WindowsScriptItem resultScriptItem) && (resultScriptItem.engine == engine)) { @@ -264,13 +275,13 @@ public override object GetProperty(string name, params object[] args) public override void SetProperty(string name, params object[] args) { VerifyNotDisposed(); - engine.ScriptInvoke(() => target.SetProperty(name, false, engine.MarshalToScript(args))); + engine.ScriptInvoke(static ctx => ctx.self.target.SetProperty(ctx.name, false, ctx.self.engine.MarshalToScript(ctx.args)), (self: this, name, args)); } public override bool DeleteProperty(string name) { VerifyNotDisposed(); - return engine.ScriptInvoke(() => target.DeleteProperty(name, false)); + return engine.ScriptInvoke(static ctx => ctx.target.DeleteProperty(ctx.name, false), (target, name)); } public override object GetProperty(int index) @@ -311,7 +322,7 @@ public override object InvokeMethod(string name, params object[] args) try { - return engine.MarshalToHost(engine.ScriptInvoke(() => target.InvokeMethod(name, false, engine.MarshalToScript(args))), false); + return engine.MarshalToHost(engine.ScriptInvoke(static ctx => ctx.self.target.InvokeMethod(ctx.name, false, ctx.self.engine.MarshalToScript(ctx.args)), (self: this, name, args)), false); } catch (Exception exception) { @@ -368,16 +379,18 @@ object IWindowsScriptObject.GetUnderlyingObject() private string[] GetPropertyKeys() { VerifyNotDisposed(); - return engine.ScriptInvoke(() => target.GetPropertyNames().ToArray()); + return engine.ScriptInvoke(static target => target.GetPropertyNames().ToArray(), target); } IEnumerator> IEnumerable>.GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return KeyValuePairs.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return ThisDictionary.GetEnumerator(); } diff --git a/ClearScript/Windows/JScriptEngine.NetStandard.cs b/ClearScript/Windows/JScriptEngine.NetStandard.cs deleted file mode 100644 index 932104941..000000000 --- a/ClearScript/Windows/JScriptEngine.NetStandard.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Threading.Tasks; -using Microsoft.ClearScript.JavaScript; - -namespace Microsoft.ClearScript.Windows -{ - public partial class JScriptEngine - { - #region IJavaScriptEngine implementation - - object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) - { - throw new NotImplementedException(); - } - - object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) - { - throw new NotImplementedException(); - } - - #endregion - } -} diff --git a/ClearScript/Windows/JScriptEngine.cs b/ClearScript/Windows/JScriptEngine.cs index 9c9c5cd98..085ebf047 100644 --- a/ClearScript/Windows/JScriptEngine.cs +++ b/ClearScript/Windows/JScriptEngine.cs @@ -144,7 +144,7 @@ internal override object Execute(UniqueDocumentInfo documentInfo, string code, b if (documentInfo.Category == ModuleCategory.CommonJS) { var module = CommonJSManager.GetOrCreateModule(documentInfo, code); - return ScriptInvoke(() => module.Process()); + return ScriptInvoke(static module => module.Process(), module); } if (documentInfo.Category != DocumentCategory.Script) @@ -175,6 +175,16 @@ object IJavaScriptEngine.CreatePromiseForTask(Task task) throw new NotImplementedException(); } + object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) + { + throw new NotImplementedException(); + } + + object IJavaScriptEngine.CreatePromiseForValueTask(ValueTask valueTask) + { + throw new NotImplementedException(); + } + Task IJavaScriptEngine.CreateTaskForPromise(ScriptObject promise) { throw new NotImplementedException(); diff --git a/ClearScript/Windows/Nothing.cs b/ClearScript/Windows/Nothing.cs index 2716c69a4..e43592984 100644 --- a/ClearScript/Windows/Nothing.cs +++ b/ClearScript/Windows/Nothing.cs @@ -21,7 +21,7 @@ public class Nothing : INothingTag /// /// The sole instance of the class. /// - public static readonly Nothing Value = new Nothing(); + public static readonly Nothing Value = new(); private Nothing() { diff --git a/ClearScript/Windows/WindowsScriptEngineFlags.cs b/ClearScript/Windows/WindowsScriptEngineFlags.cs index 712f96cfd..0d107827a 100644 --- a/ClearScript/Windows/WindowsScriptEngineFlags.cs +++ b/ClearScript/Windows/WindowsScriptEngineFlags.cs @@ -82,4 +82,10 @@ public enum WindowsScriptEngineFlags /// MarshalDateTimeAsDate = 0x00000100 } + + internal static class WindowsScriptEngineFlagsHelpers + { + public static bool HasAllFlags(this WindowsScriptEngineFlags value, WindowsScriptEngineFlags flags) => (value & flags) == flags; + public static bool HasAnyFlag(this WindowsScriptEngineFlags value, WindowsScriptEngineFlags flags) => (value & flags) != 0; + } } diff --git a/ClearScript/doc/Reference.chm b/ClearScript/doc/Reference.chm index 653524451..6397cd133 100644 Binary files a/ClearScript/doc/Reference.chm and b/ClearScript/doc/Reference.chm differ diff --git a/ClearScript/doc/Reference.shfbproj b/ClearScript/doc/Reference.shfbproj index c25372774..8873801f8 100644 --- a/ClearScript/doc/Reference.shfbproj +++ b/ClearScript/doc/Reference.shfbproj @@ -46,11 +46,12 @@ AboveNamespaces Copyright &#169%3b Microsoft Corporation. All rights reserved. + The Microsoft.ClearScript namespace contains types that support all script engines. The Microsoft.ClearScript.V8 namespace contains types that provide access to the V8 high-performance open-source JavaScript engine. + The Microsoft.ClearScript.V8.FastProxy namespace contains types that support low-overhead access to host resources from the V8 JavaScript engine. The Microsoft.ClearScript.Windows namespace contains types that provide access to Windows Script engines such as JScript and VBScript in a desktop environment. The Microsoft.ClearScript.Windows.Core namespace contains types that provide access to Windows Script engines such as JScript and VBScript. - The Microsoft.ClearScript.JavaScript namespace contains types that provide access to JavaScript-specific features. ClearScript Library Reference diff --git a/ClearScript/doc/WebReference.shfbproj b/ClearScript/doc/WebReference.shfbproj index 9d329ef28..f05e70b82 100644 --- a/ClearScript/doc/WebReference.shfbproj +++ b/ClearScript/doc/WebReference.shfbproj @@ -46,11 +46,12 @@ AboveNamespaces Copyright &#169%3b Microsoft Corporation. All rights reserved. + The Microsoft.ClearScript namespace contains types that support all script engines. The Microsoft.ClearScript.V8 namespace contains types that provide access to the V8 high-performance open-source JavaScript engine. + The Microsoft.ClearScript.V8.FastProxy namespace contains types that support low-overhead access to host resources from the V8 JavaScript engine. The Microsoft.ClearScript.Windows namespace contains types that provide access to Windows Script engines such as JScript and VBScript in a desktop environment. The Microsoft.ClearScript.Windows.Core namespace contains types that provide access to Windows Script engines such as JScript and VBScript. - The Microsoft.ClearScript.JavaScript namespace contains types that provide access to JavaScript-specific features. ClearScript Library Reference diff --git a/ClearScriptBenchmarks/ClearScriptBenchmarks.Unix.cs b/ClearScriptBenchmarks/ClearScriptBenchmarks.Unix.cs index f8f76b59f..e34368dce 100644 --- a/ClearScriptBenchmarks/ClearScriptBenchmarks.Unix.cs +++ b/ClearScriptBenchmarks/ClearScriptBenchmarks.Unix.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System; +using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.ClearScript.V8; @@ -18,8 +19,21 @@ public static class ClearScriptBenchmarks public static void Main(string[] args) { - uint choice = 0; - var burn = (args.Length == 2) && (args[0] == "-b") && uint.TryParse(args[1], out choice) && (choice >= 1) && (choice <= 2); + var choice = 0U; + var burn = false; + + var argQueue = new Queue(args); + while (argQueue.TryDequeue(out var arg)) + { + if ((arg == "-b") || (arg == "--burn")) + { + burn = argQueue.TryDequeue(out var choiceString) && uint.TryParse(choiceString, out choice) && (choice >= 1) && (choice <= 2); + } + else if ((arg == "-d") || (arg == "--disable-background-work")) + { + V8Settings.GlobalFlags |= V8GlobalFlags.DisableBackgroundWork; + } + } Console.Clear(); if (!burn) Console.WriteLine("ClearScript Benchmarks ({0}, {1}, {2} {3})\n", RuntimeInformation.FrameworkDescription.Trim(), RuntimeInformation.OSDescription.Trim(), RuntimeInformation.ProcessArchitecture, flavor); diff --git a/ClearScriptBenchmarks/ClearScriptBenchmarks.Windows.cs b/ClearScriptBenchmarks/ClearScriptBenchmarks.Windows.cs index 52c9498ae..0360432e1 100644 --- a/ClearScriptBenchmarks/ClearScriptBenchmarks.Windows.cs +++ b/ClearScriptBenchmarks/ClearScriptBenchmarks.Windows.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using System; +using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.ClearScript.V8; @@ -19,8 +20,21 @@ public static class ClearScriptBenchmarks public static void Main(string[] args) { - uint choice = 0; - var burn = (args.Length == 2) && (args[0] == "-b") && uint.TryParse(args[1], out choice) && (choice >= 1) && (choice <= 3); + var choice = 0U; + var burn = false; + + var argQueue = new Queue(args); + while (argQueue.TryDequeue(out var arg)) + { + if ((arg == "-b") || (arg == "--burn")) + { + burn = argQueue.TryDequeue(out var choiceString) && uint.TryParse(choiceString, out choice) && (choice >= 1) && (choice <= 3); + } + else if ((arg == "-d") || (arg == "--disable-background-work")) + { + V8Settings.GlobalFlags |= V8GlobalFlags.DisableBackgroundWork; + } + } Console.Clear(); if (!burn) Console.WriteLine("ClearScript Benchmarks ({0}, {1}, {2} {3})\n", RuntimeInformation.FrameworkDescription.Trim(), RuntimeInformation.OSDescription.Trim(), RuntimeInformation.ProcessArchitecture, flavor); @@ -129,4 +143,20 @@ private static void Run(Func engineFactory, Action(this Queue queue, out T value) + { + try + { + value = queue.Dequeue(); + return true; + } + catch (InvalidOperationException) + { + value = default; + return false; + } + } + } } diff --git a/ClearScriptBenchmarks/Properties/AssemblyInfo.cs b/ClearScriptBenchmarks/Properties/AssemblyInfo.cs index a879a3560..e7788097f 100644 --- a/ClearScriptBenchmarks/Properties/AssemblyInfo.cs +++ b/ClearScriptBenchmarks/Properties/AssemblyInfo.cs @@ -11,6 +11,6 @@ [assembly: AssemblyCopyright("(c) Microsoft Corporation")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("7.4.5")] -[assembly: AssemblyFileVersion("7.4.5")] -[assembly: AssemblyInformationalVersion("7.4.5")] +[assembly: AssemblyVersion("7.5.0")] +[assembly: AssemblyFileVersion("7.5.0")] +[assembly: AssemblyInformationalVersion("7.5.0")] diff --git a/ClearScriptBenchmarks/SunSpider.cs b/ClearScriptBenchmarks/SunSpider.cs index 26907a438..5756b13cd 100644 --- a/ClearScriptBenchmarks/SunSpider.cs +++ b/ClearScriptBenchmarks/SunSpider.cs @@ -65,7 +65,7 @@ function ClearScriptCleanup() { if (!quiet) Console.WriteLine("Done"); // run main test - var results = repeatIndices.Select(index => new Dictionary()).ToArray(); + var results = repeatIndices.Select(_ => new Dictionary()).ToArray(); var timeSpans = new long[repeatCount]; repeatIndices.ForEach(repeatIndex => { diff --git a/ClearScriptConsole/ClearScriptConsole.cs b/ClearScriptConsole/ClearScriptConsole.cs index 502fcfa22..ee18c9e09 100644 --- a/ClearScriptConsole/ClearScriptConsole.cs +++ b/ClearScriptConsole/ClearScriptConsole.cs @@ -65,7 +65,7 @@ private static void RunConsole(ScriptEngine engine) Console.Write("-> "); var command = Console.ReadLine(); - if (command == null) + if (command is null) { break; } @@ -78,7 +78,7 @@ private static void RunConsole(ScriptEngine engine) try { var result = engine.ExecuteCommand(command); - if (result != null) + if (result is not null) { Console.WriteLine(result); } diff --git a/ClearScriptConsole/ConsoleTest.cs b/ClearScriptConsole/ConsoleTest.cs index 03dcf6d21..49d967507 100644 --- a/ClearScriptConsole/ConsoleTest.cs +++ b/ClearScriptConsole/ConsoleTest.cs @@ -31,7 +31,7 @@ public static unsafe void BugFix_V8StackLimitIntegerOverflow() var thread = new Thread(() => { var ptr = stackalloc byte[192 * 1024]; - if ((ulong)ptr < (984 * 1024UL)) + if ((ulong)ptr < (1536 * 1024UL)) { try { @@ -51,13 +51,13 @@ public static unsafe void BugFix_V8StackLimitIntegerOverflow() done.Set(); exit.Wait(); - }, 256 * 1024); + }, 384 * 1024); threads.Add(thread); thread.Start(); done.WaitOne(); - if (caughtException != null) + if (caughtException is not null) { throw new AssertFailedException("Exception thrown in worker thread", caughtException); } diff --git a/ClearScriptConsole/Properties/AssemblyInfo.cs b/ClearScriptConsole/Properties/AssemblyInfo.cs index 6927224ca..3556cacdb 100644 --- a/ClearScriptConsole/Properties/AssemblyInfo.cs +++ b/ClearScriptConsole/Properties/AssemblyInfo.cs @@ -11,6 +11,6 @@ [assembly: AssemblyCopyright("(c) Microsoft Corporation")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("7.4.5")] -[assembly: AssemblyFileVersion("7.4.5")] -[assembly: AssemblyInformationalVersion("7.4.5")] +[assembly: AssemblyVersion("7.5.0")] +[assembly: AssemblyFileVersion("7.5.0")] +[assembly: AssemblyInformationalVersion("7.5.0")] diff --git a/ClearScriptTest/BugFixTest.NetFramework.cs b/ClearScriptTest/BugFixTest.NetFramework.cs index 57e4c2208..74962feeb 100644 --- a/ClearScriptTest/BugFixTest.NetFramework.cs +++ b/ClearScriptTest/BugFixTest.NetFramework.cs @@ -3,6 +3,7 @@ using System.Reflection; using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.Windows; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Microsoft.ClearScript.Test @@ -35,6 +36,84 @@ public void BugFix_MultipleAppDomains() TestUtil.InvokeConsoleTest("BugFix_MultipleAppDomains"); } + [TestMethod, TestCategory("BugFix")] + public void BugFix_XMLDOM_Enumeration_Attributes_JScript() + { + var document = new MSXML2.DOMDocument60Class(); + document.loadXML(@" + + + + + + + + + + + + + + + + + + "); + + engine.Dispose(); + engine = new JScriptEngine(); + + engine.AddHostObject("document", document); + engine.Execute(@" + allPages = document.getElementsByTagName('page'); + total = 0; + for (var e = new Enumerator(allPages); !e.atEnd(); e.moveNext()) { + total = total + parseInt(e.item().getAttribute('id')) + } + "); + + Assert.AreEqual(5115, engine.Script.total); + } + + [TestMethod, TestCategory("BugFix")] + public void BugFix_XMLDOM_Enumeration_Attributes_VBScript() + { + var document = new MSXML2.DOMDocument60Class(); + document.loadXML(@" + + + + + + + + + + + + + + + + + + "); + + engine.Dispose(); + engine = new VBScriptEngine(); + + engine.AddHostObject("document", document); + engine.Execute(@" + set allPages = document.getElementsByTagName(""page"") + total = 0 + for each page in allPages + total = total + CInt(page.getAttribute(""id"")) + next + "); + + Assert.AreEqual(5115, engine.Script.total); + } + #endregion } } diff --git a/ClearScriptTest/BugFixTest.Windows.cs b/ClearScriptTest/BugFixTest.Windows.cs index 832d4a460..64f2d5006 100644 --- a/ClearScriptTest/BugFixTest.Windows.cs +++ b/ClearScriptTest/BugFixTest.Windows.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -119,7 +119,7 @@ public void BugFix_IDispatchExArgLeak_InvokeMethod_JScript() [TestMethod, TestCategory("BugFix")] public void BugFix_TooManyDebugApplications() { - var engines = Enumerable.Range(0, 2048).Select(index => new JScriptEngine(WindowsScriptEngineFlags.EnableDebugging)).ToArray(); + var engines = Enumerable.Range(0, 2048).Select(_ => new JScriptEngine(WindowsScriptEngineFlags.EnableDebugging)).ToArray(); Array.ForEach(engines, tempEngine => tempEngine.Dispose()); } @@ -460,7 +460,8 @@ public void BugFix_JScript_TargetInvocationException() } catch (ScriptEngineException exception) { - Assert.IsTrue(exception.ErrorDetails.Contains("bar\n at test (Script:0:18) -> foo")); + Assert.IsTrue(exception.ErrorDetails.Contains("bar\n")); + Assert.IsTrue(exception.ErrorDetails.Contains("(Script:0:18) -> foo")); } } @@ -1441,12 +1442,114 @@ public void BugFix_MultidimensionalArray_VBScript() Assert.AreEqual(456, engine.Evaluate("y(2, 3)")); } + [TestMethod, TestCategory("BugFix")] + public void BugFix_XMLDOM_Enumeration_JScript() + { + var document = new MSXML2.DOMDocument60Class(); + document.loadXML(@" + + + + + + + + + + + + + + + + + + "); + + engine.Dispose(); + engine = new JScriptEngine(); + + engine.AddHostObject("document", document); + engine.Execute(@" + allPages = document.getElementsByTagName('page'); + count = 0; + for (var e = new Enumerator(allPages); !e.atEnd(); e.moveNext()) { + ++count; + } + "); + + Assert.AreEqual(11, engine.Script.count); + } + + [TestMethod, TestCategory("BugFix")] + public void BugFix_XMLDOM_Enumeration_VBScript() + { + var document = new MSXML2.DOMDocument60Class(); + document.loadXML(@" + + + + + + + + + + + + + + + + + + "); + + engine.Dispose(); + engine = new VBScriptEngine(); + + engine.AddHostObject("document", document); + engine.Execute(@" + set allPages = document.getElementsByTagName(""page"") + count = 0 + for each page in allPages + count = count + 1 + next + "); + + Assert.AreEqual(11, engine.Script.count); + } + + [TestMethod, TestCategory("BugFix")] + public void BugFix_SparseArgumentBinding() + { + engine.Dispose(); + engine = new VBScriptEngine(); + + engine.Script.test = new SparseArgumentTest(); + engine.UseReflectionBindFallback = true; + + Assert.AreEqual("'foo' 'bar' 789 456", engine.Evaluate("test.go(\"foo\", \"bar\", 789)")); + Assert.AreEqual("'foo' 'bar' 123 456", engine.Evaluate("test.go(\"foo\", \"bar\")")); + Assert.AreEqual("'foo' 'xyz' 789 456", engine.Evaluate("test.go(\"foo\", , 789)")); + Assert.AreEqual("'foo' 'xyz' 123 789", engine.Evaluate("test.go(\"foo\", , , 789)")); + Assert.AreEqual("'foo' 'xyz' 123 456", engine.Evaluate("test.go(\"foo\")")); + } + // ReSharper restore InconsistentNaming #endregion #region miscellaneous + public sealed class SparseArgumentTest + { + public string Go(string first, string second = "xyz", int third = 123, int fourth = 456) + { + return $"'{first}' '{second}' {third} {fourth}"; + } + } + private static void VariantClearTestHelper(object x) { using (var engine = new JScriptEngine()) diff --git a/ClearScriptTest/BugFixTest.cs b/ClearScriptTest/BugFixTest.cs index dba009a7d..db0d69193 100644 --- a/ClearScriptTest/BugFixTest.cs +++ b/ClearScriptTest/BugFixTest.cs @@ -22,6 +22,7 @@ using System.Threading; using System.Threading.Tasks; using System.Xml.Linq; +using Microsoft.ClearScript.JavaScript; namespace Microsoft.ClearScript.Test { @@ -128,12 +129,14 @@ public void BugFix_V8ScriptInterruptCrash() public void BugFix_InheritedInterfaceMethod() { var list = new List { 123 }; - var enumerator = list.AsEnumerable().GetEnumerator(); - engine.AddRestrictedHostObject("enumerator", enumerator); - Assert.IsTrue((bool)engine.Evaluate("enumerator.MoveNext()")); - Assert.AreEqual(123, engine.Evaluate("enumerator.Current")); - Assert.IsFalse((bool)engine.Evaluate("enumerator.MoveNext()")); - engine.Execute("enumerator.Dispose()"); + using (var enumerator = list.AsEnumerable().GetEnumerator()) + { + engine.AddRestrictedHostObject("enumerator", enumerator); + Assert.IsTrue((bool)engine.Evaluate("enumerator.MoveNext()")); + Assert.AreEqual(123, engine.Evaluate("enumerator.Current")); + Assert.IsFalse((bool)engine.Evaluate("enumerator.MoveNext()")); + engine.Execute("enumerator.Dispose()"); + } } [TestMethod, TestCategory("BugFix")] @@ -445,50 +448,81 @@ public void BugFix_V8CachedObjectLeak() [TestMethod, TestCategory("BugFix")] public void BugFix_Resurrection_V8ScriptEngine() { - for (var index = 0; index < 256; index++) + new Action(static () => { - // ReSharper disable UnusedVariable + for (var index = 0; index < 256; index++) + { + // ReSharper disable UnusedVariable - var wrapper = new ResurrectionTestWrapper(new V8ScriptEngine()); - GC.Collect(); + var wrapper = new ResurrectionTestWrapper(new V8ScriptEngine()); + GC.Collect(); - // ReSharper restore UnusedVariable - } + // ReSharper restore UnusedVariable + } + })(); + + GC.Collect(); + GC.WaitForPendingFinalizers(); } [TestMethod, TestCategory("BugFix")] public void BugFix_Resurrection_V8Runtime() { - for (var index = 0; index < 256; index++) + new Action(static () => { - // ReSharper disable UnusedVariable + for (var index = 0; index < 256; index++) + { + // ReSharper disable UnusedVariable - var wrapper = new ResurrectionTestWrapper(new V8Runtime()); - GC.Collect(); + var wrapper = new ResurrectionTestWrapper(new V8Runtime()); + GC.Collect(); - // ReSharper restore UnusedVariable - } + // ReSharper restore UnusedVariable + } + })(); + + GC.Collect(); + GC.WaitForPendingFinalizers(); } [TestMethod, TestCategory("BugFix")] public void BugFix_Resurrection_V8Script() { - for (var index = 0; index < 256; index++) + new Action(static () => { - // ReSharper disable UnusedVariable + for (var index = 0; index < 256; index++) + { + // ReSharper disable UnusedVariable - var tempEngine = new V8ScriptEngine(); - var wrapper = new ResurrectionTestWrapper(tempEngine.Compile("function foo() {}")); - GC.Collect(); + var tempEngine = new V8ScriptEngine(); + var wrapper = new ResurrectionTestWrapper(tempEngine.Compile("function foo() {}")); + GC.Collect(); - // ReSharper restore UnusedVariable - } + // ReSharper restore UnusedVariable + } + })(); + + GC.Collect(); + GC.WaitForPendingFinalizers(); } [TestMethod, TestCategory("BugFix")] public void BugFix_Resurrection_V8ScriptItem() { - TestV8ScriptItemResurrection(); + new Action(static () => + { + for (var index = 0; index < 256; index++) + { + // ReSharper disable UnusedVariable + + var tempEngine = new V8ScriptEngine(); + var wrapper = new ResurrectionTestWrapper(tempEngine.Script.Math); + GC.Collect(); + + // ReSharper restore UnusedVariable + } + })(); + GC.Collect(); GC.WaitForPendingFinalizers(); } @@ -1201,7 +1235,9 @@ public void BugFix_SharedV8RuntimeLeak() } runtime.CollectGarbage(true); - Assert.IsFalse(runtime.GetHeapInfo().TotalHeapSize > (heapSize * 1.75)); + + var newHeapSize = runtime.GetHeapInfo().TotalHeapSize; + Assert.IsFalse(newHeapSize > (heapSize * 2.0)); } } @@ -1901,6 +1937,120 @@ public void BugFix_V8Runtime_CreateScriptEngineWithPendingInterrupt() } } + [TestMethod, TestCategory("BugFix")] + public void BugFix_V8_MaxRuntimeHeapSize_SetBelowCurrent() + { + ((V8ScriptEngine)engine).MaxRuntimeHeapSize = new UIntPtr(256 * 1024); + TestUtil.AssertException(() => engine.Execute("")); + TestUtil.AssertException(() => engine.Execute("")); + } + + [TestMethod, TestCategory("BugFix")] + public void BugFix_ZeroLengthDataTransfer() + { + var buffer = (IArrayBuffer)engine.Evaluate("new ArrayBuffer(0)"); + + Assert.AreEqual(0UL, buffer.ReadBytes(0, 0, new byte[0], 0)); + TestUtil.AssertException(() => buffer.ReadBytes(1, 0, new byte[0], 0)); + TestUtil.AssertException(() => buffer.ReadBytes(0, 1, new byte[0], 0)); + TestUtil.AssertException(() => buffer.ReadBytes(0, 0, new byte[0], 1)); + + Assert.AreEqual(0UL, buffer.ReadBytes(0, 0, new byte[0].AsSpan(), 0)); + TestUtil.AssertException(() => buffer.ReadBytes(1, 0, new byte[0].AsSpan(), 0)); + TestUtil.AssertException(() => buffer.ReadBytes(0, 1, new byte[0].AsSpan(), 0)); + TestUtil.AssertException(() => buffer.ReadBytes(0, 0, new byte[0].AsSpan(), 1)); + + Assert.AreEqual(0UL, buffer.WriteBytes(new byte[0], 0, 0, 0)); + TestUtil.AssertException(() => buffer.WriteBytes(new byte[0], 1, 0, 0)); + TestUtil.AssertException(() => buffer.WriteBytes(new byte[0], 0, 1, 0)); + TestUtil.AssertException(() => buffer.WriteBytes(new byte[0], 0, 0, 1)); + + Assert.AreEqual(0UL, buffer.WriteBytes(new byte[0].AsSpan(), 0, 0, 0)); + TestUtil.AssertException(() => buffer.WriteBytes(new byte[0].AsSpan(), 1, 0, 0)); + TestUtil.AssertException(() => buffer.WriteBytes(new byte[0].AsSpan(), 0, 1, 0)); + TestUtil.AssertException(() => buffer.WriteBytes(new byte[0].AsSpan(), 0, 0, 1)); + + var view = (IDataView)engine.Evaluate("new DataView(new ArrayBuffer(0))"); + + Assert.AreEqual(0UL, view.ReadBytes(0, 0, new byte[0], 0)); + TestUtil.AssertException(() => view.ReadBytes(1, 0, new byte[0], 0)); + TestUtil.AssertException(() => view.ReadBytes(0, 1, new byte[0], 0)); + TestUtil.AssertException(() => view.ReadBytes(0, 0, new byte[0], 1)); + + Assert.AreEqual(0UL, view.ReadBytes(0, 0, new byte[0].AsSpan(), 0)); + TestUtil.AssertException(() => view.ReadBytes(1, 0, new byte[0].AsSpan(), 0)); + TestUtil.AssertException(() => view.ReadBytes(0, 1, new byte[0].AsSpan(), 0)); + TestUtil.AssertException(() => view.ReadBytes(0, 0, new byte[0].AsSpan(), 1)); + + Assert.AreEqual(0UL, view.WriteBytes(new byte[0], 0, 0, 0)); + TestUtil.AssertException(() => view.WriteBytes(new byte[0], 1, 0, 0)); + TestUtil.AssertException(() => view.WriteBytes(new byte[0], 0, 1, 0)); + TestUtil.AssertException(() => view.WriteBytes(new byte[0], 0, 0, 1)); + + Assert.AreEqual(0UL, view.WriteBytes(new byte[0].AsSpan(), 0, 0, 0)); + TestUtil.AssertException(() => view.WriteBytes(new byte[0].AsSpan(), 1, 0, 0)); + TestUtil.AssertException(() => view.WriteBytes(new byte[0].AsSpan(), 0, 1, 0)); + TestUtil.AssertException(() => view.WriteBytes(new byte[0].AsSpan(), 0, 0, 1)); + + void TestTypedArray(string name) where T : unmanaged + { + var typedArray = (ITypedArray)engine.Evaluate($"new {name}Array(0)"); + + Assert.AreEqual(0UL, typedArray.ReadBytes(0, 0, new byte[0], 0)); + TestUtil.AssertException(() => typedArray.ReadBytes(1, 0, new byte[0], 0)); + TestUtil.AssertException(() => typedArray.ReadBytes(0, 1, new byte[0], 0)); + TestUtil.AssertException(() => typedArray.ReadBytes(0, 0, new byte[0], 1)); + + Assert.AreEqual(0UL, typedArray.ReadBytes(0, 0, new byte[0].AsSpan(), 0)); + TestUtil.AssertException(() => typedArray.ReadBytes(1, 0, new byte[0].AsSpan(), 0)); + TestUtil.AssertException(() => typedArray.ReadBytes(0, 1, new byte[0].AsSpan(), 0)); + TestUtil.AssertException(() => typedArray.ReadBytes(0, 0, new byte[0].AsSpan(), 1)); + + Assert.AreEqual(0UL, typedArray.Read(0, 0, new T[0], 0)); + TestUtil.AssertException(() => typedArray.Read(1, 0, new T[0], 0)); + TestUtil.AssertException(() => typedArray.Read(0, 1, new T[0], 0)); + TestUtil.AssertException(() => typedArray.Read(0, 0, new T[0], 1)); + + Assert.AreEqual(0UL, typedArray.Read(0, 0, new T[0].AsSpan(), 0)); + TestUtil.AssertException(() => typedArray.Read(1, 0, new T[0].AsSpan(), 0)); + TestUtil.AssertException(() => typedArray.Read(0, 1, new T[0].AsSpan(), 0)); + TestUtil.AssertException(() => typedArray.Read(0, 0, new T[0].AsSpan(), 1)); + + Assert.AreEqual(0UL, typedArray.WriteBytes(new byte[0], 0, 0, 0)); + TestUtil.AssertException(() => typedArray.WriteBytes(new byte[0], 1, 0, 0)); + TestUtil.AssertException(() => typedArray.WriteBytes(new byte[0], 0, 1, 0)); + TestUtil.AssertException(() => typedArray.WriteBytes(new byte[0], 0, 0, 1)); + + Assert.AreEqual(0UL, typedArray.WriteBytes(new byte[0].AsSpan(), 0, 0, 0)); + TestUtil.AssertException(() => typedArray.WriteBytes(new byte[0].AsSpan(), 1, 0, 0)); + TestUtil.AssertException(() => typedArray.WriteBytes(new byte[0].AsSpan(), 0, 1, 0)); + TestUtil.AssertException(() => typedArray.WriteBytes(new byte[0].AsSpan(), 0, 0, 1)); + + Assert.AreEqual(0UL, typedArray.Write(new T[0], 0, 0, 0)); + TestUtil.AssertException(() => typedArray.Write(new T[0], 1, 0, 0)); + TestUtil.AssertException(() => typedArray.Write(new T[0], 0, 1, 0)); + TestUtil.AssertException(() => typedArray.Write(new T[0], 0, 0, 1)); + + Assert.AreEqual(0UL, typedArray.Write(new T[0].AsSpan(), 0, 0, 0)); + TestUtil.AssertException(() => typedArray.Write(new T[0].AsSpan(), 1, 0, 0)); + TestUtil.AssertException(() => typedArray.Write(new T[0].AsSpan(), 0, 1, 0)); + TestUtil.AssertException(() => typedArray.Write(new T[0].AsSpan(), 0, 0, 1)); + } + + TestTypedArray("Uint8"); + TestTypedArray("Uint8Clamped"); + TestTypedArray("Int8"); + TestTypedArray("Uint16"); + TestTypedArray("Uint16"); + TestTypedArray("Int16"); + TestTypedArray("Uint32"); + TestTypedArray("Int32"); + TestTypedArray("BigUint64"); + TestTypedArray("BigInt64"); + TestTypedArray("Float32"); + TestTypedArray("Float64"); + } + // ReSharper restore InconsistentNaming #endregion @@ -2024,11 +2174,11 @@ public struct MyDayOfWeek public static implicit operator DayOfWeek(MyDayOfWeek self) => self.day; - public static implicit operator MyDayOfWeek(DayOfWeek day) => new MyDayOfWeek(day); + public static implicit operator MyDayOfWeek(DayOfWeek day) => new(day); public static implicit operator char?(MyDayOfWeek self) => (self.day == DayOfWeek.Sunday) ? null : (char?)self.day; - public static implicit operator MyDayOfWeek(char? value) => new MyDayOfWeek((DayOfWeek)value.GetValueOrDefault()); + public static implicit operator MyDayOfWeek(char? value) => new((DayOfWeek)value.GetValueOrDefault()); } public class ImplicitConversionTest @@ -2292,7 +2442,7 @@ public class RestrictedPrototypeObjectBase : Dictionary public class RestrictedPrototypeObject : RestrictedPrototypeObjectBase, IPropertyBag, IScriptableObject { - private readonly ConditionalWeakTable map = new ConditionalWeakTable(); + private readonly ConditionalWeakTable map = new(); private readonly bool setPrototypeOnExpose; public RestrictedPrototypeObject(bool setPrototypeOnExpose) @@ -2304,12 +2454,12 @@ public bool SetPrototype(ScriptEngine engine) { var entry = map.GetOrCreateValue(engine); - if (entry.Prototype == null) + if (entry.Prototype is null) { entry.Prototype = this.ToRestrictedHostObject(engine); } - if (entry.ProxyHolder == null) + if (entry.ProxyHolder is null) { engine.Script.Object.setPrototypeOf(this, entry.Prototype); entry.ProxyHolder = engine.Script.Object.create(this); @@ -2366,7 +2516,7 @@ public string Format(int a, int b = 456, params int[] args) public class DefaultArgsTestObject { - private readonly Dictionary map = new Dictionary(); + private readonly Dictionary map = new(); public DefaultArgsTestObject(int arg1 = 123, string arg2 = "foo") { @@ -2385,21 +2535,7 @@ public DefaultArgsTestObject(int arg1 = 123, string arg2 = "foo") [DefaultScriptUsage(ScriptAccess.Full)] public class DefaultScriptAccessOverrideTestObject { - public List Values { get; set; } = new List { 123, 456, 789 }; - } - - private void TestV8ScriptItemResurrection() - { - for (var index = 0; index < 256; index++) - { - // ReSharper disable UnusedVariable - - var tempEngine = new V8ScriptEngine(); - var wrapper = new ResurrectionTestWrapper(tempEngine.Script.Math); - GC.Collect(); - - // ReSharper restore UnusedVariable - } + public List Values { get; set; } = new() { 123, 456, 789 }; } #if NET6_0_OR_GREATER diff --git a/ClearScriptTest/DynamicTestObject.cs b/ClearScriptTest/DynamicTestObject.cs index 1804a045c..0ed1e7ecd 100644 --- a/ClearScriptTest/DynamicTestObject.cs +++ b/ClearScriptTest/DynamicTestObject.cs @@ -12,8 +12,8 @@ namespace Microsoft.ClearScript.Test [SuppressMessage("ReSharper", "StringLiteralTypo", Justification = "Typos in test code are acceptable.")] public sealed class DynamicTestObject : DynamicObject { - private readonly Dictionary memberMap = new Dictionary(); - private readonly Dictionary indexMap = new Dictionary(); + private readonly Dictionary memberMap = new(); + private readonly Dictionary indexMap = new(); public int SomeField = 12345; diff --git a/ClearScriptTest/ExtensionsTest.NetStandard.cs b/ClearScriptTest/ExtensionsTest.NetStandard.cs deleted file mode 100644 index e37ff5ac3..000000000 --- a/ClearScriptTest/ExtensionsTest.NetStandard.cs +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Collections.Generic; -using System.Collections; -using System.Threading.Tasks; -using Microsoft.ClearScript.JavaScript; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace Microsoft.ClearScript.Test -{ - public partial class ExtensionsTest - { - #region test methods - - // ReSharper disable InconsistentNaming - - [TestMethod, TestCategory("Extensions")] - public void Extension_JavaScript_ToAsyncEnumerable_Generator() - { - engine.Execute("foo = (function* () { yield 'This'; yield 'is'; yield 'not'; yield 'a'; yield 'drill!'; })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - } - - [TestMethod, TestCategory("Extensions")] - public void Extension_JavaScript_ToAsyncEnumerable_AsyncGenerator() - { - engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); - engine.Execute("foo = (async function* () { await delay(1), yield 'This'; await delay(1), yield 'is'; await delay(1), yield 'not'; await delay(1), yield 'a'; await delay(1), yield 'drill!'; })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - } - - [TestMethod, TestCategory("Extensions")] - public void Extension_JavaScript_ToAsyncEnumerable_GenericObject() - { - engine.Execute("foo = { 'This': 1, 'is': 2, 'not': 3, 'a': 4, 'drill!': 5 }"); - TestUtil.AssertException(() => string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - - engine.Execute("foo[Symbol.iterator] = function* () { for (const item of Object.keys(foo)) yield item; }"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - - engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); - engine.Execute("foo[Symbol.asyncIterator] = async function* () { for (const item of Object.keys(foo)) { await delay(1); yield item; } }"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - } - - [TestMethod, TestCategory("Extensions")] - public void Extension_JavaScript_ToAsyncEnumerable_Array() - { - engine.Execute("foo = [ 'This', 'is', 'not', 'a', 'drill!' ]"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - } - - [TestMethod, TestCategory("Extensions")] - public void Extension_JavaScript_ToAsyncEnumerable_Managed_Object() - { - engine.Global["bar"] = new PropertyBag { { "This", 1 }, { "is", 2 }, { "not", 3 }, { "a", 4 }, { "drill!", 5 } }; - TestUtil.AssertException(() => string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); - - engine.Execute("foo = (function* () { for (const item of Object.keys(bar)) yield item; })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - - engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); - engine.Execute("foo = (async function* () { for (const item of Object.keys(bar)) { await delay(1); yield item; } })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - } - - [TestMethod, TestCategory("Extensions")] - public void Extension_JavaScript_ToAsyncEnumerable_Managed_Array() - { - engine.Global["bar"] = new[] { "This", "is", "not", "a", "drill!" }; - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); - - engine.Global["bar"] = new object[] { "This", "is", "not", "a", "drill!" }; - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); - - engine.Execute("foo = (function* () { for (const item of bar) yield item; })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - - engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); - engine.Execute("foo = (async function* () { for (const item of bar) { await delay(1); yield item; } })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - } - - [TestMethod, TestCategory("Extensions")] - public void Extension_JavaScript_ToAsyncEnumerable_Managed_List() - { - engine.Global["bar"] = new List { "This", "is", "not", "a", "drill!" }; - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); - - engine.Global["bar"] = new List { "This", "is", "not", "a", "drill!" }; - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); - - engine.Execute("foo = (function* () { for (const item of bar) yield item; })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - - engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); - engine.Execute("foo = (async function* () { for (const item of bar) { await delay(1); yield item; } })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - } - - [TestMethod, TestCategory("Extensions")] - public void Extension_JavaScript_ToAsyncEnumerable_Managed_ArrayList() - { - engine.Global["bar"] = new ArrayList { "This", "is", "not", "a", "drill!" }; - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); - - engine.Execute("foo = (function* () { for (const item of bar) yield item; })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - - engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); - engine.Execute("foo = (async function* () { for (const item of bar) { await delay(1); yield item; } })()"); - Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); - } - - // ReSharper restore InconsistentNaming - - #endregion - - #region miscellaneous - - private static IEnumerable IterateAsyncEnumerable(IAsyncEnumerable asyncEnumerable) - { - var asyncEnumerator = asyncEnumerable.GetAsyncEnumerator(); - while (asyncEnumerator.MoveNextAsync().AsTask().Result) - { - yield return asyncEnumerator.Current; - } - - asyncEnumerator.DisposeAsync().AsTask().Wait(); - } - - #endregion - } -} diff --git a/ClearScriptTest/ExtensionsTest.cs b/ClearScriptTest/ExtensionsTest.cs index 2a33d9d05..3297cc8d6 100644 --- a/ClearScriptTest/ExtensionsTest.cs +++ b/ClearScriptTest/ExtensionsTest.cs @@ -233,6 +233,104 @@ public void Extension_JavaScript_ToEnumerable_Managed_ArrayList() Assert.AreEqual("This is not a drill!", string.Join(" ", engine.Global["foo"].ToEnumerable())); } + [TestMethod, TestCategory("Extensions")] + public void Extension_JavaScript_ToAsyncEnumerable_Generator() + { + engine.Execute("foo = (function* () { yield 'This'; yield 'is'; yield 'not'; yield 'a'; yield 'drill!'; })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + } + + [TestMethod, TestCategory("Extensions")] + public void Extension_JavaScript_ToAsyncEnumerable_AsyncGenerator() + { + engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); + engine.Execute("foo = (async function* () { await delay(1), yield 'This'; await delay(1), yield 'is'; await delay(1), yield 'not'; await delay(1), yield 'a'; await delay(1), yield 'drill!'; })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + } + + [TestMethod, TestCategory("Extensions")] + public void Extension_JavaScript_ToAsyncEnumerable_GenericObject() + { + engine.Execute("foo = { 'This': 1, 'is': 2, 'not': 3, 'a': 4, 'drill!': 5 }"); + TestUtil.AssertException(() => string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + + engine.Execute("foo[Symbol.iterator] = function* () { for (const item of Object.keys(foo)) yield item; }"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + + engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); + engine.Execute("foo[Symbol.asyncIterator] = async function* () { for (const item of Object.keys(foo)) { await delay(1); yield item; } }"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + } + + [TestMethod, TestCategory("Extensions")] + public void Extension_JavaScript_ToAsyncEnumerable_Array() + { + engine.Execute("foo = [ 'This', 'is', 'not', 'a', 'drill!' ]"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + } + + [TestMethod, TestCategory("Extensions")] + public void Extension_JavaScript_ToAsyncEnumerable_Managed_Object() + { + engine.Global["bar"] = new PropertyBag { { "This", 1 }, { "is", 2 }, { "not", 3 }, { "a", 4 }, { "drill!", 5 } }; + TestUtil.AssertException(() => string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); + + engine.Execute("foo = (function* () { for (const item of Object.keys(bar)) yield item; })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + + engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); + engine.Execute("foo = (async function* () { for (const item of Object.keys(bar)) { await delay(1); yield item; } })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + } + + [TestMethod, TestCategory("Extensions")] + public void Extension_JavaScript_ToAsyncEnumerable_Managed_Array() + { + engine.Global["bar"] = new[] { "This", "is", "not", "a", "drill!" }; + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); + + engine.Global["bar"] = new object[] { "This", "is", "not", "a", "drill!" }; + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); + + engine.Execute("foo = (function* () { for (const item of bar) yield item; })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + + engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); + engine.Execute("foo = (async function* () { for (const item of bar) { await delay(1); yield item; } })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + } + + [TestMethod, TestCategory("Extensions")] + public void Extension_JavaScript_ToAsyncEnumerable_Managed_List() + { + engine.Global["bar"] = new List { "This", "is", "not", "a", "drill!" }; + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); + + engine.Global["bar"] = new List { "This", "is", "not", "a", "drill!" }; + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); + + engine.Execute("foo = (function* () { for (const item of bar) yield item; })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + + engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); + engine.Execute("foo = (async function* () { for (const item of bar) { await delay(1); yield item; } })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + } + + [TestMethod, TestCategory("Extensions")] + public void Extension_JavaScript_ToAsyncEnumerable_Managed_ArrayList() + { + engine.Global["bar"] = new ArrayList { "This", "is", "not", "a", "drill!" }; + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["bar"].ToAsyncEnumerable()))); + + engine.Execute("foo = (function* () { for (const item of bar) yield item; })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + + engine.Global["delay"] = new Func(ms => Task.Delay(ms).ToPromise()); + engine.Execute("foo = (async function* () { for (const item of bar) { await delay(1); yield item; } })()"); + Assert.AreEqual("This is not a drill!", string.Join(" ", IterateAsyncEnumerable(engine.Global["foo"].ToAsyncEnumerable()))); + } + // ReSharper restore InconsistentNaming #endregion @@ -251,6 +349,17 @@ private async Task EvaluateAsync(string code) return await engine.Evaluate(code).ToTask(); } + private static IEnumerable IterateAsyncEnumerable(IAsyncEnumerable asyncEnumerable) + { + var asyncEnumerator = asyncEnumerable.GetAsyncEnumerator(); + while (asyncEnumerator.MoveNextAsync().AsTask().Result) + { + yield return asyncEnumerator.Current; + } + + asyncEnumerator.DisposeAsync().AsTask().Wait(); + } + #endregion } } diff --git a/ClearScriptTest/HostListTest.cs b/ClearScriptTest/HostListTest.cs index 04a174da0..3b1977cac 100644 --- a/ClearScriptTest/HostListTest.cs +++ b/ClearScriptTest/HostListTest.cs @@ -185,6 +185,7 @@ public class BogusCustomListBase : IBogusCustomList public IEnumerator GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return list.GetEnumerator(); } @@ -251,6 +252,7 @@ public class BogusCustomListBase : IBogusCustomList public IEnumerator GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return list.GetEnumerator(); } @@ -321,6 +323,7 @@ public BogusReadOnlyCustomListBase(params T[] items) public IEnumerator GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return list.GetEnumerator(); } diff --git a/ClearScriptTest/HostTypeCollectionTest.cs b/ClearScriptTest/HostTypeCollectionTest.cs index d86a5b399..0d1cadb65 100644 --- a/ClearScriptTest/HostTypeCollectionTest.cs +++ b/ClearScriptTest/HostTypeCollectionTest.cs @@ -76,7 +76,7 @@ internal static void Test(HostTypeCollection typeCollection, string[] assemblyNa } Assert.IsTrue(allNodes.SequenceEqual(visitedNodes.Values)); - if (filter != null) + if (filter is not null) { Assert.IsTrue(allNodes.All(hostType => hostType.Types.All(type => filter(type)))); } @@ -94,7 +94,7 @@ private static IEnumerable GetLeafNodes(PropertyBag container) foreach (var childNode in container.Values) { var childContainer = childNode as PropertyBag; - if (childContainer == null) + if (childContainer is null) { yield return (HostType)childNode; } diff --git a/ClearScriptTest/JScriptCoreEngineTest.cs b/ClearScriptTest/JScriptCoreEngineTest.cs index 0ee8248b9..9c2552aeb 100644 --- a/ClearScriptTest/JScriptCoreEngineTest.cs +++ b/ClearScriptTest/JScriptCoreEngineTest.cs @@ -691,8 +691,8 @@ public void JScriptCoreEngine_new_GenericNested() public void JScriptCoreEngine_new_Scalar() { engine.AddHostObject("clr", HostItemFlags.GlobalMembers, new HostTypeCollection("mscorlib")); - Assert.AreEqual(default(int), engine.Evaluate("new System.Int32")); - Assert.AreEqual(default(int), engine.Evaluate("new System.Int32()")); + Assert.AreEqual(0, engine.Evaluate("new System.Int32")); + Assert.AreEqual(0, engine.Evaluate("new System.Int32()")); } [TestMethod, TestCategory("JScriptCoreEngine")] @@ -2573,14 +2573,16 @@ public void JScriptCoreEngine_ScriptObject() [TestMethod, TestCategory("JScriptCoreEngine")] public void JScriptCoreEngine_ScriptObject_IDictionary() { + // ReSharper disable UsageOfDefaultStructEquality + var pairs = new List> { - new KeyValuePair("123", 987), - new KeyValuePair("456", 654.321), - new KeyValuePair("abc", 123), - new KeyValuePair("def", 456.789), - new KeyValuePair("ghi", "foo"), - new KeyValuePair("jkl", engine.Evaluate("({ bar: 'baz' })")) + new("123", 987), + new("456", 654.321), + new("abc", 123), + new("def", 456.789), + new("ghi", "foo"), + new("jkl", engine.Evaluate("({ bar: 'baz' })")) }; var dict = (IDictionary)engine.Evaluate("dict = {}"); @@ -2640,6 +2642,8 @@ public void JScriptCoreEngine_ScriptObject_IDictionary() Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("delete dict[789]"))); Assert.IsTrue(pairs.SequenceEqual(dict)); + + // ReSharper restore UsageOfDefaultStructEquality } [TestMethod, TestCategory("JScriptCoreEngine")] @@ -2820,6 +2824,21 @@ public void JScriptCoreEngine_UndefinedImportValue() Assert.AreEqual(123, engine.Evaluate("undefined")); } + [TestMethod, TestCategory("JScriptCoreEngine")] + public void JScriptCoreEngine_NullImportValue() + { + Assert.IsNull(engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("undefined"), typeof(Undefined)); + + engine.NullImportValue = Undefined.Value; + Assert.IsInstanceOfType(engine.Evaluate("null"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("undefined"), typeof(Undefined)); + + engine.NullImportValue = 123; + Assert.AreEqual(123, engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("undefined"), typeof(Undefined)); + } + [TestMethod, TestCategory("JScriptCoreEngine")] public void JScriptCoreEngine_NullExportValue() { diff --git a/ClearScriptTest/JScriptCoreModuleTest.cs b/ClearScriptTest/JScriptCoreModuleTest.cs index 6c6d87255..1107c204b 100644 --- a/ClearScriptTest/JScriptCoreModuleTest.cs +++ b/ClearScriptTest/JScriptCoreModuleTest.cs @@ -452,7 +452,7 @@ public override Task LoadDocumentAsync(DocumentSettings settings, Docu private static IDictionary CreateDocumentContext(DocumentInfo info) { - if (info.Uri != null) + if (info.Uri is not null) { var name = Path.GetFileName(info.Uri.AbsolutePath); diff --git a/ClearScriptTest/JScriptEngineTest.cs b/ClearScriptTest/JScriptEngineTest.cs index 5039f45a3..70d7784b1 100644 --- a/ClearScriptTest/JScriptEngineTest.cs +++ b/ClearScriptTest/JScriptEngineTest.cs @@ -690,8 +690,8 @@ public void JScriptEngine_new_GenericNested() public void JScriptEngine_new_Scalar() { engine.AddHostObject("clr", HostItemFlags.GlobalMembers, new HostTypeCollection("mscorlib")); - Assert.AreEqual(default(int), engine.Evaluate("new System.Int32")); - Assert.AreEqual(default(int), engine.Evaluate("new System.Int32()")); + Assert.AreEqual(0, engine.Evaluate("new System.Int32")); + Assert.AreEqual(0, engine.Evaluate("new System.Int32()")); } [TestMethod, TestCategory("JScriptEngine")] @@ -2633,14 +2633,16 @@ public void JScriptEngine_ScriptObject() [TestMethod, TestCategory("JScriptEngine")] public void JScriptEngine_ScriptObject_IDictionary() { + // ReSharper disable UsageOfDefaultStructEquality + var pairs = new List> { - new KeyValuePair("123", 987), - new KeyValuePair("456", 654.321), - new KeyValuePair("abc", 123), - new KeyValuePair("def", 456.789), - new KeyValuePair("ghi", "foo"), - new KeyValuePair("jkl", engine.Evaluate("({ bar: 'baz' })")) + new("123", 987), + new("456", 654.321), + new("abc", 123), + new("def", 456.789), + new("ghi", "foo"), + new("jkl", engine.Evaluate("({ bar: 'baz' })")) }; var dict = (IDictionary)engine.Evaluate("dict = {}"); @@ -2700,6 +2702,8 @@ public void JScriptEngine_ScriptObject_IDictionary() Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("delete dict[789]"))); Assert.IsTrue(pairs.SequenceEqual(dict)); + + // ReSharper restore UsageOfDefaultStructEquality } [TestMethod, TestCategory("JScriptEngine")] @@ -2880,6 +2884,21 @@ public void JScriptEngine_UndefinedImportValue() Assert.AreEqual(123, engine.Evaluate("undefined")); } + [TestMethod, TestCategory("JScriptEngine")] + public void JScriptEngine_NullImportValue() + { + Assert.IsNull(engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("undefined"), typeof(Undefined)); + + engine.NullImportValue = Undefined.Value; + Assert.IsInstanceOfType(engine.Evaluate("null"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("undefined"), typeof(Undefined)); + + engine.NullImportValue = 123; + Assert.AreEqual(123, engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("undefined"), typeof(Undefined)); + } + [TestMethod, TestCategory("JScriptEngine")] public void JScriptEngine_NullExportValue() { diff --git a/ClearScriptTest/JScriptModuleTest.cs b/ClearScriptTest/JScriptModuleTest.cs index cd090bec8..eeffd7e85 100644 --- a/ClearScriptTest/JScriptModuleTest.cs +++ b/ClearScriptTest/JScriptModuleTest.cs @@ -452,7 +452,7 @@ public override Task LoadDocumentAsync(DocumentSettings settings, Docu private static IDictionary CreateDocumentContext(DocumentInfo info) { - if (info.Uri != null) + if (info.Uri is not null) { var name = Path.GetFileName(info.Uri.AbsolutePath); diff --git a/ClearScriptTest/JavaScript/StandardModule/Module.js b/ClearScriptTest/JavaScript/StandardModule/Module.js index 91e83f18a..82cfb2fad 100644 --- a/ClearScriptTest/JavaScript/StandardModule/Module.js +++ b/ClearScriptTest/JavaScript/StandardModule/Module.js @@ -3,4 +3,4 @@ import * as Geometry from 'Geometry/Geometry.js'; -new Geometry.Square(25).Area; +import.meta.setResult(new Geometry.Square(25).Area); diff --git a/ClearScriptTest/JavaScript/StandardModule/ModuleWithSideEffects.js b/ClearScriptTest/JavaScript/StandardModule/ModuleWithSideEffects.js index 3a6682e4d..d5d4537ac 100644 --- a/ClearScriptTest/JavaScript/StandardModule/ModuleWithSideEffects.js +++ b/ClearScriptTest/JavaScript/StandardModule/ModuleWithSideEffects.js @@ -5,4 +5,4 @@ import * as Geometry from 'Geometry/Geometry.js'; foo.bar = new Geometry.Square(25).Area; -foo.bar; +import.meta.setResult(foo.bar); diff --git a/ClearScriptTest/Misc.cs b/ClearScriptTest/Misc.cs index 76be398bc..4737ff855 100644 --- a/ClearScriptTest/Misc.cs +++ b/ClearScriptTest/Misc.cs @@ -68,8 +68,8 @@ public Random Method(Random arg) public class DefaultPropertyTestObject { - private readonly Dictionary byName = new Dictionary(); - private readonly Dictionary byDay = new Dictionary(); + private readonly Dictionary byName = new(); + private readonly Dictionary byDay = new(); public object this[string name] { @@ -89,7 +89,7 @@ public object this[DayOfWeek day] public class DefaultPropertyTestContainer { - public readonly DefaultPropertyTestObject Field = new DefaultPropertyTestObject(); + public readonly DefaultPropertyTestObject Field = new(); public DefaultPropertyTestObject Property => Field; @@ -134,7 +134,7 @@ public static double CalcTestValue(Guid callerGuid, params object[] args) return hashCode * Math.E / Math.PI; } - public static void AssertException(Action action, bool checkScriptStackTrace = true) where T : Exception + public static void AssertException(Action action, bool checkScriptStackTrace = true) where TException : Exception { Exception caughtException = null; var gotExpectedException = false; @@ -143,7 +143,7 @@ public static void AssertException(Action action, bool checkScriptStackTrace { action(); } - catch (T exception) + catch (TException exception) { caughtException = exception; gotExpectedException = true; @@ -152,12 +152,12 @@ public static void AssertException(Action action, bool checkScriptStackTrace catch (Exception exception) { caughtException = exception; - gotExpectedException = exception.GetBaseException() is T; + gotExpectedException = exception.GetBaseException() is TException; AssertValidExceptionChain(exception, checkScriptStackTrace); } - var message = "Expected " + typeof(T).Name + " was not thrown."; - if (caughtException != null) + var message = "Expected " + typeof(TException).Name + " was not thrown."; + if (caughtException is not null) { message += " " + caughtException.GetType().Name + " was thrown instead."; } @@ -165,7 +165,75 @@ public static void AssertException(Action action, bool checkScriptStackTrace Assert.IsTrue(gotExpectedException, message); } - public static void AssertException(Action action, bool checkScriptStackTrace = true) where T1 : Exception where T2 : Exception + public static void AssertException(Action action, in TArg arg, bool checkScriptStackTrace = true) where TException : Exception + { + Exception caughtException = null; + var gotExpectedException = false; + + try + { + action(arg); + } + catch (TException exception) + { + caughtException = exception; + gotExpectedException = true; + AssertValidExceptionChain(exception, checkScriptStackTrace); + } + catch (Exception exception) + { + caughtException = exception; + gotExpectedException = exception.GetBaseException() is TException; + AssertValidExceptionChain(exception, checkScriptStackTrace); + } + + var message = "Expected " + typeof(TException).Name + " was not thrown."; + if (caughtException is not null) + { + message += " " + caughtException.GetType().Name + " was thrown instead."; + } + + Assert.IsTrue(gotExpectedException, message); + } + + public static void AssertException(Action action, in TArg arg, bool checkScriptStackTrace = true) where TException1 : Exception where TException2 : Exception + { + Exception caughtException = null; + var gotExpectedException = false; + + try + { + action(arg); + } + catch (TException1 exception) + { + caughtException = exception; + gotExpectedException = true; + AssertValidExceptionChain(exception, checkScriptStackTrace); + } + catch (TException2 exception) + { + caughtException = exception; + gotExpectedException = true; + AssertValidExceptionChain(exception, checkScriptStackTrace); + } + catch (Exception exception) + { + caughtException = exception; + gotExpectedException = (exception.GetBaseException() is TException1) || (exception.GetBaseException() is TException2); + AssertValidExceptionChain(exception, checkScriptStackTrace); + } + + var message = "Expected " + typeof(TException1).Name + " or " + typeof(TException2).Name + " was not thrown."; + if (caughtException is not null) + { + message += " " + caughtException.GetType().Name + " was thrown instead."; + } + + Assert.IsTrue(gotExpectedException, message); + } + + public static void AssertException(Action action, bool checkScriptStackTrace = true) where TException1 : Exception where TException2 : Exception { Exception caughtException = null; var gotExpectedException = false; @@ -174,13 +242,13 @@ public static void AssertException(Action action, bool checkScriptStackT { action(); } - catch (T1 exception) + catch (TException1 exception) { caughtException = exception; gotExpectedException = true; AssertValidExceptionChain(exception, checkScriptStackTrace); } - catch (T2 exception) + catch (TException2 exception) { caughtException = exception; gotExpectedException = true; @@ -189,12 +257,12 @@ public static void AssertException(Action action, bool checkScriptStackT catch (Exception exception) { caughtException = exception; - gotExpectedException = (exception.GetBaseException() is T1) || (exception.GetBaseException() is T2); + gotExpectedException = (exception.GetBaseException() is TException1) || (exception.GetBaseException() is TException2); AssertValidExceptionChain(exception, checkScriptStackTrace); } - var message = "Expected " + typeof(T1).Name + " or " + typeof(T2).Name + " was not thrown."; - if (caughtException != null) + var message = "Expected " + typeof(TException1).Name + " or " + typeof(TException2).Name + " was not thrown."; + if (caughtException is not null) { message += " " + caughtException.GetType().Name + " was thrown instead."; } @@ -213,7 +281,7 @@ public static void AssertValidException(Exception exception) Assert.IsFalse(string.IsNullOrWhiteSpace(exception.StackTrace)); Assert.IsFalse(exception.Message.Contains("COM")); - if (!(exception is IOException)) + if (exception is not IOException) { Assert.IsFalse(exception.Message.Contains("HRESULT")); Assert.IsFalse(exception.Message.Contains("0x")); @@ -241,7 +309,7 @@ public static void AssertValidException(ScriptEngine engine, IScriptEngineExcept private static void AssertValidExceptionChain(Exception exception, bool checkScriptStackTrace) { - while (exception != null) + while (exception is not null) { if (exception is IScriptEngineException scriptError) { @@ -261,7 +329,7 @@ public static string GetCOMObjectTypeName(object obj) if (obj is IDispatch dispatch) { var typeInfo = dispatch.GetTypeInfo(); - if (typeInfo != null) + if (typeInfo is not null) { return typeInfo.GetName(); } @@ -270,4 +338,18 @@ public static string GetCOMObjectTypeName(object obj) return null; } } + + public static class TestUtil where TException : Exception + { + public static void AssertException(Action action, bool checkScriptStackTrace = true) => TestUtil.AssertException(action, checkScriptStackTrace); + + public static void AssertException(Action action, in TArg arg, bool checkScriptStackTrace = true) => TestUtil.AssertException(action, arg, checkScriptStackTrace); + } + + public static class TestUtil where TException1 : Exception where TException2 : Exception + { + public static void AssertException(Action action, bool checkScriptStackTrace = true) => TestUtil.AssertException(action, checkScriptStackTrace); + + public static void AssertException(Action action, in TArg arg, bool checkScriptStackTrace = true) => TestUtil.AssertException(action, arg, checkScriptStackTrace); + } } diff --git a/ClearScriptTest/Properties/AssemblyInfo.cs b/ClearScriptTest/Properties/AssemblyInfo.cs index 25b34ba5f..c21b2fa4e 100644 --- a/ClearScriptTest/Properties/AssemblyInfo.cs +++ b/ClearScriptTest/Properties/AssemblyInfo.cs @@ -11,6 +11,6 @@ [assembly: AssemblyCopyright("(c) Microsoft Corporation")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("7.4.5")] -[assembly: AssemblyFileVersion("7.4.5")] -[assembly: AssemblyInformationalVersion("7.4.5")] +[assembly: AssemblyVersion("7.5.0")] +[assembly: AssemblyFileVersion("7.5.0")] +[assembly: AssemblyInformationalVersion("7.5.0")] diff --git a/ClearScriptTest/PropertyBagTest.Windows.cs b/ClearScriptTest/PropertyBagTest.Windows.cs index 086b98ba8..7fab400fe 100644 --- a/ClearScriptTest/PropertyBagTest.Windows.cs +++ b/ClearScriptTest/PropertyBagTest.Windows.cs @@ -151,7 +151,7 @@ public void PropertyBag_MultiEngine_Parallel() // ReSharper restore AccessToDisposedClosure }; - var threads = Enumerable.Range(0, threadCount).Select(index => new Thread(body)).ToArray(); + var threads = Enumerable.Range(0, threadCount).Select(_ => new Thread(body)).ToArray(); threads.ForEach((thread, index) => thread.Start(index)); startEvent.Set(); @@ -215,7 +215,7 @@ public void PropertyBag_Concurrent_JScript() // ReSharper restore AccessToDisposedClosure }; - var threads = Enumerable.Range(0, threadCount).Select(index => new Thread(body)).ToArray(); + var threads = Enumerable.Range(0, threadCount).Select(_ => new Thread(body)).ToArray(); threads.ForEach((thread, index) => thread.Start(index)); startEvent.Set(); diff --git a/ClearScriptTest/PropertyBagTest.cs b/ClearScriptTest/PropertyBagTest.cs index 2ae08adbf..d90ba2eaf 100644 --- a/ClearScriptTest/PropertyBagTest.cs +++ b/ClearScriptTest/PropertyBagTest.cs @@ -249,7 +249,7 @@ public void PropertyBag_Concurrent() // ReSharper restore AccessToDisposedClosure }; - var threads = Enumerable.Range(0, threadCount).Select(index => new Thread(body)).ToArray(); + var threads = Enumerable.Range(0, threadCount).Select(_ => new Thread(body)).ToArray(); threads.ForEach((thread, index) => thread.Start(index)); startEvent.Set(); diff --git a/ClearScriptTest/ScriptAccessTest.cs b/ClearScriptTest/ScriptAccessTest.cs index df10732b4..b3c47749a 100644 --- a/ClearScriptTest/ScriptAccessTest.cs +++ b/ClearScriptTest/ScriptAccessTest.cs @@ -535,7 +535,7 @@ private void AssertMemberInternal(string objectName, string memberName, string s Assert.IsNotNull(target); var eventInfo = member as EventInfo; - if (eventInfo != null) + if (eventInfo is not null) { var eventSource = engine.Evaluate(objectName + "." + scriptMemberName) as EventSource; Assert.IsNotNull(eventSource); @@ -545,21 +545,21 @@ private void AssertMemberInternal(string objectName, string memberName, string s } field = member as FieldInfo; - if (field != null) + if (field is not null) { Assert.AreEqual(field.GetValue(target), engine.Evaluate(objectName + "." + scriptMemberName)); return; } var property = member as PropertyInfo; - if (property != null) + if (property is not null) { Assert.AreEqual(property.GetValue(target, ArrayHelpers.GetEmptyArray()), engine.Evaluate(objectName + "." + scriptMemberName)); return; } var method = member as MethodInfo; - if (method != null) + if (method is not null) { switch (method.GetParameters().Length) { diff --git a/ClearScriptTest/TestEnumerable.NetStandard.cs b/ClearScriptTest/TestEnumerable.NetStandard.cs deleted file mode 100644 index a735db6cf..000000000 --- a/ClearScriptTest/TestEnumerable.NetStandard.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; - -namespace Microsoft.ClearScript.Test -{ - public static partial class TestEnumerable - { - public static IAsyncEnumerable CreateAsync(params T[] items) - { - return CreateInternal(items); - } - - private partial class TestEnumerableImpl : IAsyncEnumerable - { - IAsyncEnumerator IAsyncEnumerable.GetAsyncEnumerator(CancellationToken cancellationToken) - { - return new Enumerator(this); - } - - private partial class Enumerator : IAsyncEnumerator - { - T IAsyncEnumerator.Current => ((IEnumerator)this).Current; - - ValueTask IAsyncEnumerator.MoveNextAsync() - { - return new ValueTask(((IEnumerator)this).MoveNext()); - } - - ValueTask IAsyncDisposable.DisposeAsync() - { - ((IDisposable)this).Dispose(); - return default; - } - } - } - } -} diff --git a/ClearScriptTest/TestEnumerable.cs b/ClearScriptTest/TestEnumerable.cs index 2d2e8b675..76e222353 100644 --- a/ClearScriptTest/TestEnumerable.cs +++ b/ClearScriptTest/TestEnumerable.cs @@ -1,10 +1,11 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; using System.Collections; using System.Collections.Generic; using System.Threading; +using System.Threading.Tasks; namespace Microsoft.ClearScript.Test { @@ -26,19 +27,22 @@ public static IEnumerable Create(params T[] items) return CreateGeneric(items); } + public static IAsyncEnumerable CreateAsync(params T[] items) + { + return CreateInternal(items); + } + private static TestEnumerableImpl CreateInternal(T[] items) { return new TestEnumerableImpl(items); } // ReSharper disable once PartialTypeWithSinglePart - private partial class TestEnumerableImpl : IEnumerable, IDisposableEnumeratorFactory + private partial class TestEnumerableImpl : IEnumerable, IAsyncEnumerable, IDisposableEnumeratorFactory { private readonly T[] items; private int disposedEnumeratorCount; - int IDisposableEnumeratorFactory.DisposedEnumeratorCount => disposedEnumeratorCount; - public TestEnumerableImpl(T[] items) { this.items = items; @@ -51,11 +55,19 @@ IEnumerator IEnumerable.GetEnumerator() IEnumerator IEnumerable.GetEnumerator() { + // ReSharper disable once NotDisposedResourceIsReturned return ((IEnumerable)this).GetEnumerator(); } + IAsyncEnumerator IAsyncEnumerable.GetAsyncEnumerator(CancellationToken cancellationToken) + { + return new Enumerator(this); + } + + int IDisposableEnumeratorFactory.DisposedEnumeratorCount => disposedEnumeratorCount; + // ReSharper disable once PartialTypeWithSinglePart - private partial class Enumerator : IEnumerator + private partial class Enumerator : IEnumerator, IAsyncEnumerator { private readonly TestEnumerableImpl enumerable; private int index = -1; @@ -83,6 +95,19 @@ void IDisposable.Dispose() { Interlocked.Increment(ref enumerable.disposedEnumeratorCount); } + + T IAsyncEnumerator.Current => ((IEnumerator)this).Current; + + ValueTask IAsyncEnumerator.MoveNextAsync() + { + return new ValueTask(((IEnumerator)this).MoveNext()); + } + + ValueTask IAsyncDisposable.DisposeAsync() + { + ((IDisposable)this).Dispose(); + return default; + } } } } diff --git a/ClearScriptTest/TestObject.cs b/ClearScriptTest/TestObject.cs index be8673c0c..ddd7d4833 100644 --- a/ClearScriptTest/TestObject.cs +++ b/ClearScriptTest/TestObject.cs @@ -47,7 +47,7 @@ public double BindTestMethod(T arg) return TestUtil.CalcTestValue(new Guid("06407870-c4dc-40f8-95ec-8d743c77c8b2"), this, typeof(T), arg); } - private readonly Dictionary dict = new Dictionary(); + private readonly Dictionary dict = new(); public object this[string key] { diff --git a/ClearScriptTest/TypeRestrictionTest.cs b/ClearScriptTest/TypeRestrictionTest.cs index 224fd7580..c5da7bff7 100644 --- a/ClearScriptTest/TypeRestrictionTest.cs +++ b/ClearScriptTest/TypeRestrictionTest.cs @@ -90,7 +90,7 @@ public class TestContainer public const int ObjectTestValue = 123456; public const string InterfaceTestValue = "fooBARbazQUX"; - public TestObject Field = new TestObject(); + public TestObject Field = new(); public ITestInterface InterfaceField = new TestObject(); public object ObjectField = new TestObject(); [ScriptMember(ScriptMemberFlags.ExposeRuntimeType)] public ITestInterface UnrestrictedField = new TestObject(); diff --git a/ClearScriptTest/V8ArrayBufferOrViewTest.cs b/ClearScriptTest/V8ArrayBufferOrViewTest.cs index 1f12cd4c8..001efa587 100644 --- a/ClearScriptTest/V8ArrayBufferOrViewTest.cs +++ b/ClearScriptTest/V8ArrayBufferOrViewTest.cs @@ -138,6 +138,48 @@ public void V8ArrayBufferOrView_ArrayBuffer_WriteBytes() TestUtil.AssertException(() => ((IArrayBuffer)engine.Script.typedArray.buffer).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_ArrayBuffer_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new Uint8Array(new ArrayBuffer(1024)); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => unchecked((byte)index)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((IArrayBuffer)engine.Script.typedArray.buffer).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((IArrayBuffer)engine.Script.typedArray.buffer).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((IArrayBuffer)engine.Script.typedArray.buffer).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_ArrayBuffer_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => unchecked((byte)index)).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint8Array(new ArrayBuffer(1024))"); + Assert.AreEqual(256UL, ((IArrayBuffer)engine.Script.typedArray.buffer).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((IArrayBuffer)engine.Script.typedArray.buffer).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((IArrayBuffer)engine.Script.typedArray.buffer).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((IArrayBuffer)engine.Script.typedArray.buffer).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_DataView() { @@ -232,6 +274,48 @@ public void V8ArrayBufferOrView_DataView_WriteBytes() TestUtil.AssertException(() => ((IDataView)engine.Script.dataView).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_DataView_ReadBytes_Span() + { + engine.Execute(@" + dataView = new DataView(new ArrayBuffer(1024)); + for (var i = 0; i < 1024; i++) { + dataView.setUint8(i, i); + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => unchecked((byte)index)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((IDataView)engine.Script.dataView).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((IDataView)engine.Script.dataView).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((IDataView)engine.Script.dataView).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_DataView_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => unchecked((byte)index)).ToArray().AsSpan(); + + engine.Execute("dataView = new DataView(new ArrayBuffer(1024))"); + Assert.AreEqual(256UL, ((IDataView)engine.Script.dataView).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((IDataView)engine.Script.dataView).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((IDataView)engine.Script.dataView).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((IDataView)engine.Script.dataView).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Uint8Array() { @@ -327,6 +411,48 @@ public void V8ArrayBufferOrView_Uint8Array_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint8Array_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new Uint8Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => unchecked((byte)index)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint8Array_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => unchecked((byte)index)).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint8Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Uint8Array_ToArray() { @@ -398,6 +524,48 @@ public void V8ArrayBufferOrView_Uint8Array_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint8Array_Read_Span() + { + engine.Execute(@" + typedArray = new Uint8Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => unchecked((byte)index)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint8Array_Write_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => unchecked((byte)index)).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint8Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Uint8ClampedArray() { @@ -493,6 +661,48 @@ public void V8ArrayBufferOrView_Uint8ClampedArray_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint8ClampedArray_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new Uint8ClampedArray(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => (byte)(Math.Min(index, 255))).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint8ClampedArray_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => (byte)(Math.Min(index, 255))).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint8ClampedArray(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Uint8ClampedArray_ToArray() { @@ -564,6 +774,48 @@ public void V8ArrayBufferOrView_Uint8ClampedArray_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint8ClampedArray_Read_Span() + { + engine.Execute(@" + typedArray = new Uint8ClampedArray(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => (byte)(Math.Min(index, 255))).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint8ClampedArray_Write_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => (byte)(Math.Min(index, 255))).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint8ClampedArray(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Int8Array() { @@ -659,6 +911,48 @@ public void V8ArrayBufferOrView_Int8Array_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int8Array_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new Int8Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => unchecked((byte)(index - 512))).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int8Array_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => (byte)(Math.Min(index, 255))).ToArray().AsSpan(); + + engine.Execute("typedArray = new Int8Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Int8Array_ToArray() { @@ -730,6 +1024,48 @@ public void V8ArrayBufferOrView_Int8Array_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int8Array_Read_Span() + { + engine.Execute(@" + typedArray = new Int8Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => unchecked((sbyte)(index - 512))).ToArray().AsSpan(); + + var readValues = new sbyte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int8Array_Write_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => unchecked((sbyte)(index - 512))).ToArray().AsSpan(); + + engine.Execute("typedArray = new Int8Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new sbyte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Uint16Array() { @@ -895,7 +1231,7 @@ public void V8ArrayBufferOrView_Uint16Array_WriteBytes() } [TestMethod, TestCategory("V8ArrayBufferOrView")] - public void V8ArrayBufferOrView_Uint16Array_ToArray() + public unsafe void V8ArrayBufferOrView_Uint16Array_ReadBytes_Span() { engine.Execute(@" typedArray = new Uint16Array(new ArrayBuffer(123456), 128, 1024); @@ -905,41 +1241,116 @@ public void V8ArrayBufferOrView_Uint16Array_ToArray() "); { - var testValues = Enumerable.Range(0, 1024).Select(index => (ushort)index).ToArray(); - Assert.IsTrue(testValues.SequenceEqual(((ITypedArray)engine.Script.typedArray).ToArray())); - using (Scope.Create(() => MiscHelpers.Exchange(ref UnmanagedMemoryHelpers.DisableMarshalCopy, true), value => UnmanagedMemoryHelpers.DisableMarshalCopy = value)) + var testValues = Enumerable.Range(0, 1024).SelectMany(index => BitConverter.GetBytes((ushort)index)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) { - Assert.IsTrue(testValues.SequenceEqual(((ITypedArray)engine.Script.typedArray).ToArray())); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); } } { - var testValues = Enumerable.Range(0, 1024).Select(index => (char)index).ToArray(); - Assert.IsTrue(testValues.SequenceEqual(((ITypedArray)engine.Script.typedArray).ToArray())); - using (Scope.Create(() => MiscHelpers.Exchange(ref UnmanagedMemoryHelpers.DisableMarshalCopy, true), value => UnmanagedMemoryHelpers.DisableMarshalCopy = value)) + var testValues = Enumerable.Range(0, 1024).SelectMany(index => BitConverter.GetBytes((char)index)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256).Take(256))); + + fixed (void* pReadValues = readValues) { - Assert.IsTrue(testValues.SequenceEqual(((ITypedArray)engine.Script.typedArray).ToArray())); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); } } } [TestMethod, TestCategory("V8ArrayBufferOrView")] - public void V8ArrayBufferOrView_Uint16Array_Read() + public unsafe void V8ArrayBufferOrView_Uint16Array_WriteBytes_Span() { - engine.Execute(@" - typedArray = new Uint16Array(new ArrayBuffer(123456), 128, 1024); - for (var i = 0; i < 1024; i++) { - typedArray[i] = i; - } - "); - { - var testValues = Enumerable.Range(0, 1024).Select(index => (ushort)index).ToArray(); + var testValues = Enumerable.Range(0, 256).SelectMany(index => BitConverter.GetBytes((ushort)index)).ToArray().AsSpan(); - var readValues = new ushort[512]; - Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); - Assert.IsTrue(testValues.Skip(128).Take(256).SequenceEqual(readValues.Skip(256))); + engine.Execute("typedArray = new Uint16Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); - using (Scope.Create(() => MiscHelpers.Exchange(ref UnmanagedMemoryHelpers.DisableMarshalCopy, true), value => UnmanagedMemoryHelpers.DisableMarshalCopy = value)) + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + { + var testValues = Enumerable.Range(0, 256).SelectMany(index => BitConverter.GetBytes((char)index)).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint16Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public void V8ArrayBufferOrView_Uint16Array_ToArray() + { + engine.Execute(@" + typedArray = new Uint16Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + { + var testValues = Enumerable.Range(0, 1024).Select(index => (ushort)index).ToArray(); + Assert.IsTrue(testValues.SequenceEqual(((ITypedArray)engine.Script.typedArray).ToArray())); + using (Scope.Create(() => MiscHelpers.Exchange(ref UnmanagedMemoryHelpers.DisableMarshalCopy, true), value => UnmanagedMemoryHelpers.DisableMarshalCopy = value)) + { + Assert.IsTrue(testValues.SequenceEqual(((ITypedArray)engine.Script.typedArray).ToArray())); + } + } + { + var testValues = Enumerable.Range(0, 1024).Select(index => (char)index).ToArray(); + Assert.IsTrue(testValues.SequenceEqual(((ITypedArray)engine.Script.typedArray).ToArray())); + using (Scope.Create(() => MiscHelpers.Exchange(ref UnmanagedMemoryHelpers.DisableMarshalCopy, true), value => UnmanagedMemoryHelpers.DisableMarshalCopy = value)) + { + Assert.IsTrue(testValues.SequenceEqual(((ITypedArray)engine.Script.typedArray).ToArray())); + } + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public void V8ArrayBufferOrView_Uint16Array_Read() + { + engine.Execute(@" + typedArray = new Uint16Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + { + var testValues = Enumerable.Range(0, 1024).Select(index => (ushort)index).ToArray(); + + var readValues = new ushort[512]; + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.Skip(128).Take(256).SequenceEqual(readValues.Skip(256))); + + using (Scope.Create(() => MiscHelpers.Exchange(ref UnmanagedMemoryHelpers.DisableMarshalCopy, true), value => UnmanagedMemoryHelpers.DisableMarshalCopy = value)) { readValues = new ushort[512]; Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); @@ -1019,6 +1430,81 @@ public void V8ArrayBufferOrView_Uint16Array_Write() } } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint16Array_Read_Span() + { + engine.Execute(@" + typedArray = new Uint16Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + { + var testValues = Enumerable.Range(0, 1024).Select(index => (ushort)index).ToArray().AsSpan(); + + var readValues = new ushort[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + { + var testValues = Enumerable.Range(0, 1024).Select(index => (char)index).ToArray().AsSpan(); + + var readValues = new char[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint16Array_Write_Span() + { + { + var testValues = Enumerable.Range(0, 512).Select(index => (ushort)index).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint16Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new ushort[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + { + var testValues = Enumerable.Range(0, 512).Select(index => (char)index).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint16Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new char[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Int16Array() { @@ -1114,6 +1600,48 @@ public void V8ArrayBufferOrView_Int16Array_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int16Array_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new Int16Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i - 512; + } + "); + + var testValues = Enumerable.Range(0, 1024).SelectMany(index => BitConverter.GetBytes((short)(index - 512))).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int16Array_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 256).SelectMany(index => BitConverter.GetBytes((short)(index - 512))).ToArray().AsSpan(); + + engine.Execute("typedArray = new Int16Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Int16Array_ToArray() { @@ -1185,6 +1713,48 @@ public void V8ArrayBufferOrView_Int16Array_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int16Array_Read_Span() + { + engine.Execute(@" + typedArray = new Int16Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i - 512; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => (short)(index - 512)).ToArray().AsSpan(); + + var readValues = new short[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int16Array_Write_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => (short)(index - 512)).ToArray().AsSpan(); + + engine.Execute("typedArray = new Int16Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new short[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Uint32Array() { @@ -1280,6 +1850,48 @@ public void V8ArrayBufferOrView_Uint32Array_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint32Array_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new Uint32Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).SelectMany(index => BitConverter.GetBytes((uint)index)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint32Array_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 128).SelectMany(index => BitConverter.GetBytes((uint)index)).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint32Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Uint32Array_ToArray() { @@ -1351,6 +1963,48 @@ public void V8ArrayBufferOrView_Uint32Array_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint32Array_Read_Span() + { + engine.Execute(@" + typedArray = new Uint32Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => (uint)index).ToArray().AsSpan(); + + var readValues = new uint[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Uint32Array_Write_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => (uint)index).ToArray().AsSpan(); + + engine.Execute("typedArray = new Uint32Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new uint[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Int32Array() { @@ -1446,6 +2100,48 @@ public void V8ArrayBufferOrView_Int32Array_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int32Array_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new Int32Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).SelectMany(BitConverter.GetBytes).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int32Array_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 128).SelectMany(BitConverter.GetBytes).ToArray().AsSpan(); + + engine.Execute("typedArray = new Int32Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Int32Array_ToArray() { @@ -1517,6 +2213,48 @@ public void V8ArrayBufferOrView_Int32Array_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int32Array_Read_Span() + { + engine.Execute(@" + typedArray = new Int32Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i; + } + "); + + var testValues = Enumerable.Range(0, 1024).ToArray().AsSpan(); + + var readValues = new int[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Int32Array_Write_Span() + { + var testValues = Enumerable.Range(0, 512).ToArray().AsSpan(); + + engine.Execute("typedArray = new Int32Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new int[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_BigUint64Array() { @@ -1612,6 +2350,48 @@ public void V8ArrayBufferOrView_BigUint64Array_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_BigUint64Array_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new BigUint64Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = BigInt(i); + } + "); + + var testValues = Enumerable.Range(0, 1024).SelectMany(index => BitConverter.GetBytes((ulong)index)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_BigUint64Array_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 64).SelectMany(index => BitConverter.GetBytes((ulong)index)).ToArray().AsSpan(); + + engine.Execute("typedArray = new BigUint64Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_BigUint64Array_ToArray() { @@ -1683,6 +2463,48 @@ public void V8ArrayBufferOrView_BigUint64Array_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_BigUint64Array_Read_Span() + { + engine.Execute(@" + typedArray = new BigUint64Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = BigInt(i); + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => (ulong)index).ToArray().AsSpan(); + + var readValues = new ulong[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_BigUint64Array_Write_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => (ulong)index).ToArray().AsSpan(); + + engine.Execute("typedArray = new BigUint64Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new ulong[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_BigInt64Array() { @@ -1778,6 +2600,48 @@ public void V8ArrayBufferOrView_BigInt64Array_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_BigInt64Array_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new BigInt64Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = BigInt(i); + } + "); + + var testValues = Enumerable.Range(0, 1024).SelectMany(index => BitConverter.GetBytes((long)index)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_BigInt64Array_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 64).SelectMany(index => BitConverter.GetBytes((long)index)).ToArray().AsSpan(); + + engine.Execute("typedArray = new BigInt64Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_BigInt64Array_ToArray() { @@ -1849,6 +2713,48 @@ public void V8ArrayBufferOrView_BigInt64Array_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_BigInt64Array_Read_Span() + { + engine.Execute(@" + typedArray = new BigInt64Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = BigInt(i); + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => (long)index).ToArray().AsSpan(); + + var readValues = new long[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_BigInt64Array_Write_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => (long)index).ToArray().AsSpan(); + + engine.Execute("typedArray = new BigInt64Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new long[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Float32Array() { @@ -1944,6 +2850,48 @@ public void V8ArrayBufferOrView_Float32Array_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Float32Array_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new Float32Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i * Math.PI; + } + "); + + var testValues = Enumerable.Range(0, 1024).SelectMany(index => BitConverter.GetBytes(Convert.ToSingle(index * Math.PI))).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Float32Array_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 128).SelectMany(index => BitConverter.GetBytes(Convert.ToSingle(index * Math.PI))).ToArray().AsSpan(); + + engine.Execute("typedArray = new Float32Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Float32Array_ToArray() { @@ -2015,6 +2963,48 @@ public void V8ArrayBufferOrView_Float32Array_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Float32Array_Read_Span() + { + engine.Execute(@" + typedArray = new Float32Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i * Math.PI; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => Convert.ToSingle(index * Math.PI)).ToArray().AsSpan(); + + var readValues = new float[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Float32Array_Write_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => Convert.ToSingle(index * Math.PI)).ToArray().AsSpan(); + + engine.Execute("typedArray = new Float32Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new float[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Float64Array() { @@ -2110,6 +3100,48 @@ public void V8ArrayBufferOrView_Float64Array_WriteBytes() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Float64Array_ReadBytes_Span() + { + engine.Execute(@" + typedArray = new Float64Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i * Math.PI; + } + "); + + var testValues = Enumerable.Range(0, 1024).SelectMany(index => BitConverter.GetBytes(index * Math.PI)).ToArray().AsSpan(); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).ReadBytes(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Float64Array_WriteBytes_Span() + { + var testValues = Enumerable.Range(0, 64).SelectMany(index => BitConverter.GetBytes(index * Math.PI)).ToArray().AsSpan(); + + engine.Execute("typedArray = new Float64Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).WriteBytes(testValues, 256, 16384, 128)); + + var readValues = new byte[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).ReadBytes(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).WriteBytes(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + [TestMethod, TestCategory("V8ArrayBufferOrView")] public void V8ArrayBufferOrView_Float64Array_ToArray() { @@ -2181,6 +3213,48 @@ public void V8ArrayBufferOrView_Float64Array_Write() TestUtil.AssertException(() => ((ITypedArray)engine.Script.typedArray).Write(testValues, 16384, 512, 0)); } + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Float64Array_Read_Span() + { + engine.Execute(@" + typedArray = new Float64Array(new ArrayBuffer(123456), 128, 1024); + for (var i = 0; i < 1024; i++) { + typedArray[i] = i * Math.PI; + } + "); + + var testValues = Enumerable.Range(0, 1024).Select(index => index * Math.PI).ToArray().AsSpan(); + + var readValues = new double[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(128).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pReadValues = readValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(16384, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 0), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Read(0, 1024, new Span(ctx.pReadValues.ToPointer(), ctx.readValuesLength), 16384), (pReadValues: (IntPtr)pReadValues, readValuesLength: readValues.Length)); + } + } + + [TestMethod, TestCategory("V8ArrayBufferOrView")] + public unsafe void V8ArrayBufferOrView_Float64Array_Write_Span() + { + var testValues = Enumerable.Range(0, 512).Select(index => index * Math.PI).ToArray().AsSpan(); + + engine.Execute("typedArray = new Float64Array(new ArrayBuffer(123456), 128, 1024)"); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Write(testValues, 256, 16384, 128)); + + var readValues = new double[512].AsSpan(); + Assert.AreEqual(256UL, ((ITypedArray)engine.Script.typedArray).Read(128, 16384, readValues, 256)); + Assert.IsTrue(testValues.ToArray().Skip(256).Take(256).SequenceEqual(readValues.ToArray().Skip(256))); + + fixed (void* pTestValues = testValues) + { + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 0, 512, 16384), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + TestUtil.AssertException(ctx => ((ITypedArray)engine.Script.typedArray).Write(new ReadOnlySpan(ctx.pTestValues.ToPointer(), ctx.testValuesLength), 16384, 512, 0), (pTestValues: (IntPtr)pTestValues, testValuesLength: testValues.Length)); + } + } + // ReSharper restore InconsistentNaming #endregion diff --git a/ClearScriptTest/V8FastProxyTest.cs b/ClearScriptTest/V8FastProxyTest.cs new file mode 100644 index 000000000..46145a779 --- /dev/null +++ b/ClearScriptTest/V8FastProxyTest.cs @@ -0,0 +1,2564 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Numerics; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using Microsoft.ClearScript.JavaScript; +using Microsoft.ClearScript.Util; +using Microsoft.ClearScript.V8; +using Microsoft.ClearScript.V8.FastProxy; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Microsoft.ClearScript.Test +{ + [TestClass] + [SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable", Justification = "Test classes use TestCleanupAttribute for deterministic teardown.")] + public class V8FastProxyTest : ClearScriptTest + { + #region setup / teardown + + private V8ScriptEngine engine; + private TestObject testObject; + private FastObject fastObject; + + [TestInitialize] + public void TestInitialize() + { + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging); + PrepareEngine(); + } + + private void PrepareEngine() + { + engine.AddHostType(typeof(Helpers)); + engine.Script.testObject = testObject ?? (testObject = new TestObject()); + engine.Script.fastObject = fastObject ?? (fastObject = new FastObject()); + } + + [TestCleanup] + public void TestCleanup() + { + engine.Dispose(); + BaseTestCleanup(); + } + + #endregion + + #region test methods + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Undefined() + { + testObject.GetProperty = static (in V8FastResult value) => value.SetUndefined(); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === undefined"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(Undefined.Value); + Assert.AreEqual(nameof(Undefined), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === undefined"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(Undefined.Value); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === undefined"))); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Null() + { + testObject.GetProperty = static (in V8FastResult value) => value.SetNull(); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === null"))); + + engine.NullExportValue = 123; + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 123"))); + + engine.NullExportValue = 456; + testObject.GetProperty = static (in V8FastResult value) => value.Set(null); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 456"))); + + engine.EnableNullResultWrapping = true; + testObject.GetProperty = static (in V8FastResult value) => value.Set(null); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.IsNull(engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Boolean() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(true); + Assert.IsTrue((bool)engine.Evaluate("testObject.value === true")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(false); + Assert.IsTrue((bool)engine.Evaluate("testObject.value === false")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(true); + Assert.AreEqual(nameof(Boolean), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.IsTrue((bool)engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(false); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.IsFalse((bool)engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Char() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set('q'); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 'q'.charCodeAt(0)"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set('r'); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 'r'.charCodeAt(0)"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set('s'); + Assert.AreEqual(nameof(Int32), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual((int)'s', engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set('t'); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual('t', engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_SByte() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(sbyte.MaxValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {sbyte.MaxValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(sbyte.MinValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {sbyte.MinValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((sbyte)123); + Assert.AreEqual(nameof(Int32), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(123, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((sbyte)-123); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual((sbyte)-123, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Byte() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(byte.MaxValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {byte.MaxValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(byte.MinValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {byte.MinValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((byte)124); + Assert.AreEqual(nameof(Int32), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(124, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((byte)253); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual((byte)253, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Int16() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(short.MaxValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {short.MaxValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(short.MinValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {short.MinValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((short)1234); + Assert.AreEqual(nameof(Int32), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(1234, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((short)4321); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual((short)4321, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_UInt16() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(ushort.MaxValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {ushort.MaxValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(ushort.MinValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {ushort.MinValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((ushort)2345); + Assert.AreEqual(nameof(Int32), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(2345, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((ushort)5432); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual((ushort)5432, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Int32() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(int.MaxValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {int.MaxValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(int.MinValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {int.MinValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(12345); + Assert.AreEqual(nameof(Int32), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(12345, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(54321); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(54321, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_UInt32() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(uint.MaxValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {uint.MaxValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(uint.MinValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {uint.MinValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(uint.MaxValue - 1); + Assert.AreEqual(nameof(Int64), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual((long)uint.MaxValue - 1, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(65432U); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(65432U, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Int64() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(-MiscHelpers.MaxInt64InDouble); + Assert.AreEqual(nameof(Int64), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(-MiscHelpers.MaxInt64InDouble, engine.Evaluate("testObject.value")); + + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.MarshalUnsafeInt64AsBigInt); + PrepareEngine(); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(MiscHelpers.MaxInt64InDouble); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {MiscHelpers.MaxInt64InDouble}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(-MiscHelpers.MaxInt64InDouble); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {-MiscHelpers.MaxInt64InDouble}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(MiscHelpers.MaxInt64InDouble + 1); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {MiscHelpers.MaxInt64InDouble + 1}n"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(-MiscHelpers.MaxInt64InDouble - 1); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {-MiscHelpers.MaxInt64InDouble - 1}n"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(654321L); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(654321L, engine.Evaluate("testObject.value")); + + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.MarshalAllInt64AsBigInt); + PrepareEngine(); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(12345678L); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 12345678n"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(87654321L); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 87654321n"))); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_UInt64() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set((ulong)MiscHelpers.MaxInt64InDouble); + Assert.AreEqual(nameof(Int64), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(MiscHelpers.MaxInt64InDouble, engine.Evaluate("testObject.value")); + + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.MarshalUnsafeInt64AsBigInt); + PrepareEngine(); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((ulong)MiscHelpers.MaxInt64InDouble); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {MiscHelpers.MaxInt64InDouble}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((ulong)MiscHelpers.MaxInt64InDouble + 1); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {MiscHelpers.MaxInt64InDouble + 1}n"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(765432UL); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(765432UL, engine.Evaluate("testObject.value")); + + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.MarshalAllInt64AsBigInt); + PrepareEngine(); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(12345678UL); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 12345678n"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(87654321UL); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 87654321n"))); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Single() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(float.MaxValue); + Assert.AreEqual((double)float.MaxValue, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(float.MinValue); + Assert.AreEqual((double)float.MinValue, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(123.5F); + Assert.AreEqual(nameof(Single), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(123.5F, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(321.5F); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(321.5F, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Double() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(double.MaxValue); + Assert.AreEqual(double.MaxValue, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(double.MinValue); + Assert.AreEqual(double.MinValue, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(456.789D); + Assert.AreEqual(nameof(Double), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(456.789D, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(987.654D); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(987.654D, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Decimal() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(decimal.MaxValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {decimal.MaxValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(decimal.MinValue); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate($"testObject.value === {decimal.MinValue}"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(456.789M); + Assert.AreEqual(nameof(Double), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(456.789D, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(987.654M); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(987.654M, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_String() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set("bogus"); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 'bogus'"))); + + // ReSharper disable once RedundantCast + testObject.GetProperty = static (in V8FastResult value) => value.Set((string)null); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === null"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set("heinous"); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 'heinous'"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(null); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === null"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set("gnarly"); + Assert.AreEqual(nameof(String), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual("gnarly", engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set("bodacious"); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual("bodacious", engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_CharSpan() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set("bogus".AsSpan()); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 'bogus'"))); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_DateTime() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set(DateTime.MinValue); + Assert.AreEqual(DateTime.MinValue, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(DateTime.MaxValue); + Assert.AreEqual(DateTime.MaxValue, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(new DateTime(2007, 5, 22, 6, 15, 43, DateTimeKind.Utc)); + Assert.AreEqual(nameof(DateTime), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(new DateTime(2007, 5, 22, 6, 15, 43, DateTimeKind.Utc), engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(new DateTime(1968, 6, 4, 17, 23, 48, DateTimeKind.Utc)); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(new DateTime(1968, 6, 4, 17, 23, 48, DateTimeKind.Utc), engine.Evaluate("testObject.value")); + + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableDateTimeConversion); + PrepareEngine(); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(new DateTime(1941, 8, 26, 9, 11, 25, DateTimeKind.Utc)); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value.getTime() === new Date(Date.UTC(1941, 7, 26, 9, 11, 25)).getTime()"))); + Assert.AreEqual(new DateTime(1941, 8, 26, 9, 11, 25, DateTimeKind.Utc), engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(new DateTime(2007, 5, 22, 6, 15, 43, DateTimeKind.Utc)); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value.getTime() === new Date(Date.UTC(2007, 4, 22, 6, 15, 43)).getTime()"))); + Assert.AreEqual(new DateTime(2007, 5, 22, 6, 15, 43, DateTimeKind.Utc), engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(new DateTime(1968, 6, 4, 17, 23, 48, DateTimeKind.Utc)); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual(new DateTime(1968, 6, 4, 17, 23, 48, DateTimeKind.Utc), engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_BigInteger() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set((BigInteger)123); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 123n"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(456); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value === 456n"))); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((BigInteger)789); + Assert.AreEqual(nameof(BigInteger), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual((BigInteger)789, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((BigInteger)987); + Assert.AreEqual(nameof(IComparable), engine.Evaluate("Helpers.GetTypeName(testObject.value)")); + Assert.AreEqual((BigInteger)987, engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_V8Object() + { + { + var testValue = engine.Evaluate("({ foo: 123, bar: 'baz' })"); + testObject.GetProperty = (in V8FastResult value) => value.Set(testValue); + Assert.AreEqual(123, engine.Evaluate("testObject.value.foo")); + Assert.AreEqual("baz", engine.Evaluate("testObject.value.bar")); + + testObject.GetProperty = (in V8FastResult value) => value.Set(null); + Assert.IsNull(engine.Evaluate("testObject.value")); + } + + { + var testValue = (ScriptObject)engine.Evaluate("({ foo: 456, bar: 'qux' })"); + testObject.GetProperty = (in V8FastResult value) => value.Set(testValue); + Assert.AreEqual(456, engine.Evaluate("testObject.value.foo")); + Assert.AreEqual("qux", engine.Evaluate("testObject.value.bar")); + + testObject.GetProperty = (in V8FastResult value) => value.Set(null); + Assert.IsNull(engine.Evaluate("testObject.value")); + } + } + + [TestMethod, TestCategory("V8FastProxy")] + public async Task V8FastProxy_GetProperty_HostObject() + { + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion); + PrepareEngine(); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(new HostFunctions()); + Assert.IsInstanceOfType(engine.Evaluate("testObject.value")); + + testObject.GetProperty = (in V8FastResult value) => value.Set(null); + Assert.IsNull(engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(Task.FromResult(123)); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("testObject.value.constructor.name === 'Promise'"))); + Assert.AreEqual(123, await (Task)engine.Evaluate("testObject.value")); + + testObject.GetProperty = (in V8FastResult value) => value.Set>(null); + Assert.IsNull(engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_Nullable() + { + testObject.GetProperty = static (in V8FastResult value) => value.Set((int?)123); + Assert.AreEqual(123, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set((int?)null); + Assert.IsNull(engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(123); + Assert.AreEqual(123, engine.Evaluate("testObject.value")); + + testObject.GetProperty = static (in V8FastResult value) => value.Set(null); + Assert.IsNull(engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_GetProperty_ResultAlreadySet() + { + testObject.GetProperty = static (in V8FastResult value) => + { + value.Set(123); + value.Set(456); + }; + + TestUtil.AssertException(() => engine.Evaluate("testObject.value")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Undefined() + { + { + (bool Succeeded, Undefined Value) result = (false, null); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsTrue(value.IsTruthy); + Assert.IsFalse(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsTrue(value.TryGet(out IComparable _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + engine.Execute("testObject.value = 123"); + Assert.IsFalse(result.Succeeded); + + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsTruthy); + Assert.IsTrue(value.IsFalsy); + Assert.IsTrue(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + Assert.IsFalse(value.TryGet(out IComparable _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + engine.Execute("testObject.value = undefined"); + Assert.IsTrue(result.Succeeded); + Assert.IsInstanceOfType(result.Value, typeof(Undefined)); + + engine.Script.value = Undefined.Value.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.IsInstanceOfType(result.Value, typeof(Undefined)); + } + + { + (bool Succeeded, object Value) result = (false, null); + engine.UndefinedImportValue = null; + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsTruthy); + Assert.IsTrue(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + result.Succeeded = value.IsNull; + }; + + engine.Execute("testObject.value = undefined"); + Assert.IsTrue(result.Succeeded); + Assert.IsNull(result.Value); + + engine.UndefinedImportValue = 123; + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsTrue(value.IsTruthy); + Assert.IsFalse(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + engine.Execute("testObject.value = undefined"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(123, result.Value); + } + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Null() + { + (bool Succeeded, object Value) result = (false, null); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsTruthy); + Assert.IsTrue(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + result.Succeeded = value.IsNull; + }; + + engine.Execute("testObject.value = null"); + Assert.IsTrue(result.Succeeded); + Assert.IsNull(result.Value); + + { + engine.NullImportValue = Undefined.Value; + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsTruthy); + Assert.IsTrue(value.IsFalsy); + Assert.IsTrue(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + Assert.IsFalse(value.TryGet(out IComparable _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + engine.Execute("testObject.value = null"); + Assert.IsTrue(result.Succeeded); + Assert.IsInstanceOfType(result.Value, typeof(Undefined)); + + engine.NullImportValue = 123; + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsTrue(value.IsTruthy); + Assert.IsFalse(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + engine.Execute("testObject.value = null"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(123, result.Value); + } + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Boolean() + { + (bool Succeeded, bool Value) result = (false, false); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + Assert.IsTrue(value.TryGet(out IComparable _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual(result.Value, value.IsTruthy); + Assert.AreEqual(!result.Value, value.IsFalsy); + } + }; + + engine.Execute("testObject.value = true"); + Assert.IsTrue(result.Succeeded); + Assert.IsTrue(result.Value); + + engine.Script.value = false.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.IsFalse(result.Value); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Char() => V8FastProxy_SetProperty_Integer(char.MinValue, char.MaxValue, static value => value); + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_SByte() => V8FastProxy_SetProperty_Integer(sbyte.MinValue, sbyte.MaxValue, static value => value); + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Byte() => V8FastProxy_SetProperty_Integer(byte.MinValue, byte.MaxValue, static value => value); + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Int16() => V8FastProxy_SetProperty_Integer(short.MinValue, short.MaxValue, static value => value); + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_UInt16() => V8FastProxy_SetProperty_Integer(ushort.MinValue, ushort.MaxValue, static value => value); + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Int32() => V8FastProxy_SetProperty_Integer(int.MinValue, int.MaxValue, static value => value); + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_UInt32() => V8FastProxy_SetProperty_Integer(uint.MinValue, uint.MaxValue, static value => value); + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Int64() + { + (bool Succeeded, long Value) result = (false, 0); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual(result.Value != 0, value.IsTruthy); + Assert.AreEqual(result.Value == 0, value.IsFalsy); + } + }; + + engine.Script.value = 0.5D; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = -MiscHelpers.MaxInt64InDoubleAsDouble - 1000000; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = -MiscHelpers.MaxInt64InDoubleAsDouble; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = MiscHelpers.MaxInt64InDoubleAsDouble; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = MiscHelpers.MaxInt64InDoubleAsDouble + 1000000; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (BigInteger)long.MinValue - 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (BigInteger)long.MinValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MinValue, result.Value); + + engine.Script.value = (BigInteger)long.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MaxValue, result.Value); + + engine.Script.value = (BigInteger)long.MaxValue + 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = long.MinValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MinValue, result.Value); + + engine.Script.value = long.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MaxValue, result.Value); + + engine.Script.value = (-MiscHelpers.MaxInt64InDoubleAsDouble - 1000000).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-MiscHelpers.MaxInt64InDoubleAsDouble).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = MiscHelpers.MaxInt64InDoubleAsDouble.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = (MiscHelpers.MaxInt64InDoubleAsDouble + 1000000).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((decimal)long.MinValue - 1000000).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + // ReSharper disable once RedundantCast + engine.Script.value = ((decimal)long.MinValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MinValue, result.Value); + + // ReSharper disable once RedundantCast + engine.Script.value = ((decimal)long.MaxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MaxValue, result.Value); + + engine.Script.value = ((decimal)long.MaxValue + 1000000).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((BigInteger)long.MinValue - 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((BigInteger)long.MinValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MinValue, result.Value); + + engine.Script.value = ((BigInteger)long.MaxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MaxValue, result.Value); + + engine.Script.value = ((BigInteger)long.MaxValue + 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_UInt64() + { + (bool Succeeded, ulong Value) result = (false, 0); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual(result.Value != 0, value.IsTruthy); + Assert.AreEqual(result.Value == 0, value.IsFalsy); + } + }; + + engine.Script.value = 0.5D; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = -1.0D; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = 0.0D; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MinValue, result.Value); + + engine.Script.value = MiscHelpers.MaxInt64InDoubleAsDouble; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((ulong)MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = MiscHelpers.MaxInt64InDoubleAsDouble + 1000000; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = BigInteger.MinusOne; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = BigInteger.Zero; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MinValue, result.Value); + + engine.Script.value = (BigInteger)ulong.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MaxValue, result.Value); + + engine.Script.value = (BigInteger)ulong.MaxValue + 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = 0UL.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MinValue, result.Value); + + engine.Script.value = ulong.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MaxValue, result.Value); + + engine.Script.value = (-1.0D).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (0.0D).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MinValue, result.Value); + + engine.Script.value = MiscHelpers.MaxInt64InDoubleAsDouble.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((ulong)MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = (MiscHelpers.MaxInt64InDoubleAsDouble + 1000000).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-1.0M).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (0.0M).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MinValue, result.Value); + + // ReSharper disable once RedundantCast + engine.Script.value = ((decimal)ulong.MaxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MaxValue, result.Value); + + engine.Script.value = ((decimal)ulong.MaxValue + 1000000).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((BigInteger)ulong.MinValue - 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((BigInteger)ulong.MinValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MinValue, result.Value); + + engine.Script.value = ((BigInteger)ulong.MaxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MaxValue, result.Value); + + engine.Script.value = ((BigInteger)ulong.MaxValue + 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Single() + { + (bool Succeeded, float Value) result = (false, 0); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual((result.Value != 0) && !float.IsNaN(result.Value), value.IsTruthy); + Assert.AreEqual((result.Value == 0) || float.IsNaN(result.Value), value.IsFalsy); + } + }; + + var bump = 1.0E25D; + + engine.Script.value = float.MinValue - bump; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (double)float.MinValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MinValue, result.Value); + + engine.Script.value = (double)float.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MaxValue, result.Value); + + engine.Script.value = float.MaxValue + bump; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = -(BigInteger)MiscHelpers.MaxInt32InSingle - 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = -(BigInteger)MiscHelpers.MaxInt32InSingle; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt32InSingleAsSingle, result.Value); + + engine.Script.value = (BigInteger)MiscHelpers.MaxInt32InSingle; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt32InSingleAsSingle, result.Value); + + engine.Script.value = (BigInteger)MiscHelpers.MaxInt32InSingle + 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-MiscHelpers.MaxInt32InSingle - 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + // ReSharper disable once RedundantCast + engine.Script.value = ((long)-MiscHelpers.MaxInt32InSingle).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt32InSingleAsSingle, result.Value); + + // ReSharper disable once RedundantCast + engine.Script.value = ((uint)MiscHelpers.MaxInt32InSingle).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt32InSingleAsSingle, result.Value); + + // ReSharper disable once RedundantCast + engine.Script.value = ((ulong)MiscHelpers.MaxInt32InSingle + 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + // ReSharper disable once RedundantCast + engine.Script.value = ((ulong)MiscHelpers.MaxInt32InSingle).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt32InSingleAsSingle, result.Value); + + engine.Script.value = float.MinValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MinValue, result.Value); + + engine.Script.value = float.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MaxValue, result.Value); + + engine.Script.value = decimal.MinValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((float)decimal.MinValue, result.Value); + + engine.Script.value = decimal.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((float)decimal.MaxValue, result.Value); + + engine.Script.value = (float.MinValue - bump).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((double)float.MinValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MinValue, result.Value); + + engine.Script.value = ((double)float.MaxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MaxValue, result.Value); + + engine.Script.value = (float.MaxValue + bump).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-(BigInteger)MiscHelpers.MaxInt32InSingle - 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-(BigInteger)MiscHelpers.MaxInt32InSingle).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt32InSingleAsSingle, result.Value); + + engine.Script.value = ((BigInteger)MiscHelpers.MaxInt32InSingle).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt32InSingleAsSingle, result.Value); + + engine.Script.value = ((BigInteger)MiscHelpers.MaxInt32InSingle + 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Double() + { + (bool Succeeded, double Value) result = (false, 0); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual((result.Value != 0) && !double.IsNaN(result.Value), value.IsTruthy); + Assert.AreEqual((result.Value == 0) || double.IsNaN(result.Value), value.IsFalsy); + } + }; + + var bump = 1.0E25D; + + engine.Script.value = float.MinValue - bump; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MinValue - bump, result.Value); + + engine.Script.value = (double)float.MinValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MinValue, result.Value); + + engine.Script.value = (double)float.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MaxValue, result.Value); + + engine.Script.value = float.MaxValue + bump; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MaxValue + bump, result.Value); + + engine.Script.value = -(BigInteger)MiscHelpers.MaxInt64InDouble - 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = -(BigInteger)MiscHelpers.MaxInt64InDouble; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt64InDoubleAsDouble, result.Value); + + engine.Script.value = (BigInteger)MiscHelpers.MaxInt64InDouble; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt64InDoubleAsDouble, result.Value); + + engine.Script.value = (BigInteger)MiscHelpers.MaxInt64InDouble + 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-MiscHelpers.MaxInt64InDouble - 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-MiscHelpers.MaxInt64InDouble).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt64InDoubleAsDouble, result.Value); + + // ReSharper disable once RedundantCast + engine.Script.value = ((ulong)MiscHelpers.MaxInt64InDouble).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt64InDoubleAsDouble, result.Value); + + // ReSharper disable once RedundantCast + engine.Script.value = ((ulong)MiscHelpers.MaxInt64InDouble + 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = float.MinValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MinValue, result.Value); + + engine.Script.value = float.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MaxValue, result.Value); + + engine.Script.value = decimal.MinValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((double)decimal.MinValue, result.Value); + + engine.Script.value = decimal.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((double)decimal.MaxValue, result.Value); + + engine.Script.value = (float.MinValue - bump).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MinValue - bump, result.Value); + + engine.Script.value = ((double)float.MinValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MinValue, result.Value); + + engine.Script.value = ((double)float.MaxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MaxValue, result.Value); + + engine.Script.value = (float.MaxValue + bump).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(float.MaxValue + bump, result.Value); + + engine.Script.value = (-(BigInteger)MiscHelpers.MaxInt64InDouble - 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-(BigInteger)MiscHelpers.MaxInt64InDouble).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt64InDoubleAsDouble, result.Value); + + engine.Script.value = ((BigInteger)MiscHelpers.MaxInt64InDouble).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt64InDoubleAsDouble, result.Value); + + engine.Script.value = ((BigInteger)MiscHelpers.MaxInt64InDouble + 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Decimal() + { + (bool Succeeded, decimal Value) result = (false, 0); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual(result.Value != 0, value.IsTruthy); + Assert.AreEqual(result.Value == 0, value.IsFalsy); + } + }; + + var bump = 1.0E25D; + + engine.Script.value = (double)float.MinValue; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (double)float.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = double.MinValue; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = double.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (double)decimal.MinValue + bump; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((decimal)((double)decimal.MinValue + bump), result.Value); + + engine.Script.value = (double)decimal.MaxValue - bump; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((decimal)((double)decimal.MaxValue - bump), result.Value); + + engine.Script.value = -MiscHelpers.MaxBigIntegerInDecimal - 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = -MiscHelpers.MaxBigIntegerInDecimal; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((decimal)-MiscHelpers.MaxBigIntegerInDecimal, result.Value); + + engine.Script.value = MiscHelpers.MaxBigIntegerInDecimal; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((decimal)MiscHelpers.MaxBigIntegerInDecimal, result.Value); + + engine.Script.value = MiscHelpers.MaxBigIntegerInDecimal + 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = long.MinValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MinValue, result.Value); + + engine.Script.value = long.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MaxValue, result.Value); + + engine.Script.value = ulong.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(ulong.MaxValue, result.Value); + + engine.Script.value = decimal.MinValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(decimal.MinValue, result.Value); + + engine.Script.value = decimal.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(decimal.MaxValue, result.Value); + + engine.Script.value = ((double)float.MinValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((double)float.MaxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = double.MinValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = double.MaxValue.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((double)decimal.MinValue + bump).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((decimal)((double)decimal.MinValue + bump), result.Value); + + engine.Script.value = ((double)decimal.MaxValue - bump).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((decimal)((double)decimal.MaxValue - bump), result.Value); + + engine.Script.value = (-MiscHelpers.MaxBigIntegerInDecimal - 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-MiscHelpers.MaxBigIntegerInDecimal).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((decimal)-MiscHelpers.MaxBigIntegerInDecimal, result.Value); + + engine.Script.value = MiscHelpers.MaxBigIntegerInDecimal.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((decimal)MiscHelpers.MaxBigIntegerInDecimal, result.Value); + + engine.Script.value = (MiscHelpers.MaxBigIntegerInDecimal + 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_String() + { + (bool Succeeded, string Value) result = (false, null); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + Assert.IsTrue(value.TryGet(out IComparable _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual(!string.IsNullOrEmpty(result.Value), value.IsTruthy); + Assert.AreEqual(string.IsNullOrEmpty(result.Value), value.IsFalsy); + } + }; + + engine.Execute("testObject.value = 'foo'"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual("foo", result.Value); + + engine.Script.value = "bar".ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual("bar", result.Value); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_CharSpan() + { + (bool Succeeded, string Value) result = (false, null); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsTrue(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + Assert.IsTrue(value.TryGet(out IComparable _)); + + result.Succeeded = value.TryGet(out ReadOnlySpan span); + if (result.Succeeded) + { + result.Value = span.ToString(); + Assert.AreEqual(!string.IsNullOrEmpty(result.Value), value.IsTruthy); + Assert.AreEqual(string.IsNullOrEmpty(result.Value), value.IsFalsy); + } + }; + + engine.Execute("testObject.value = 'foo'"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual("foo", result.Value); + + engine.Script.value = "bar".ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual("bar", result.Value); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_DateTime() + { + (bool Succeeded, DateTime Value) result = (false, default); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + Assert.IsTrue(value.TryGet(out IComparable _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + var value = DateTime.UtcNow; + + engine.Script.value = value; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(value, result.Value); + + engine.Script.value = value.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(value, result.Value); + + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableDateTimeConversion); + PrepareEngine(); + + value = (DateTime)engine.Evaluate("new Date()"); + + engine.Script.value = value; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(value, result.Value); + + engine.Script.value = value.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(value, result.Value); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_BigInteger() + { + (bool Succeeded, BigInteger Value) result = (false, default); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual(!result.Value.IsZero, value.IsTruthy); + Assert.AreEqual(result.Value.IsZero, value.IsFalsy); + } + }; + + engine.Script.value = 0.5D; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = -MiscHelpers.MaxInt64InDoubleAsDouble - 1000000; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = -MiscHelpers.MaxInt64InDoubleAsDouble; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = MiscHelpers.MaxInt64InDoubleAsDouble; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = MiscHelpers.MaxInt64InDoubleAsDouble + 1000000; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (BigInteger)long.MinValue - 1; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((BigInteger)long.MinValue - 1, result.Value); + + engine.Script.value = (BigInteger)long.MinValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MinValue, result.Value); + + engine.Script.value = (BigInteger)long.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(long.MaxValue, result.Value); + + engine.Script.value = (BigInteger)long.MaxValue + 1; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual((BigInteger)long.MaxValue + 1, result.Value); + + engine.Script.value = (-MiscHelpers.MaxInt64InDoubleAsDouble - 1000000).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-MiscHelpers.MaxInt64InDoubleAsDouble).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = MiscHelpers.MaxInt64InDoubleAsDouble.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxInt64InDouble, result.Value); + + engine.Script.value = (MiscHelpers.MaxInt64InDoubleAsDouble + 1000000).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (-MiscHelpers.MaxBigIntegerInDecimalAsDecimal).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxBigIntegerInDecimal, result.Value); + + engine.Script.value = MiscHelpers.MaxBigIntegerInDecimalAsDecimal.ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxBigIntegerInDecimal, result.Value); + + engine.Script.value = (-MiscHelpers.MaxBigIntegerInDecimal - 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(-MiscHelpers.MaxBigIntegerInDecimal - 1, result.Value); + + engine.Script.value = (MiscHelpers.MaxBigIntegerInDecimal + 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(MiscHelpers.MaxBigIntegerInDecimal + 1, result.Value); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_V8Object() + { + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableDateTimeConversion | V8ScriptEngineFlags.EnableTaskPromiseConversion); + PrepareEngine(); + + { + (bool Succeeded, ScriptObject Value) result = (false, null); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsTrue(value.IsTruthy); + Assert.IsFalse(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + engine.Execute("testObject.value = { foo: 123, bar: 'baz' }"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(123, result.Value["foo"]); + Assert.AreEqual("baz", result.Value["bar"]); + } + + { + (bool Succeeded, DateTime Value) result = (false, default); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsTrue(value.IsTruthy); + Assert.IsFalse(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + engine.Execute("testObject.value = new Date()"); + Assert.IsTrue(result.Succeeded); + } + + { + (bool Succeeded, Task Value) result = (false, null); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsTrue(value.IsTruthy); + Assert.IsFalse(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + engine.Execute("testObject.value = Promise.resolve({ foo: 123, bar: 'baz' })"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(123, ((ScriptObject)result.Value.Result)["foo"]); + Assert.AreEqual("baz", ((ScriptObject)result.Value.Result)["bar"]); + } + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_HostObject() + { + { + (bool Succeeded, HostFunctions Value) result = (false, null); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsTrue(value.IsTruthy); + Assert.IsFalse(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + var value = new HostFunctions(); + engine.Script.value = value; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(value, result.Value); + } + + { + (bool Succeeded, TimeSpan Value) result = (false, TimeSpan.Zero); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsTrue(value.IsTruthy); + Assert.IsFalse(value.IsFalsy); + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + result.Succeeded = value.TryGet(out result.Value); + }; + + engine.Script.value = TimeSpan.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(TimeSpan.MaxValue, result.Value); + } + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Nullable() + { + (bool Succeeded, TimeSpan? Value) result = (false, null); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual(result.Value is not null, value.IsTruthy); + Assert.AreEqual(result.Value is null, value.IsFalsy); + } + }; + + engine.Script.value = default(BindingFlags); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = TimeSpan.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(TimeSpan.MaxValue, result.Value); + + engine.Execute("testObject.value = null"); + Assert.IsTrue(result.Succeeded); + Assert.IsNull(result.Value); + + engine.Execute("testObject.value = undefined"); + Assert.IsTrue(result.Succeeded); + Assert.IsNull(result.Value); + + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out char _)); + Assert.IsFalse(value.TryGet(out sbyte _)); + Assert.IsFalse(value.TryGet(out byte _)); + Assert.IsFalse(value.TryGet(out short _)); + Assert.IsFalse(value.TryGet(out ushort _)); + Assert.IsFalse(value.TryGet(out int _)); + Assert.IsFalse(value.TryGet(out uint _)); + Assert.IsFalse(value.TryGet(out long _)); + Assert.IsFalse(value.TryGet(out ulong _)); + Assert.IsFalse(value.TryGet(out float _)); + Assert.IsFalse(value.TryGet(out double _)); + Assert.IsFalse(value.TryGet(out decimal _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsFalse(value.TryGet(out BigInteger _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual(result.Value is not null, value.IsTruthy); + Assert.AreEqual(result.Value is null, value.IsFalsy); + } + }; + + engine.Script.value = default(BindingFlags); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = TimeSpan.MaxValue; + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(TimeSpan.MaxValue, result.Value); + + engine.Execute("testObject.value = null"); + Assert.IsTrue(result.Succeeded); + Assert.IsNull(result.Value); + + engine.Execute("testObject.value = undefined"); + Assert.IsTrue(result.Succeeded); + Assert.IsNull(result.Value); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_SetProperty_Misc() + { + testObject.SetProperty = (in V8FastArg value) => Assert.IsTrue(value.GetBoolean()); + engine.Execute("testObject.value = true"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(' ', value.GetChar()); + engine.Execute("testObject.value = 32"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(1, value.GetSByte()); + engine.Execute("testObject.value = 1"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(2, value.GetByte()); + engine.Execute("testObject.value = 2"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(3, value.GetInt16()); + engine.Execute("testObject.value = 3"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(4, value.GetUInt16()); + engine.Execute("testObject.value = 4"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(5, value.GetInt32()); + engine.Execute("testObject.value = 5"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(6U, value.GetUInt32()); + engine.Execute("testObject.value = 6"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(7, value.GetInt64()); + engine.Execute("testObject.value = 7"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(8UL, value.GetUInt64()); + engine.Execute("testObject.value = 8"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(8.125f, value.GetSingle()); + engine.Execute("testObject.value = 8.125"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(9.25d, value.GetDouble()); + engine.Execute("testObject.value = 9.25"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(10.375m, value.GetDecimal()); + engine.Execute("testObject.value = 10.375"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual("blah", value.GetString()); + engine.Execute("testObject.value = 'blah'"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual("shoo", value.GetCharSpan().ToString()); + engine.Execute("testObject.value = 'shoo'"); + + var dateTimeValue = DateTime.UtcNow; + engine.Script.dateTimeValue = dateTimeValue; + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(dateTimeValue, value.GetDateTime()); + engine.Execute("testObject.value = dateTimeValue"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(1234567890, value.GetBigInteger()); + engine.Execute("testObject.value = 1234567890n"); + + testObject.SetProperty = (in V8FastArg value) => Assert.AreEqual(123, value.Get().GetProperty("foo")); + engine.Execute("testObject.value = { foo: 123 }"); + + testObject.SetProperty = (in V8FastArg value) => Assert.IsNotNull(value.Get()); + engine.Execute("testObject.value = testObject"); + + testObject.SetProperty = (in V8FastArg value) => Assert.IsNull(value.GetNullable()); + engine.Execute("testObject.value = null"); + TestUtil.AssertException(() => engine.Execute("testObject.value = 'qux'")); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_Args() + { + var tested = false; + + var dateTimeValue = DateTime.UtcNow; + engine.Script.dateTimeValue = dateTimeValue; + + engine.Script.foo = new V8FastHostFunction(22, (bool asConstructor, in V8FastArgs args, in V8FastResult _) => + { + // ReSharper disable CompareOfFloatsByEqualityOperator + + V8FastHostFunction.VerifyFunctionCall(asConstructor); + + Assert.IsTrue(args.IsUndefined(0) && args.IsFalsy(0)); + Assert.IsTrue(args.IsNull(1) && args.IsFalsy(1)); + Assert.IsTrue(args.TryGet(2, out bool boolValue) && args.IsTruthy(2) && boolValue); + Assert.IsTrue(args.TryGet(3, out char charValue) && args.IsTruthy(3) && (charValue == ' ')); + Assert.IsTrue(args.TryGet(4, out sbyte sbyteValue) && args.IsTruthy(4) && (sbyteValue == 1)); + Assert.IsTrue(args.TryGet(5, out byte byteValue) && args.IsTruthy(5) && (byteValue == 2)); + Assert.IsTrue(args.TryGet(6, out short shortValue) && args.IsTruthy(6) && (shortValue == 3)); + Assert.IsTrue(args.TryGet(7, out ushort ushortValue) && args.IsTruthy(7) && (ushortValue == 4)); + Assert.IsTrue(args.TryGet(8, out int intValue) && args.IsTruthy(8) && (intValue == 5)); + Assert.IsTrue(args.TryGet(9, out uint uintValue) && args.IsTruthy(9) && (uintValue == 6)); + Assert.IsTrue(args.TryGet(10, out long longValue) && args.IsTruthy(10) && (longValue == 7)); + Assert.IsTrue(args.TryGet(11, out ulong ulongValue) && args.IsTruthy(11) && (ulongValue == 8)); + Assert.IsTrue(args.TryGet(12, out float floatValue) && args.IsTruthy(12) && (floatValue == 8.125f)); + Assert.IsTrue(args.TryGet(13, out double doubleValue) && args.IsTruthy(13) && (doubleValue == 9.25d)); + Assert.IsTrue(args.TryGet(14, out decimal decimalValue) && args.IsTruthy(14) && (decimalValue == 10.375m)); + Assert.IsTrue(args.TryGet(15, out string stringValue) && args.IsTruthy(15) && (stringValue == "blah")); + Assert.IsTrue(args.TryGet(16, out ReadOnlySpan charSpanValue) && args.IsTruthy(16) && (charSpanValue.ToString() == "shoo")); + Assert.IsTrue(args.TryGet(17, out DateTime tempDateTimeValue) && args.IsTruthy(17) && (tempDateTimeValue == dateTimeValue)); + Assert.IsTrue(args.TryGet(18, out BigInteger bigIntegerValue) && args.IsTruthy(18) && (bigIntegerValue == 1234567890)); + Assert.IsTrue(args.TryGet(19, out ScriptObject scriptObject) && args.IsTruthy(19) && ((int)scriptObject.GetProperty("foo") == 123)); + Assert.IsTrue(args.TryGet(20, out TestObject _) && args.IsTruthy(20)); + Assert.IsTrue(args.TryGet(21, out int? nullable) && args.IsFalsy(21) && (nullable is null)); + + Assert.IsTrue(args.GetBoolean(2)); + Assert.AreEqual(' ', args.GetChar(3)); + Assert.AreEqual(1, args.GetSByte(4)); + Assert.AreEqual(2, args.GetByte(5)); + Assert.AreEqual(3, args.GetInt16(6)); + Assert.AreEqual(4, args.GetUInt16(7)); + Assert.AreEqual(5, args.GetInt32(8)); + Assert.AreEqual(6U, args.GetUInt32(9)); + Assert.AreEqual(7, args.GetInt64(10)); + Assert.AreEqual(8UL, args.GetUInt64(11)); + Assert.AreEqual(8.125f, args.GetSingle(12)); + Assert.AreEqual(9.25d, args.GetDouble(13)); + Assert.AreEqual(10.375m, args.GetDecimal(14)); + Assert.AreEqual("blah", args.GetString(15)); + Assert.AreEqual("shoo", args.GetCharSpan(16).ToString()); + Assert.AreEqual(dateTimeValue, args.GetDateTime(17)); + Assert.AreEqual(1234567890, args.GetBigInteger(18)); + Assert.AreEqual(123, args.Get(19).GetProperty("foo")); + Assert.IsNotNull(args.Get(20)); + Assert.IsNull(args.GetNullable(21)); + + var failedAsExpected = false; + try + { + args.GetString(0); + } + catch (ArgumentException) + { + failedAsExpected = true; + } + + Assert.IsTrue(failedAsExpected); + + tested = true; + + // ReSharper restore CompareOfFloatsByEqualityOperator + }); + + engine.Execute(@"foo( + undefined, null, + true, + 32, + 1, 2, 3, 4, 5, 6, 7, 8, + 8.125, 9.25, 10.375, + 'blah', 'shoo', + dateTimeValue, + 1234567890n, + { foo: 123 }, + testObject, + null + )"); + + Assert.IsTrue(tested); + } + + [TestMethod, TestCategory("V8FastProxy")] + public void V8FastProxy_FastObject() + { + fastObject.IntField = 123; + fastObject.StringProperty = "foo"; + + Assert.AreEqual(123, engine.Evaluate("fastObject.intFieldRO")); + TestUtil.AssertException(() => engine.Execute("fastObject.intFieldRO = 456")); + Assert.AreEqual(123, engine.Evaluate("fastObject.intFieldRW")); + Assert.AreEqual(456, engine.Evaluate("fastObject.intFieldRW = 456")); + Assert.AreEqual(456, engine.Evaluate("fastObject.intFieldRW")); + Assert.AreEqual(456, engine.Evaluate("fastObject.intFieldRO")); + Assert.AreEqual(456, fastObject.IntField); + Assert.IsFalse(Convert.ToBoolean(engine.Evaluate("delete fastObject.intFieldRO"))); + Assert.IsFalse(Convert.ToBoolean(engine.Evaluate("delete fastObject.intFieldRW"))); + + Assert.AreEqual("foo", engine.Evaluate("fastObject.stringPropertyRO")); + TestUtil.AssertException(() => engine.Execute("fastObject.stringPropertyRO = 'bar'")); + Assert.AreEqual("foo", engine.Evaluate("fastObject.stringPropertyRW")); + Assert.AreEqual("bar", engine.Evaluate("fastObject.stringPropertyRW = 'bar'")); + Assert.AreEqual("bar", engine.Evaluate("fastObject.stringPropertyRW")); + Assert.AreEqual("bar", engine.Evaluate("fastObject.stringPropertyRO")); + Assert.AreEqual("bar", fastObject.StringProperty); + Assert.IsFalse(Convert.ToBoolean(engine.Evaluate("delete fastObject.stringPropertyRO"))); + Assert.IsFalse(Convert.ToBoolean(engine.Evaluate("delete fastObject.stringPropertyRW"))); + + Assert.AreEqual("456 bar 789 baz", engine.Evaluate("fastObject.method(789, 'baz')")); + Assert.AreEqual("456 bar 987 qux", fastObject.Method(987, "qux".AsSpan())); + TestUtil.AssertException(() => engine.Execute("fastObject.method = 789")); + Assert.IsFalse(Convert.ToBoolean(engine.Evaluate("delete fastObject.method"))); + + Assert.IsInstanceOfType(engine.Evaluate("fastObject.baz"), typeof(Undefined)); + Assert.AreEqual(987, engine.Evaluate("fastObject.baz = 987")); + Assert.AreEqual(987, engine.Evaluate("fastObject.baz")); + + Assert.IsInstanceOfType(engine.Evaluate("fastObject[4]"), typeof(Undefined)); + Assert.AreEqual(654, engine.Evaluate("fastObject[4] = 654")); + Assert.AreEqual(654, engine.Evaluate("fastObject[4]")); + + Assert.AreEqual("4:654 intFieldRO:456 stringPropertyRO:bar baz:987 ", engine.Evaluate(@" + let x = ''; + for (let i in fastObject) { + x += `${i}:${fastObject[i]} `; + } + x; + ")); + + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("delete fastObject.baz"))); + Assert.IsInstanceOfType(engine.Evaluate("fastObject.baz"), typeof(Undefined)); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("delete fastObject.qux"))); + Assert.IsInstanceOfType(engine.Evaluate("fastObject.qux"), typeof(Undefined)); + + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("delete fastObject[4]"))); + Assert.IsInstanceOfType(engine.Evaluate("fastObject[4]"), typeof(Undefined)); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("delete fastObject[11]"))); + Assert.IsInstanceOfType(engine.Evaluate("fastObject[11]"), typeof(Undefined)); + + Assert.AreEqual("9 8 7 6 5 4 3 2 1 0 ", engine.Evaluate(@" + x = ''; + for (const i of fastObject) { + x += `${i} `; + } + x; + ")); + + Assert.AreEqual("a:100 a:101 a:102 a:103 a:104 a:105 a:106 a:107 a:108 a:109 ", engine.Evaluate(@" + (async function() { + let x = ''; + for await (const i of fastObject) { + x += `${i} `; + } + return x; + })() + ").ToTask().Result); + } + + #endregion + + #region miscellaneous + + private void V8FastProxy_SetProperty_Integer(T minValue, T maxValue, Func toDouble) where T : struct + { + (bool Succeeded, T Value) result = (false, default); + testObject.SetProperty = (in V8FastArg value) => + { + Assert.IsFalse(value.IsUndefined); + Assert.IsFalse(value.IsNull); + Assert.IsFalse(value.TryGet(out Undefined _)); + Assert.IsFalse(value.TryGet(out bool _)); + Assert.IsFalse(value.TryGet(out string _)); + Assert.IsFalse(value.TryGet(out ReadOnlySpan _)); + Assert.IsFalse(value.TryGet(out DateTime _)); + Assert.IsTrue(value.TryGet(out IComparable _)); + + result.Succeeded = value.TryGet(out result.Value); + if (result.Succeeded) + { + Assert.AreEqual(toDouble(result.Value) != 0, value.IsTruthy); + Assert.AreEqual(toDouble(result.Value) == 0, value.IsFalsy); + } + }; + + engine.Script.value = toDouble(minValue) - 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = toDouble(minValue); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = toDouble(maxValue); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + + engine.Script.value = toDouble(maxValue) + 1; + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (BigInteger)(toDouble(minValue) - 1); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (BigInteger)toDouble(minValue); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = (BigInteger)toDouble(maxValue); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + + engine.Script.value = (BigInteger)(toDouble(maxValue) + 1); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = (toDouble(minValue) - 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = toDouble(minValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = toDouble(maxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + + engine.Script.value = (toDouble(maxValue) + 1).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((decimal)(toDouble(minValue) - 1)).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((decimal)toDouble(minValue)).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = ((decimal)toDouble(maxValue)).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + + engine.Script.value = ((decimal)(toDouble(maxValue) + 1)).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((BigInteger)(toDouble(minValue) - 1)).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + engine.Script.value = ((BigInteger)toDouble(minValue)).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = ((BigInteger)toDouble(maxValue)).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + + engine.Script.value = ((BigInteger)(toDouble(maxValue) + 1)).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsFalse(result.Succeeded); + + if (typeof(T) == typeof(char)) + { + engine.Script.value = Unsafe.As(ref minValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = Unsafe.As(ref maxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + } + else if (typeof(T) == typeof(sbyte)) + { + engine.Script.value = Unsafe.As(ref minValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = Unsafe.As(ref maxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + } + else if (typeof(T) == typeof(byte)) + { + engine.Script.value = Unsafe.As(ref minValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = Unsafe.As(ref maxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + } + else if (typeof(T) == typeof(short)) + { + engine.Script.value = Unsafe.As(ref minValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = Unsafe.As(ref maxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + } + else if (typeof(T) == typeof(ushort)) + { + engine.Script.value = Unsafe.As(ref minValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = Unsafe.As(ref maxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + } + else if (typeof(T) == typeof(int)) + { + engine.Script.value = Unsafe.As(ref minValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = Unsafe.As(ref maxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + } + else if (typeof(T) == typeof(uint)) + { + engine.Script.value = Unsafe.As(ref minValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(minValue, result.Value); + + engine.Script.value = Unsafe.As(ref maxValue).ToRestrictedHostObject(engine); + engine.Execute("testObject.value = value"); + Assert.IsTrue(result.Succeeded); + Assert.AreEqual(maxValue, result.Value); + } + } + + public static class Helpers + { + public static string GetTypeName(T _) => typeof(T).Name; + } + + private sealed class TestObject : IV8FastHostObject + { + public delegate void RawGetProperty(in V8FastResult value); + + public delegate void RawSetProperty(in V8FastArg value); + + public RawGetProperty GetProperty { get; set; } + + public RawSetProperty SetProperty { get; set; } + + #region IV8FastHostObject implementation + + private static readonly Operations operations = new(); + + IV8FastHostObjectOperations IV8FastHostObject.Operations => operations; + + #endregion + + #region Nested type: Operations + + private sealed class Operations : IV8FastHostObjectOperations + { + string IV8FastHostObjectOperations.GetFriendlyName(IV8FastHostObject instance) => null; + + void IV8FastHostObjectOperations.GetProperty(IV8FastHostObject instance, string name, in V8FastResult value, out bool isCacheable) + { + isCacheable = false; + ((TestObject)instance).GetProperty?.Invoke(value); + } + + void IV8FastHostObjectOperations.SetProperty(IV8FastHostObject instance, string name, in V8FastArg value) + { + ((TestObject)instance).SetProperty?.Invoke(value); + } + + V8FastHostPropertyFlags IV8FastHostObjectOperations.QueryProperty(IV8FastHostObject instance, string name) + { + throw new NotImplementedException(); + } + + bool IV8FastHostObjectOperations.DeleteProperty(IV8FastHostObject instance, string name) + { + throw new NotImplementedException(); + } + + IEnumerable IV8FastHostObjectOperations.GetPropertyNames(IV8FastHostObject instance) + { + throw new NotImplementedException(); + } + + void IV8FastHostObjectOperations.GetProperty(IV8FastHostObject instance, int index, in V8FastResult value) + { + throw new NotImplementedException(); + } + + void IV8FastHostObjectOperations.SetProperty(IV8FastHostObject instance, int index, in V8FastArg value) + { + throw new NotImplementedException(); + } + + V8FastHostPropertyFlags IV8FastHostObjectOperations.QueryProperty(IV8FastHostObject instance, int index) + { + throw new NotImplementedException(); + } + + bool IV8FastHostObjectOperations.DeleteProperty(IV8FastHostObject instance, int index) + { + throw new NotImplementedException(); + } + + IEnumerable IV8FastHostObjectOperations.GetPropertyIndices(IV8FastHostObject instance) + { + throw new NotImplementedException(); + } + + IV8FastEnumerator IV8FastHostObjectOperations.CreateEnumerator(IV8FastHostObject instance) + { + throw new NotImplementedException(); + } + + IV8FastAsyncEnumerator IV8FastHostObjectOperations.CreateAsyncEnumerator(IV8FastHostObject instance) + { + throw new NotImplementedException(); + } + } + + #endregion + } + + private sealed class FastObject : V8FastHostDynamicObject + { + public int IntField; + + public string StringProperty { get; set; } + + private readonly int[] contents = Enumerable.Range(0, 10).Reverse().ToArray(); + + private readonly string[] asyncContents = Enumerable.Range(100, 10).Select(static value => $"a:{value}").ToArray(); + + public string Method(BigInteger intArg, in ReadOnlySpan stringArg) => $"{IntField} {StringProperty} {intArg} {stringArg.ToString()}"; + + static FastObject() + { + Configure(static configuration => + { + configuration.AddPropertyGetter("intFieldRO", static instance => ref instance.IntField, V8FastHostPropertyFlags.Enumerable); + configuration.AddPropertyAccessors("intFieldRW", static instance => ref instance.IntField); + + configuration.AddPropertyGetter("stringPropertyRO", + static (FastObject instance, in V8FastResult value) => value.Set(instance.StringProperty), V8FastHostPropertyFlags.Enumerable); + configuration.AddPropertyAccessors("stringPropertyRW", + static (FastObject instance, in V8FastResult value) => value.Set(instance.StringProperty), + static (FastObject instance, in V8FastArg value) => instance.StringProperty = value.GetString()); + + configuration.AddMethodGetter("method", 2, + static (FastObject instance, in V8FastArgs args, in V8FastResult result) => result.Set(instance.Method( + args.GetBigInteger(0, "intArg"), + args.GetCharSpan(1, "stringArg") + )) + ); + + configuration.EnumerateIndexedProperties = true; + + configuration.SetEnumeratorFactory(static instance => instance.contents.GetEnumerator()); + configuration.SetAsyncEnumeratorFactory(static instance => instance.asyncContents.AsAsyncEnumerable().GetAsyncEnumerator()); + }); + } + } + + #endregion + } +} diff --git a/ClearScriptTest/V8ModuleTest.cs b/ClearScriptTest/V8ModuleTest.cs index bd63bcec6..5a3449f41 100644 --- a/ClearScriptTest/V8ModuleTest.cs +++ b/ClearScriptTest/V8ModuleTest.cs @@ -44,7 +44,7 @@ public void V8Module_Standard_File() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(123 + 456, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Arithmetic from 'JavaScript/StandardModule/Arithmetic/Arithmetic.js'; - Arithmetic.Add(123, 456); + import.meta.setResult(Arithmetic.Add(123, 456)); ")); } @@ -54,7 +54,7 @@ public void V8Module_Standard_File_ForeignExtension() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(123 + 456, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Arithmetic from 'JavaScript/StandardModule/Arithmetic/Arithmetic.bogus'; - Arithmetic.BogusAdd(123, 456); + import.meta.setResult(Arithmetic.BogusAdd(123, 456)); ")); } @@ -64,7 +64,7 @@ public void V8Module_Standard_File_MixedImport() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/GeometryWithDynamicImport.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -74,7 +74,7 @@ public void V8Module_Standard_File_Nested() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -98,7 +98,7 @@ public void V8Module_Standard_File_PathlessImport() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(123 + 456, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Arithmetic from 'Arithmetic.js'; - Arithmetic.Add(123, 456); + import.meta.setResult(Arithmetic.Add(123, 456)); ")); } @@ -113,7 +113,7 @@ public void V8Module_Standard_File_PathlessImport_MixedImport() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'GeometryWithDynamicImport.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -128,7 +128,7 @@ public void V8Module_Standard_File_PathlessImport_Nested() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'GeometryWithPathlessImport.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -231,7 +231,7 @@ public void V8Module_Standard_File_FileNameExtensions() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -241,7 +241,7 @@ public void V8Module_Standard_Web() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableWebLoading; Assert.AreEqual(123 + 456, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Arithmetic from 'https://raw.githubusercontent.com/microsoft/ClearScript/master/ClearScriptTest/JavaScript/StandardModule/Arithmetic/Arithmetic.js'; - Arithmetic.Add(123, 456); + import.meta.setResult(Arithmetic.Add(123, 456)); ")); } @@ -251,7 +251,7 @@ public void V8Module_Standard_Web_MixedImport() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableWebLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'https://raw.githubusercontent.com/microsoft/ClearScript/master/ClearScriptTest/JavaScript/StandardModule/Geometry/GeometryWithDynamicImport.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -261,7 +261,7 @@ public void V8Module_Standard_Web_Nested() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableWebLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'https://raw.githubusercontent.com/microsoft/ClearScript/master/ClearScriptTest/JavaScript/StandardModule/Geometry/Geometry.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -285,7 +285,7 @@ public void V8Module_Standard_Web_PathlessImport() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableWebLoading; Assert.AreEqual(123 + 456, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Arithmetic from 'Arithmetic.js'; - Arithmetic.Add(123, 456); + import.meta.setResult(Arithmetic.Add(123, 456)); ")); } @@ -300,7 +300,7 @@ public void V8Module_Standard_Web_PathlessImport_MixedImport() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableWebLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'GeometryWithDynamicImport.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -315,7 +315,7 @@ public void V8Module_Standard_Web_PathlessImport_Nested() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableWebLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'GeometryWithPathlessImport.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -418,7 +418,7 @@ public void V8Module_Standard_Web_FileNameExtensions() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableWebLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'https://raw.githubusercontent.com/microsoft/ClearScript/master/ClearScriptTest/JavaScript/StandardModule/Geometry/Geometry'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -427,7 +427,7 @@ public void V8Module_Standard_Compilation() { var module = engine.Compile(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); "); using (module) @@ -445,7 +445,7 @@ public void V8Module_Standard_Compilation_CodeCache() { var code = @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); "; byte[] cacheBytes; @@ -481,7 +481,7 @@ public void V8Module_Standard_Compilation_Runtime() { var module = runtime.Compile(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); "); using (module) @@ -502,7 +502,7 @@ public void V8Module_Standard_Compilation_Runtime_CodeCache() { var code = @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); "; byte[] cacheBytes; @@ -572,18 +572,18 @@ public void V8Module_Standard_Caching() var info = new DocumentInfo { Category = ModuleCategory.Standard }; - Assert.AreEqual(Math.PI, engine.Evaluate(info, "Math.PI")); - Assert.AreEqual(Math.PI, engine.Evaluate(info, "Math.PI")); + Assert.AreEqual(Math.PI, engine.Evaluate(info, "import.meta.setResult(Math.PI)")); + Assert.AreEqual(Math.PI, engine.Evaluate(info, "import.meta.setResult(Math.PI)")); Assert.AreEqual(2UL, engine.GetRuntimeStatistics().ModuleCount); info = new DocumentInfo("Test") { Category = ModuleCategory.Standard }; - Assert.AreEqual(Math.E, engine.Evaluate(info, "Math.E")); - Assert.IsInstanceOfType(engine.Evaluate(info, "Math.E"), typeof(Undefined)); + Assert.AreEqual(Math.E, engine.Evaluate(info, "import.meta.setResult(Math.E)")); + Assert.IsInstanceOfType(engine.Evaluate(info, "import.meta.setResult(Math.E)"), typeof(Undefined)); Assert.AreEqual(3UL, engine.GetRuntimeStatistics().ModuleCount); - Assert.AreEqual(Math.PI, engine.Evaluate(info, "Math.PI")); - Assert.IsInstanceOfType(engine.Evaluate(info, "Math.PI"), typeof(Undefined)); + Assert.AreEqual(Math.PI, engine.Evaluate(info, "import.meta.setResult(Math.PI)")); + Assert.IsInstanceOfType(engine.Evaluate(info, "import.meta.setResult(Math.PI)"), typeof(Undefined)); Assert.AreEqual(4UL, engine.GetRuntimeStatistics().ModuleCount); using (var runtime = new V8Runtime()) @@ -592,8 +592,8 @@ public void V8Module_Standard_Caching() { using (var testEngine = runtime.CreateScriptEngine()) { - Assert.AreEqual(Math.PI, testEngine.Evaluate(info, "Math.PI")); - Assert.AreEqual(Math.E, testEngine.Evaluate(info, "Math.E")); + Assert.AreEqual(Math.PI, testEngine.Evaluate(info, "import.meta.setResult(Math.PI)")); + Assert.AreEqual(Math.E, testEngine.Evaluate(info, "import.meta.setResult(Math.E)")); Assert.AreEqual(2UL, testEngine.GetStatistics().ModuleCount); } } @@ -607,8 +607,8 @@ public void V8Module_Standard_Caching() { using (var testEngine = runtime.CreateScriptEngine()) { - Assert.AreEqual(Math.PI, testEngine.Evaluate(info, "Math.PI")); - Assert.IsInstanceOfType(testEngine.Evaluate(info, "Math.PI"), typeof(Undefined)); + Assert.AreEqual(Math.PI, testEngine.Evaluate(info, "import.meta.setResult(Math.PI)")); + Assert.IsInstanceOfType(testEngine.Evaluate(info, "import.meta.setResult(Math.PI)"), typeof(Undefined)); } } @@ -621,7 +621,7 @@ public void V8Module_Standard_Caching() { for (var i = 0; i < 300; i++) { - Assert.AreEqual(Math.PI + i, testEngine.Evaluate(info, "Math.PI" + "+" + i)); + Assert.AreEqual(Math.PI + i, testEngine.Evaluate(info, "import.meta.setResult(Math.PI" + "+" + i + ")")); } Assert.AreEqual(300UL, testEngine.GetStatistics().ModuleCount); @@ -640,42 +640,42 @@ public void V8Module_Standard_Context() Assert.AreEqual(123, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - Geometry.Meta.foo + import.meta.setResult(Geometry.Meta.foo) ")); Assert.AreEqual(456.789, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - Geometry.Meta.bar + import.meta.setResult(Geometry.Meta.bar) ")); Assert.AreEqual("bogus", engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - Geometry.Meta.baz + import.meta.setResult(Geometry.Meta.baz) ")); Assert.IsInstanceOfType(engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - new Geometry.Meta.qux() + import.meta.setResult(new Geometry.Meta.qux()) "), typeof(Random)); Assert.IsInstanceOfType(engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/Geometry.js'; - Geometry.Meta.quux + import.meta.setResult(Geometry.Meta.quux) "), typeof(Undefined)); Assert.AreEqual(Math.PI, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Arithmetic from 'JavaScript/StandardModule/Arithmetic/Arithmetic.js'; - Arithmetic.Meta.foo + import.meta.setResult(Arithmetic.Meta.foo) ")); Assert.IsInstanceOfType(engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Arithmetic from 'JavaScript/StandardModule/Arithmetic/Arithmetic.js'; - Arithmetic.Meta.bar + import.meta.setResult(Arithmetic.Meta.bar) "), typeof(Undefined)); Assert.AreEqual(0, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModule/Geometry/GeometryWithDynamicImport.js'; - Object.keys(Geometry.Meta).length; + import.meta.setResult(Object.keys(Geometry.Meta).length); ")); } @@ -690,7 +690,7 @@ export function Add(a, b) { dynamic add = engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Test from 'test'; - Test.Add + import.meta.setResult(Test.Add) "); Assert.AreEqual(579, add(123, 456)); @@ -702,7 +702,7 @@ public void V8Module_Standard_CircularReference() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModuleWithCycles/Geometry/Geometry.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -712,7 +712,7 @@ public void V8Module_Standard_CircularReference_MixedImport() engine.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; Assert.AreEqual(25 * 25, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import * as Geometry from 'JavaScript/StandardModuleWithCycles/Geometry/GeometryWithDynamicImport.js'; - new Geometry.Square(25).Area; + import.meta.setResult(new Geometry.Square(25).Area); ")); } @@ -738,13 +738,13 @@ void OnDocumentLoad(ref DocumentInfo info) Assert.AreEqual(12, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import { Rectangle } from 'JavaScript/CommonJS/Geometry/Geometry'; globalThis.Rectangle1 = Rectangle; - new Rectangle(3, 4).Area; + import.meta.setResult(new Rectangle(3, 4).Area); ")); Assert.AreEqual(30, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import { Rectangle } from 'JavaScript/CommonJS/Geometry/Geometry'; globalThis.Rectangle2 = Rectangle; - new Rectangle(5, 6).Area; + import.meta.setResult(new Rectangle(5, 6).Area); ")); Assert.AreEqual(56, engine.Evaluate(@" @@ -783,13 +783,13 @@ async Task OnDocumentLoadAsync(ValueRef info, Stream contents) Assert.AreEqual(12, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import { Rectangle } from 'JavaScript/CommonJS/Geometry/Geometry'; globalThis.Rectangle1 = Rectangle; - new Rectangle(3, 4).Area; + import.meta.setResult(new Rectangle(3, 4).Area); ")); Assert.AreEqual(30, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import { Rectangle } from 'JavaScript/CommonJS/Geometry/Geometry'; globalThis.Rectangle2 = Rectangle; - new Rectangle(5, 6).Area; + import.meta.setResult(new Rectangle(5, 6).Area); ")); Assert.AreEqual(56, engine.Evaluate(@" @@ -823,13 +823,13 @@ get Area() { Assert.AreEqual(12, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import { Rectangle } from 'Geometry'; globalThis.Rectangle1 = Rectangle; - new Rectangle(3, 4).Area; + import.meta.setResult(new Rectangle(3, 4).Area); ")); Assert.AreEqual(30, engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" import { Rectangle } from 'Geometry'; globalThis.Rectangle2 = Rectangle; - new Rectangle(5, 6).Area; + import.meta.setResult(new Rectangle(5, 6).Area); ")); Assert.AreEqual(56, engine.Evaluate(@" @@ -906,6 +906,45 @@ public void V8Module_Standard_Json_Malformed() TestUtil.AssertException(() => engine.Execute(new DocumentInfo { Category = ModuleCategory.Standard }, "import result from 'JavaScript/Malformed.json'; globalThis.result = result;")); } + [TestMethod, TestCategory("V8Module")] + public async Task V8Module_Standard_TopLevelAwait_Result() + { + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion); + + engine.AddHostType(typeof(Task)); + Assert.AreEqual(123, await (Task)engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" + await Task.Delay(500); + import.meta.setResult(123); + ")); + } + + [TestMethod, TestCategory("V8Module")] + public async Task V8Module_Standard_TopLevelAwait_Exception() + { + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion); + + engine.AddHostType(typeof(Task)); + ScriptEngineException scriptEngineException = null; + + try + { + await (Task)engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, @" + await Task.Delay(500); + await Task.BogusMethod(); + "); + } + catch (ScriptEngineException exception) + { + scriptEngineException = exception; + Console.WriteLine(exception); + } + + Assert.IsNotNull(scriptEngineException); + Assert.AreEqual("TypeError: Task.BogusMethod is not a function", scriptEngineException.Message); + } + [TestMethod, TestCategory("V8Module")] public void V8Module_CommonJS_File() { @@ -1397,7 +1436,6 @@ public void V8Module_CommonJS_Json_Array() TestUtil.AssertException(() => engine.Evaluate(new DocumentInfo { Category = ModuleCategory.CommonJS }, "return require('ArrayWithFunction.json')")); } - [TestMethod, TestCategory("V8Module")] public void V8Module_CommonJS_Json_Malformed() { @@ -1427,7 +1465,7 @@ public override Task LoadDocumentAsync(DocumentSettings settings, Docu public static IDictionary CreateDocumentContext(DocumentInfo info) { - if (info.Uri != null) + if (info.Uri is not null) { var name = Path.GetFileName(info.Uri.AbsolutePath); diff --git a/ClearScriptTest/V8ScriptEngineTest.NetStandard.cs b/ClearScriptTest/V8ScriptEngineTest.NetStandard.cs deleted file mode 100644 index 0470717c2..000000000 --- a/ClearScriptTest/V8ScriptEngineTest.NetStandard.cs +++ /dev/null @@ -1,398 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.Collections.Generic; -using System.Runtime; -using System.Threading; -using Microsoft.ClearScript.V8; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System.Threading.Tasks; -using Microsoft.ClearScript.Util; - -namespace Microsoft.ClearScript.Test -{ - // ReSharper disable once PartialTypeWithSinglePart - - public partial class V8ScriptEngineTest - { - #region test methods - - // ReSharper disable InconsistentNaming - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_ValueTaskPromiseConversion() - { - engine.Script.value = new ValueTask("foo"); - Assert.AreEqual("HostObject", engine.Evaluate("value.constructor.name")); - Assert.IsInstanceOfType(engine.Evaluate("Promise.resolve(123)"), typeof(ScriptObject)); - - engine.Dispose(); - engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion | V8ScriptEngineFlags.EnableValueTaskPromiseConversion); - - engine.Script.value = new ValueTask("bar"); - Assert.AreEqual("Promise", engine.Evaluate("value.constructor.name")); - Assert.IsInstanceOfType(engine.Evaluate("Promise.resolve(123)"), typeof(Task)); - - var task = new Func>(async () => await (Task)engine.Evaluate("Promise.resolve(123)"))(); - Assert.AreEqual(123, task.Result); - - engine.Script.promise = new ValueTask(456); - engine.Execute("promise.then(value => result = value);"); - Assert.AreEqual(456, engine.Script.result); - - var cancelSource = new CancellationTokenSource(); - cancelSource.Cancel(); - engine.Script.promise = new ValueTask(Task.Factory.StartNew(() => "baz", cancelSource.Token)); - Thread.Sleep(250); - engine.Execute("promise.then(value => result = value, value => error = value);"); - Assert.IsInstanceOfType(engine.Script.error.hostException.GetBaseException(), typeof(TaskCanceledException)); - - cancelSource = new CancellationTokenSource(); - engine.Script.promise = new ValueTask(Task.Factory.StartNew(() => throw new AmbiguousImplementationException(), cancelSource.Token)); - Thread.Sleep(250); - engine.Execute("promise.then(value => result = value, value => error = value);"); - Assert.IsInstanceOfType(engine.Script.error.hostException.GetBaseException(), typeof(AmbiguousImplementationException)); - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_ValueTaskPromiseConversion_NoResult() - { - engine.Script.value = new ValueTask(Task.CompletedTask); - Assert.AreEqual("HostObject", engine.Evaluate("value.constructor.name")); - Assert.IsInstanceOfType(engine.Evaluate("Promise.resolve(123)"), typeof(ScriptObject)); - - engine.Dispose(); - engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion | V8ScriptEngineFlags.EnableValueTaskPromiseConversion); - - engine.Script.value = new ValueTask(Task.CompletedTask); - Assert.AreEqual("Promise", engine.Evaluate("value.constructor.name")); - Assert.IsInstanceOfType(engine.Evaluate("Promise.resolve(123)"), typeof(Task)); - - var task = new Func>(async () => await (Task)engine.Evaluate("Promise.resolve(123)"))(); - Assert.AreEqual(123, task.Result); - - engine.Script.promise = new ValueTask(Task.CompletedTask); - engine.Execute("promise.then(value => result = value);"); - Assert.IsInstanceOfType(engine.Script.result, typeof(Undefined)); - - var cancelSource = new CancellationTokenSource(); - cancelSource.Cancel(); - engine.Script.promise = new ValueTask(Task.Factory.StartNew(() => {}, cancelSource.Token)); - Thread.Sleep(250); - engine.Execute("promise.then(value => result = value, value => error = value);"); - Assert.IsInstanceOfType(engine.Script.error.hostException.GetBaseException(), typeof(TaskCanceledException)); - - cancelSource = new CancellationTokenSource(); - engine.Script.promise = new ValueTask(Task.Factory.StartNew(() => throw new AmbiguousImplementationException(), cancelSource.Token)); - Thread.Sleep(250); - engine.Execute("promise.then(value => result = value, value => error = value);"); - Assert.IsInstanceOfType(engine.Script.error.hostException.GetBaseException(), typeof(AmbiguousImplementationException)); - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_Iteration_Disposal_AsyncSource() - { - var source = TestEnumerable.CreateAsync("foo", "bar", "baz"); - - engine.Script.done = new ManualResetEventSlim(); - engine.AddRestrictedHostObject("source", source); - engine.Execute(@" - result = ''; - (async function () { - for await (let item of source) { - result += item; - } - done.Set(); - })(); - "); - engine.Script.done.Wait(); - - Assert.AreEqual("foobarbaz", engine.Script.result); - Assert.AreEqual(1, ((TestEnumerable.IDisposableEnumeratorFactory)source).DisposedEnumeratorCount); - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_Iteration_Disposal_AsyncSource_GlobalRenaming() - { - using (Scope.Create(() => HostSettings.CustomAttributeLoader, loader => HostSettings.CustomAttributeLoader = loader)) - { - HostSettings.CustomAttributeLoader = new CamelCaseAttributeLoader(); - - var source = TestEnumerable.CreateAsync("foo", "bar", "baz"); - - engine.Script.done = new ManualResetEventSlim(); - engine.AddRestrictedHostObject("source", source); - engine.Execute(@" - result = ''; - (async function () { - for await (let item of source) { - result += item; - } - done.set(); - })(); - "); - engine.Script.done.Wait(); - - Assert.AreEqual("foobarbaz", engine.Script.result); - Assert.AreEqual(1, ((TestEnumerable.IDisposableEnumeratorFactory)source).DisposedEnumeratorCount); - } - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_Iteration_Disposal_AsyncSource_DisableTypeRestriction() - { - engine.DisableTypeRestriction = true; - - var source = TestEnumerable.CreateAsync("foo", "bar", "baz"); - - engine.Script.done = new ManualResetEventSlim(); - engine.AddRestrictedHostObject("source", source); - engine.Execute(@" - result = ''; - (async function () { - for await (let item of source) { - result += item; - } - done.Set(); - })(); - "); - engine.Script.done.Wait(); - - Assert.AreEqual("foobarbaz", engine.Script.result); - Assert.AreEqual(1, ((TestEnumerable.IDisposableEnumeratorFactory)source).DisposedEnumeratorCount); - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_AsyncIteration_AsyncEnumerable() - { - static async IAsyncEnumerable GetItems() - { - await Task.Delay(10); - yield return 123; - await Task.Delay(10); - yield return "blah"; - } - - engine.Script.done = new ManualResetEventSlim(); - engine.Script.enumerable = GetItems(); - engine.Execute(@" - result = ''; - (async function () { - for await (var item of enumerable) { - result += item; - } - done.Set(); - })(); - "); - engine.Script.done.Wait(); - - var result = (string)engine.Script.result; - Assert.AreEqual(7, result.Length); - Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); - Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_GlobalRenaming() - { - using (Scope.Create(() => HostSettings.CustomAttributeLoader, loader => HostSettings.CustomAttributeLoader = loader)) - { - HostSettings.CustomAttributeLoader = new CamelCaseAttributeLoader(); - - static async IAsyncEnumerable GetItems() - { - await Task.Delay(10); - yield return 123; - await Task.Delay(10); - yield return "blah"; - } - - engine.Script.done = new ManualResetEventSlim(); - engine.Script.enumerable = GetItems(); - engine.Execute(@" - result = ''; - (async function () { - for await (var item of enumerable) { - result += item; - } - done.set(); - })(); - "); - engine.Script.done.Wait(); - - var result = (string)engine.Script.result; - Assert.AreEqual(7, result.Length); - Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); - Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); - } - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_DisableTypeRestriction() - { - engine.DisableTypeRestriction = true; - - static async IAsyncEnumerable GetItems() - { - await Task.Delay(10); - yield return 123; - await Task.Delay(10); - yield return "blah"; - } - - engine.Script.done = new ManualResetEventSlim(); - engine.Script.enumerable = GetItems(); - engine.Execute(@" - result = ''; - (async function () { - for await (var item of enumerable) { - result += item; - } - done.Set(); - })(); - "); - engine.Script.done.Wait(); - - var result = (string)engine.Script.result; - Assert.AreEqual(7, result.Length); - Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); - Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_Exception() - { - const string errorMessage = "Well, this is bogus!"; - static async IAsyncEnumerable GetItems() - { - await Task.Delay(10); - yield return 123; - await Task.Delay(10); - yield return "blah"; - throw new InvalidOperationException(errorMessage); - } - - engine.Script.done = new ManualResetEventSlim(); - engine.Script.enumerable = GetItems(); - engine.Execute(@" - result = ''; - (async function () { - try { - for await (var item of enumerable) { - result += item; - } - } - catch (error) { - errorMessage = error.message; - throw error; - } - finally { - done.Set(); - } - })(); - "); - engine.Script.done.Wait(); - - var result = (string)engine.Script.result; - Assert.AreEqual(7, result.Length); - Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); - Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); - Assert.AreEqual(errorMessage, engine.Script.errorMessage); - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_Exception_GlobalRenaming() - { - using (Scope.Create(() => HostSettings.CustomAttributeLoader, loader => HostSettings.CustomAttributeLoader = loader)) - { - HostSettings.CustomAttributeLoader = new CamelCaseAttributeLoader(); - - const string errorMessage = "Well, this is bogus!"; - static async IAsyncEnumerable GetItems() - { - await Task.Delay(10); - yield return 123; - await Task.Delay(10); - yield return "blah"; - throw new InvalidOperationException(errorMessage); - } - - engine.Script.done = new ManualResetEventSlim(); - engine.Script.enumerable = GetItems(); - engine.Execute(@" - result = ''; - (async function () { - try { - for await (var item of enumerable) { - result += item; - } - } - catch (error) { - errorMessage = error.message; - throw error; - } - finally { - done.set(); - } - })(); - "); - engine.Script.done.Wait(); - - var result = (string)engine.Script.result; - Assert.AreEqual(7, result.Length); - Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); - Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); - Assert.AreEqual(errorMessage, engine.Script.errorMessage); - } - } - - [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_Exception_DisableTypeRestriction() - { - engine.DisableTypeRestriction = true; - - const string errorMessage = "Well, this is bogus!"; - - static async IAsyncEnumerable GetItems() - { - await Task.Delay(10); - yield return 123; - await Task.Delay(10); - yield return "blah"; - throw new InvalidOperationException(errorMessage); - } - - engine.Script.done = new ManualResetEventSlim(); - engine.Script.enumerable = GetItems(); - engine.Execute(@" - result = ''; - (async function () { - try { - for await (var item of enumerable) { - result += item; - } - } - catch (error) { - errorMessage = error.message; - throw error; - } - finally { - done.Set(); - } - })(); - "); - engine.Script.done.Wait(); - - var result = (string)engine.Script.result; - Assert.AreEqual(7, result.Length); - Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); - Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); - Assert.AreEqual(errorMessage, engine.Script.errorMessage); - } - - // ReSharper restore InconsistentNaming - - #endregion - } -} diff --git a/ClearScriptTest/V8ScriptEngineTest.cs b/ClearScriptTest/V8ScriptEngineTest.cs index f49e586e1..cf560bfc3 100644 --- a/ClearScriptTest/V8ScriptEngineTest.cs +++ b/ClearScriptTest/V8ScriptEngineTest.cs @@ -6,6 +6,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.Specialized; +using System.Data; using System.Diagnostics.CodeAnalysis; using System.Dynamic; using System.Globalization; @@ -857,8 +858,8 @@ public void V8ScriptEngine_new_GenericNested() public void V8ScriptEngine_new_Scalar() { engine.AddHostObject("clr", HostItemFlags.GlobalMembers, new HostTypeCollection("mscorlib")); - Assert.AreEqual(default(int), engine.Evaluate("new System.Int32")); - Assert.AreEqual(default(int), engine.Evaluate("new System.Int32()")); + Assert.AreEqual(0, engine.Evaluate("new System.Int32")); + Assert.AreEqual(0, engine.Evaluate("new System.Int32()")); } [TestMethod, TestCategory("V8ScriptEngine")] @@ -1969,6 +1970,7 @@ public void V8ScriptEngine_MaxRuntimeHeapSize_Plumbing() Assert.AreEqual(UIntPtr.Zero, engine2.MaxRuntimeStackUsage); Assert.AreEqual(UIntPtr.Zero, runtime.MaxStackUsage); + // ReSharper disable once RedundantCast value = (UIntPtr)654321; runtime.MaxHeapSize = value; Assert.AreEqual(value, engine1.MaxRuntimeHeapSize); @@ -2025,6 +2027,7 @@ public void V8ScriptEngine_MaxRuntimeStackUsage_Plumbing() Assert.AreEqual(UIntPtr.Zero, engine2.MaxRuntimeHeapSize); Assert.AreEqual(UIntPtr.Zero, runtime.MaxHeapSize); + // ReSharper disable once RedundantCast value = (UIntPtr)654321; runtime.MaxStackUsage = value; Assert.AreEqual(value, engine1.MaxRuntimeStackUsage); @@ -2929,6 +2932,79 @@ public void V8ScriptEngine_Iteration_Disposal_GenericSource_DisableTypeRestricti Assert.AreEqual(2, ((TestEnumerable.IDisposableEnumeratorFactory)source).DisposedEnumeratorCount); } + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_Iteration_Disposal_AsyncSource() + { + var source = TestEnumerable.CreateAsync("foo", "bar", "baz"); + + engine.Script.done = new ManualResetEventSlim(); + engine.AddRestrictedHostObject("source", source); + engine.Execute(@" + result = ''; + (async function () { + for await (let item of source) { + result += item; + } + done.Set(); + })(); + "); + engine.Script.done.Wait(); + + Assert.AreEqual("foobarbaz", engine.Script.result); + Assert.AreEqual(1, ((TestEnumerable.IDisposableEnumeratorFactory)source).DisposedEnumeratorCount); + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_Iteration_Disposal_AsyncSource_GlobalRenaming() + { + using (Scope.Create(() => HostSettings.CustomAttributeLoader, loader => HostSettings.CustomAttributeLoader = loader)) + { + HostSettings.CustomAttributeLoader = new CamelCaseAttributeLoader(); + + var source = TestEnumerable.CreateAsync("foo", "bar", "baz"); + + engine.Script.done = new ManualResetEventSlim(); + engine.AddRestrictedHostObject("source", source); + engine.Execute(@" + result = ''; + (async function () { + for await (let item of source) { + result += item; + } + done.set(); + })(); + "); + engine.Script.done.Wait(); + + Assert.AreEqual("foobarbaz", engine.Script.result); + Assert.AreEqual(1, ((TestEnumerable.IDisposableEnumeratorFactory)source).DisposedEnumeratorCount); + } + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_Iteration_Disposal_AsyncSource_DisableTypeRestriction() + { + engine.DisableTypeRestriction = true; + + var source = TestEnumerable.CreateAsync("foo", "bar", "baz"); + + engine.Script.done = new ManualResetEventSlim(); + engine.AddRestrictedHostObject("source", source); + engine.Execute(@" + result = ''; + (async function () { + for await (let item of source) { + result += item; + } + done.Set(); + })(); + "); + engine.Script.done.Wait(); + + Assert.AreEqual("foobarbaz", engine.Script.result); + Assert.AreEqual(1, ((TestEnumerable.IDisposableEnumeratorFactory)source).DisposedEnumeratorCount); + } + [TestMethod, TestCategory("V8ScriptEngine")] public void V8ScriptEngine_AsyncIteration_PropertyBag() { @@ -3221,6 +3297,234 @@ public void V8ScriptEngine_AsyncIteration_Array_DisableTypeRestriction() Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); } + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_AsyncIteration_AsyncEnumerable() + { + static async IAsyncEnumerable GetItems() + { + await Task.Delay(10); + yield return 123; + await Task.Delay(10); + yield return "blah"; + } + + engine.Script.done = new ManualResetEventSlim(); + engine.Script.enumerable = GetItems(); + engine.Execute(@" + result = ''; + (async function () { + for await (var item of enumerable) { + result += item; + } + done.Set(); + })(); + "); + engine.Script.done.Wait(); + + var result = (string)engine.Script.result; + Assert.AreEqual(7, result.Length); + Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); + Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_GlobalRenaming() + { + using (Scope.Create(() => HostSettings.CustomAttributeLoader, loader => HostSettings.CustomAttributeLoader = loader)) + { + HostSettings.CustomAttributeLoader = new CamelCaseAttributeLoader(); + + static async IAsyncEnumerable GetItems() + { + await Task.Delay(10); + yield return 123; + await Task.Delay(10); + yield return "blah"; + } + + engine.Script.done = new ManualResetEventSlim(); + engine.Script.enumerable = GetItems(); + engine.Execute(@" + result = ''; + (async function () { + for await (var item of enumerable) { + result += item; + } + done.set(); + })(); + "); + engine.Script.done.Wait(); + + var result = (string)engine.Script.result; + Assert.AreEqual(7, result.Length); + Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); + Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); + } + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_DisableTypeRestriction() + { + engine.DisableTypeRestriction = true; + + static async IAsyncEnumerable GetItems() + { + await Task.Delay(10); + yield return 123; + await Task.Delay(10); + yield return "blah"; + } + + engine.Script.done = new ManualResetEventSlim(); + engine.Script.enumerable = GetItems(); + engine.Execute(@" + result = ''; + (async function () { + for await (var item of enumerable) { + result += item; + } + done.Set(); + })(); + "); + engine.Script.done.Wait(); + + var result = (string)engine.Script.result; + Assert.AreEqual(7, result.Length); + Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); + Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_Exception() + { + const string errorMessage = "Well, this is bogus!"; + static async IAsyncEnumerable GetItems() + { + await Task.Delay(10); + yield return 123; + await Task.Delay(10); + yield return "blah"; + throw new InvalidOperationException(errorMessage); + } + + engine.Script.done = new ManualResetEventSlim(); + engine.Script.enumerable = GetItems(); + engine.Execute(@" + result = ''; + (async function () { + try { + for await (var item of enumerable) { + result += item; + } + } + catch (error) { + errorMessage = error.message; + throw error; + } + finally { + done.Set(); + } + })(); + "); + engine.Script.done.Wait(); + + var result = (string)engine.Script.result; + Assert.AreEqual(7, result.Length); + Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); + Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); + Assert.AreEqual(errorMessage, engine.Script.errorMessage); + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_Exception_GlobalRenaming() + { + using (Scope.Create(() => HostSettings.CustomAttributeLoader, loader => HostSettings.CustomAttributeLoader = loader)) + { + HostSettings.CustomAttributeLoader = new CamelCaseAttributeLoader(); + + const string errorMessage = "Well, this is bogus!"; + static async IAsyncEnumerable GetItems() + { + await Task.Delay(10); + yield return 123; + await Task.Delay(10); + yield return "blah"; + throw new InvalidOperationException(errorMessage); + } + + engine.Script.done = new ManualResetEventSlim(); + engine.Script.enumerable = GetItems(); + engine.Execute(@" + result = ''; + (async function () { + try { + for await (var item of enumerable) { + result += item; + } + } + catch (error) { + errorMessage = error.message; + throw error; + } + finally { + done.set(); + } + })(); + "); + engine.Script.done.Wait(); + + var result = (string)engine.Script.result; + Assert.AreEqual(7, result.Length); + Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); + Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); + Assert.AreEqual(errorMessage, engine.Script.errorMessage); + } + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_AsyncIteration_AsyncEnumerable_Exception_DisableTypeRestriction() + { + engine.DisableTypeRestriction = true; + + const string errorMessage = "Well, this is bogus!"; + + static async IAsyncEnumerable GetItems() + { + await Task.Delay(10); + yield return 123; + await Task.Delay(10); + yield return "blah"; + throw new InvalidOperationException(errorMessage); + } + + engine.Script.done = new ManualResetEventSlim(); + engine.Script.enumerable = GetItems(); + engine.Execute(@" + result = ''; + (async function () { + try { + for await (var item of enumerable) { + result += item; + } + } + catch (error) { + errorMessage = error.message; + throw error; + } + finally { + done.Set(); + } + })(); + "); + engine.Script.done.Wait(); + + var result = (string)engine.Script.result; + Assert.AreEqual(7, result.Length); + Assert.IsTrue(result.IndexOf("123", StringComparison.Ordinal) >= 0); + Assert.IsTrue(result.IndexOf("blah", StringComparison.Ordinal) >= 0); + Assert.AreEqual(errorMessage, engine.Script.errorMessage); + } + [TestMethod, TestCategory("V8ScriptEngine")] public void V8ScriptEngine_SuppressInstanceMethodEnumeration() { @@ -3311,6 +3615,197 @@ public void V8ScriptEngine_TaskPromiseConversion() Assert.AreEqual(456, engine.Script.result); } + [TestMethod, TestCategory("V8ScriptEngine")] + public async Task V8ScriptEngine_TaskPromiseConversion_TaskOptimizations() + { + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion); + engine.AddHostType(typeof(Task)); + + var task = (Task)engine.Evaluate("(async function () { await Task.Delay(500); return 'foo'; })()"); + Assert.IsFalse(task.IsCompleted); + Assert.AreEqual("foo", await task); + + task = (Task)engine.Evaluate("(async function () { await Task.Delay(500); throw new Error('Huh?'); })()"); + Assert.IsFalse(task.IsCompleted); + + var gotException = false; + try + { + await task; + } + catch (Exception exception) + { + Assert.IsTrue(exception.Message.Contains("Huh?")); + gotException = true; + } + Assert.IsTrue(gotException); + + task = (Task)engine.Evaluate("(async function () { return 'bar'; })()"); + Assert.AreEqual(TaskStatus.RanToCompletion, task.Status); + Assert.AreEqual("bar", await task); + + task = (Task)engine.Evaluate("(async function () { throw new Error('Blah!'); })()"); + Assert.IsTrue(task.IsFaulted); + + gotException = false; + try + { + await task; + } + catch (Exception exception) + { + Assert.IsTrue(exception.Message.Contains("Blah!")); + gotException = true; + } + Assert.IsTrue(gotException); + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public async Task V8ScriptEngine_TaskPromiseConversion_PromiseOptimizations() + { + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion); + + engine.Script.promise = Task.Delay(500); + Assert.AreEqual(0, engine.Evaluate("EngineInternal.getPromiseState(promise)")); + Assert.IsInstanceOfType(engine.Evaluate("EngineInternal.getPromiseResult(promise)"), typeof(Undefined)); + Assert.AreEqual(123, await (Task)engine.Evaluate("(async function () { await promise; return 123; })()")); + + engine.Script.promise = Task.Run(async () => { await Task.Delay(500); throw new InvalidOperationException("Boom!"); }); + Assert.AreEqual(0, engine.Evaluate("EngineInternal.getPromiseState(promise)")); + Assert.IsInstanceOfType(engine.Evaluate("EngineInternal.getPromiseResult(promise)"), typeof(Undefined)); + + var gotException = false; + try + { + await (Task)engine.Evaluate("(async function () { await promise; })()"); + } + catch (Exception exception) + { + Assert.IsTrue(exception.Message.Contains("Boom!")); + gotException = true; + } + Assert.IsTrue(gotException); + + engine.Script.promise = Task.CompletedTask; + Assert.AreEqual(1, engine.Evaluate("EngineInternal.getPromiseState(promise)")); + Assert.IsInstanceOfType(engine.Evaluate("EngineInternal.getPromiseResult(promise)"), typeof(Undefined)); + Assert.AreEqual(456, await (Task)engine.Evaluate("(async function () { await promise; return 456; })()")); + + engine.Script.promise = Task.FromException(new InvalidOperationException("Meh?!")); + Assert.AreEqual(2, engine.Evaluate("EngineInternal.getPromiseState(promise)")); + Assert.IsTrue((engine.Evaluate("EngineInternal.getPromiseResult(promise)") is ScriptObject error1) && ((string)error1["message"]).Contains("Meh?!")); + + gotException = false; + try + { + await (Task)engine.Evaluate("(async function () { await promise; })()"); + } + catch (Exception exception) + { + Assert.IsTrue(exception.Message.Contains("Meh?!")); + gotException = true; + } + Assert.IsTrue(gotException); + + engine.Script.promise = Task.Run(async () => { await Task.Delay(500); return 789; }); + Assert.AreEqual(0, engine.Evaluate("EngineInternal.getPromiseState(promise)")); + Assert.IsInstanceOfType(engine.Evaluate("EngineInternal.getPromiseResult(promise)"), typeof(Undefined)); + Assert.AreEqual(789, await (Task)engine.Evaluate("(async function () { return await promise; })()")); + + engine.Script.promise = Task.FromResult(987); + Assert.AreEqual(1, engine.Evaluate("EngineInternal.getPromiseState(promise)")); + Assert.AreEqual(987, engine.Evaluate("EngineInternal.getPromiseResult(promise)")); + Assert.AreEqual(987, await (Task)engine.Evaluate("(async function () { return await promise; })()")); + + engine.Script.promise = Task.FromException(new InvalidOperationException("Yuck!?")); + Assert.AreEqual(2, engine.Evaluate("EngineInternal.getPromiseState(promise)")); + Assert.IsTrue((engine.Evaluate("EngineInternal.getPromiseResult(promise)") is ScriptObject error2) && ((string)error2["message"]).Contains("Yuck!?")); + + gotException = false; + try + { + await (Task)engine.Evaluate("(async function () { await promise; })()"); + } + catch (Exception exception) + { + Assert.IsTrue(exception.Message.Contains("Yuck!?")); + gotException = true; + } + Assert.IsTrue(gotException); + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_ValueTaskPromiseConversion() + { + engine.Script.value = new ValueTask("foo"); + Assert.AreEqual("HostObject", engine.Evaluate("value.constructor.name")); + Assert.IsInstanceOfType(engine.Evaluate("Promise.resolve(123)"), typeof(ScriptObject)); + + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion | V8ScriptEngineFlags.EnableValueTaskPromiseConversion); + + engine.Script.value = new ValueTask("bar"); + Assert.AreEqual("Promise", engine.Evaluate("value.constructor.name")); + Assert.IsInstanceOfType(engine.Evaluate("Promise.resolve(123)"), typeof(Task)); + + var task = new Func>(async () => await (Task)engine.Evaluate("Promise.resolve(123)"))(); + Assert.AreEqual(123, task.Result); + + engine.Script.promise = new ValueTask(456); + engine.Execute("promise.then(value => result = value);"); + Assert.AreEqual(456, engine.Script.result); + + var cancelSource = new CancellationTokenSource(); + cancelSource.Cancel(); + engine.Script.promise = new ValueTask(Task.Factory.StartNew(() => "baz", cancelSource.Token)); + Thread.Sleep(250); + engine.Execute("promise.then(value => result = value, value => error = value);"); + Assert.IsInstanceOfType(engine.Script.error.hostException.GetBaseException(), typeof(TaskCanceledException)); + + cancelSource = new CancellationTokenSource(); + engine.Script.promise = new ValueTask(Task.Factory.StartNew(() => throw new ConstraintException(), cancelSource.Token)); + Thread.Sleep(250); + engine.Execute("promise.then(value => result = value, value => error = value);"); + Assert.IsInstanceOfType(engine.Script.error.hostException.GetBaseException(), typeof(ConstraintException)); + } + + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_ValueTaskPromiseConversion_NoResult() + { + engine.Script.value = new ValueTask(Task.CompletedTask); + Assert.AreEqual("HostObject", engine.Evaluate("value.constructor.name")); + Assert.IsInstanceOfType(engine.Evaluate("Promise.resolve(123)"), typeof(ScriptObject)); + + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableTaskPromiseConversion | V8ScriptEngineFlags.EnableValueTaskPromiseConversion); + + engine.Script.value = new ValueTask(Task.CompletedTask); + Assert.AreEqual("Promise", engine.Evaluate("value.constructor.name")); + Assert.IsInstanceOfType(engine.Evaluate("Promise.resolve(123)"), typeof(Task)); + + var task = new Func>(async () => await (Task)engine.Evaluate("Promise.resolve(123)"))(); + Assert.AreEqual(123, task.Result); + + engine.Script.promise = new ValueTask(Task.CompletedTask); + engine.Execute("promise.then(value => result = value);"); + Assert.IsInstanceOfType(engine.Script.result, typeof(Undefined)); + + var cancelSource = new CancellationTokenSource(); + cancelSource.Cancel(); + engine.Script.promise = new ValueTask(Task.Factory.StartNew(() => {}, cancelSource.Token)); + Thread.Sleep(250); + engine.Execute("promise.then(value => result = value, value => error = value);"); + Assert.IsInstanceOfType(engine.Script.error.hostException.GetBaseException(), typeof(TaskCanceledException)); + + cancelSource = new CancellationTokenSource(); + engine.Script.promise = new ValueTask(Task.Factory.StartNew(() => throw new ConstraintException(), cancelSource.Token)); + Thread.Sleep(250); + engine.Execute("promise.then(value => result = value, value => error = value);"); + Assert.IsInstanceOfType(engine.Script.error.hostException.GetBaseException(), typeof(ConstraintException)); + } + [TestMethod, TestCategory("V8ScriptEngine")] public void V8ScriptEngine_DateTimeConversion_FromScript() { @@ -3723,14 +4218,16 @@ public void V8ScriptEngine_ScriptArray_IList() [TestMethod, TestCategory("V8ScriptEngine")] public void V8ScriptEngine_ScriptObject_IDictionary() { + // ReSharper disable UsageOfDefaultStructEquality + var pairs = new List> { - new KeyValuePair("123", 987), - new KeyValuePair("456", 654.321), - new KeyValuePair("abc", 123), - new KeyValuePair("def", 456.789), - new KeyValuePair("ghi", "foo"), - new KeyValuePair("jkl", engine.Evaluate("({ bar: 'baz' })")) + new("123", 987), + new("456", 654.321), + new("abc", 123), + new("def", 456.789), + new("ghi", "foo"), + new("jkl", engine.Evaluate("({ bar: 'baz' })")) }; var dict = (IDictionary)engine.Evaluate("dict = {}"); @@ -3790,6 +4287,8 @@ public void V8ScriptEngine_ScriptObject_IDictionary() Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("delete dict[789]"))); Assert.IsTrue(pairs.SequenceEqual(dict)); + + // ReSharper restore UsageOfDefaultStructEquality } [TestMethod, TestCategory("V8ScriptEngine")] @@ -3807,6 +4306,21 @@ public void V8ScriptEngine_UndefinedImportValue() Assert.AreEqual(123, engine.Evaluate("undefined")); } + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_NullImportValue() + { + Assert.IsNull(engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("undefined"), typeof(Undefined)); + + engine.NullImportValue = Undefined.Value; + Assert.IsInstanceOfType(engine.Evaluate("null"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("undefined"), typeof(Undefined)); + + engine.NullImportValue = 123; + Assert.AreEqual(123, engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("undefined"), typeof(Undefined)); + } + [TestMethod, TestCategory("V8ScriptEngine")] public void V8ScriptEngine_NullExportValue() { @@ -3889,23 +4403,21 @@ public void V8ScriptEngine_BigInt() } [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_BigInt_NoLongConversion() + public void V8ScriptEngine_BigInt_NoInt64Conversion() { - const long maxIntInDouble = (1L << 53) - 1; - - engine.Script.value = maxIntInDouble; + engine.Script.value = MiscHelpers.MaxInt64InDouble; Assert.AreEqual("number", engine.Evaluate("typeof value")); - engine.Script.value = maxIntInDouble + 1; + engine.Script.value = MiscHelpers.MaxInt64InDouble + 1; Assert.AreEqual("number", engine.Evaluate("typeof value")); - engine.Script.value = -maxIntInDouble; + engine.Script.value = -MiscHelpers.MaxInt64InDouble; Assert.AreEqual("number", engine.Evaluate("typeof value")); - engine.Script.value = -maxIntInDouble - 1; + engine.Script.value = -MiscHelpers.MaxInt64InDouble - 1; Assert.AreEqual("number", engine.Evaluate("typeof value")); - engine.Script.value = (ulong)maxIntInDouble; + engine.Script.value = (ulong)MiscHelpers.MaxInt64InDouble; Assert.AreEqual("number", engine.Evaluate("typeof value")); - engine.Script.value = (ulong)maxIntInDouble + 1; + engine.Script.value = (ulong)MiscHelpers.MaxInt64InDouble + 1; Assert.AreEqual("number", engine.Evaluate("typeof value")); engine.Script.value = int.MinValue; @@ -3915,26 +4427,24 @@ public void V8ScriptEngine_BigInt_NoLongConversion() } [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_BigInt_UnsafeLongConversion() + public void V8ScriptEngine_BigInt_UnsafeInt64Conversion() { - const long maxIntInDouble = (1L << 53) - 1; - engine.Dispose(); - engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.MarshalUnsafeLongAsBigInt); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.MarshalUnsafeInt64AsBigInt); - engine.Script.value = maxIntInDouble; + engine.Script.value = MiscHelpers.MaxInt64InDouble; Assert.AreEqual("number", engine.Evaluate("typeof value")); - engine.Script.value = maxIntInDouble + 1; + engine.Script.value = MiscHelpers.MaxInt64InDouble + 1; Assert.AreEqual("bigint", engine.Evaluate("typeof value")); - engine.Script.value = -maxIntInDouble; + engine.Script.value = -MiscHelpers.MaxInt64InDouble; Assert.AreEqual("number", engine.Evaluate("typeof value")); - engine.Script.value = -maxIntInDouble - 1; + engine.Script.value = -MiscHelpers.MaxInt64InDouble - 1; Assert.AreEqual("bigint", engine.Evaluate("typeof value")); - engine.Script.value = (ulong)maxIntInDouble; + engine.Script.value = (ulong)MiscHelpers.MaxInt64InDouble; Assert.AreEqual("number", engine.Evaluate("typeof value")); - engine.Script.value = (ulong)maxIntInDouble + 1; + engine.Script.value = (ulong)MiscHelpers.MaxInt64InDouble + 1; Assert.AreEqual("bigint", engine.Evaluate("typeof value")); engine.Script.value = int.MinValue; @@ -3944,26 +4454,24 @@ public void V8ScriptEngine_BigInt_UnsafeLongConversion() } [TestMethod, TestCategory("V8ScriptEngine")] - public void V8ScriptEngine_BigInt_AllLongConversion() + public void V8ScriptEngine_BigInt_AllInt64Conversion() { - const long maxIntInDouble = (1L << 53) - 1; - engine.Dispose(); - engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.MarshalAllLongAsBigInt); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.MarshalAllInt64AsBigInt); - engine.Script.value = maxIntInDouble; + engine.Script.value = MiscHelpers.MaxInt64InDouble; Assert.AreEqual("bigint", engine.Evaluate("typeof value")); - engine.Script.value = maxIntInDouble + 1; + engine.Script.value = MiscHelpers.MaxInt64InDouble + 1; Assert.AreEqual("bigint", engine.Evaluate("typeof value")); - engine.Script.value = -maxIntInDouble; + engine.Script.value = -MiscHelpers.MaxInt64InDouble; Assert.AreEqual("bigint", engine.Evaluate("typeof value")); - engine.Script.value = -maxIntInDouble - 1; + engine.Script.value = -MiscHelpers.MaxInt64InDouble - 1; Assert.AreEqual("bigint", engine.Evaluate("typeof value")); - engine.Script.value = (ulong)maxIntInDouble; + engine.Script.value = (ulong)MiscHelpers.MaxInt64InDouble; Assert.AreEqual("bigint", engine.Evaluate("typeof value")); - engine.Script.value = (ulong)maxIntInDouble + 1; + engine.Script.value = (ulong)MiscHelpers.MaxInt64InDouble + 1; Assert.AreEqual("bigint", engine.Evaluate("typeof value")); engine.Script.value = int.MinValue; @@ -4810,7 +5318,7 @@ public void V8ScriptEngine_Compilation_CacheResult_Module() engine.Dispose(); engine = runtime.CreateScriptEngine(); // default engine enables debugging, which disables caching (in older V8 versions) - const string code = "let obj = { foo: 123, bar: 'baz', qux: 456.789 }; let count = 0; for (let name in obj) count += 1; Math.PI"; + const string code = "let obj = { foo: 123, bar: 'baz', qux: 456.789 }; let count = 0; for (let name in obj) count += 1; import.meta.setResult(Math.PI)"; var info = new DocumentInfo("foo.js") { Category = ModuleCategory.Standard }; byte[] goodCacheBytes; @@ -5069,7 +5577,7 @@ public void V8ScriptEngine_DocumentCompilation_CacheResult_Module() engine.Dispose(); engine = runtime.CreateScriptEngine(); // default engine enables debugging, which disables caching (in older V8 versions) - const string code = "let obj = { foo: 123, bar: 'baz', qux: 456.789 }; let count = 0; for (let name in obj) count += 1; Math.PI"; + const string code = "let obj = { foo: 123, bar: 'baz', qux: 456.789 }; let count = 0; for (let name in obj) count += 1; import.meta.setResult(Math.PI)"; byte[] goodCacheBytes; runtime.DocumentSettings.AccessFlags = DocumentAccessFlags.EnableFileLoading; @@ -5273,7 +5781,7 @@ public void V8ScriptEngine_PerformanceObject() return (Performance.now() - start) / 1000; })()")); - Assert.IsTrue((average >= 5) && (average < 5.5)); + Assert.IsTrue((average >= 5) && (average < 7.5)); var delta = Convert.ToDouble(engine.Evaluate(@" Math.abs(Performance.timeOrigin + Performance.now() - Date.now()); @@ -5282,6 +5790,56 @@ public void V8ScriptEngine_PerformanceObject() Assert.IsTrue(delta < 5); } + [TestMethod, TestCategory("V8ScriptEngine")] + public void V8ScriptEngine_ArrayConversion() + { + engine.Script.array = new object[0]; + var array = engine.Script.array as object[]; + Assert.IsNotNull(array); + + var scriptArray = engine.Evaluate("([])") as IJavaScriptObject; + Assert.IsNotNull(scriptArray); + Assert.IsTrue(scriptArray.Kind == JavaScriptObjectKind.Array); + + engine.Dispose(); + engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableArrayConversion | V8ScriptEngineFlags.EnableDateTimeConversion); + + engine.Execute(@" + array = [ 123, 'foo' ]; + array.push(new Date(), [ 456, 'bar', array ]); + "); + + array = engine.Script.array as object[]; + Assert.IsNotNull(array); + Assert.AreEqual(4, array.Length); + Assert.AreEqual(123, array[0]); + Assert.AreEqual("foo", array[1]); + Assert.IsInstanceOfType(array[2], typeof(DateTime)); + + var innerArray = array[3] as object[]; + Assert.IsNotNull(innerArray); + Assert.AreEqual(3, innerArray.Length); + Assert.AreEqual(456, innerArray[0]); + Assert.AreEqual("bar", innerArray[1]); + Assert.AreEqual(array, innerArray[2]); + + array = new object[] { 789, "baz", DateTime.Now, null }; + array[3] = new object[] { 987, "qux", array }; + engine.Script.array = array; + + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("Array.isArray(array)"))); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("array.length === 4"))); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("array[0] === 789"))); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("array[1] === 'baz'"))); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("array[2] instanceof Date"))); + + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("Array.isArray(array[3])"))); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("array[3].length === 3"))); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("array[3][0] === 987"))); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("array[3][1] === 'qux'"))); + Assert.IsTrue(Convert.ToBoolean(engine.Evaluate("array[3][2] === array"))); + } + // ReSharper restore InconsistentNaming #endregion @@ -5651,7 +6209,7 @@ public ConstructorBindingTest(double c, int a = 789, string b = "bar") public class SingleThreadSynchronizationContext : SynchronizationContext { - private readonly BlockingCollection<(SendOrPostCallback, object)> queue = new BlockingCollection<(SendOrPostCallback, object)>(); + private readonly BlockingCollection<(SendOrPostCallback, object)> queue = new(); private readonly Thread thread; private SingleThreadSynchronizationContext() diff --git a/ClearScriptTest/VBScriptCoreEngineTest.cs b/ClearScriptTest/VBScriptCoreEngineTest.cs index a1d468f0a..fc4d052ed 100644 --- a/ClearScriptTest/VBScriptCoreEngineTest.cs +++ b/ClearScriptTest/VBScriptCoreEngineTest.cs @@ -2974,6 +2974,24 @@ public void VBScriptCoreEngine_UndefinedImportValue() Assert.AreEqual(123, engine.Evaluate("nothing")); } + [TestMethod, TestCategory("VBScriptCoreEngine")] + public void VBScriptCoreEngine_NullImportValue() + { + Assert.IsNull(engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("empty"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("nothing"), typeof(Undefined)); + + engine.NullImportValue = Undefined.Value; + Assert.IsInstanceOfType(engine.Evaluate("null"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("empty"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("nothing"), typeof(Undefined)); + + engine.NullImportValue = 123; + Assert.AreEqual(123, engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("empty"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("nothing"), typeof(Undefined)); + } + [TestMethod, TestCategory("VBScriptCoreEngine")] public void VBScriptCoreEngine_NullExportValue() { diff --git a/ClearScriptTest/VBScriptEngineTest.cs b/ClearScriptTest/VBScriptEngineTest.cs index ddc06b0e5..3556dc1b6 100644 --- a/ClearScriptTest/VBScriptEngineTest.cs +++ b/ClearScriptTest/VBScriptEngineTest.cs @@ -3043,6 +3043,24 @@ public void VBScriptEngine_UndefinedImportValue() Assert.AreEqual(123, engine.Evaluate("nothing")); } + [TestMethod, TestCategory("VBScriptEngine")] + public void VBScriptEngine_NullImportValue() + { + Assert.IsNull(engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("empty"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("nothing"), typeof(Undefined)); + + engine.NullImportValue = Undefined.Value; + Assert.IsInstanceOfType(engine.Evaluate("null"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("empty"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("nothing"), typeof(Undefined)); + + engine.NullImportValue = 123; + Assert.AreEqual(123, engine.Evaluate("null")); + Assert.IsInstanceOfType(engine.Evaluate("empty"), typeof(Undefined)); + Assert.IsInstanceOfType(engine.Evaluate("nothing"), typeof(Undefined)); + } + [TestMethod, TestCategory("VBScriptEngine")] public void VBScriptEngine_NullExportValue() { diff --git a/ClearScriptV8/ClearScriptV8Native.h b/ClearScriptV8/ClearScriptV8Native.h index 15fe23310..d12afc57e 100644 --- a/ClearScriptV8/ClearScriptV8Native.h +++ b/ClearScriptV8/ClearScriptV8Native.h @@ -34,3 +34,4 @@ #include "V8ScriptHolderImpl.h" #include "V8SplitProxyNative.h" #include "V8SplitProxyManaged.h" +#include "V8ValueWireData.h" diff --git a/ClearScriptV8/CommonPlatform.h b/ClearScriptV8/CommonPlatform.h index ca50a2cb5..78469e855 100644 --- a/ClearScriptV8/CommonPlatform.h +++ b/ClearScriptV8/CommonPlatform.h @@ -95,53 +95,74 @@ // global helper functions //----------------------------------------------------------------------------- +template +inline std::underlying_type_t ToUnderlyingType(T value) +{ + return static_cast>(value); +} + +//----------------------------------------------------------------------------- + +template +inline T ToEnum(std::underlying_type_t value) +{ + return static_cast(value); +} + +//----------------------------------------------------------------------------- + template -inline bool HasFlag(TFlag mask, TFlag flag) +inline TFlag CombineFlags(TFlag flag1, TFlag flag2) { - using TUnderlying = std::underlying_type_t; - return (static_cast(mask) & static_cast(flag)) != 0; + return ::ToEnum(::ToUnderlyingType(flag1) | ::ToUnderlyingType(flag2)); } //----------------------------------------------------------------------------- template -inline bool HasFlag(TFlag mask, TOthers... others) +inline TFlag CombineFlags(TFlag flag1, TFlag flag2, TOthers... others) { - return HasFlag(mask, CombineFlags(others...)); + return ::CombineFlags(flag1, ::CombineFlags(flag2, others...)); } //----------------------------------------------------------------------------- template -inline bool HasFlags(TFlag mask, TFlag flags) +inline bool HasFlag(TFlag mask, TFlag flag) +{ + return (::ToUnderlyingType(mask) & ::ToUnderlyingType(flag)) != 0; +} + +//----------------------------------------------------------------------------- + +template +inline bool HasAnyFlag(TFlag mask, TFlag flag) { - using TUnderlying = std::underlying_type_t; - return (static_cast(mask) & static_cast(flags)) == static_cast(flags); + return ::HasFlag(mask, flag); } //----------------------------------------------------------------------------- template -inline bool HasFlags(TFlag mask, TOthers... others) +inline bool HasAnyFlag(TFlag mask, TFlag flag1, TOthers... others) { - return HasFlags(mask, CombineFlags(others...)); + return ::HasAnyFlag(mask, ::CombineFlags(flag1, others...)); } //----------------------------------------------------------------------------- template -inline TFlag CombineFlags(TFlag flag1, TFlag flag2) +inline bool HasAllFlags(TFlag mask, TFlag flags) { - using TUnderlying = std::underlying_type_t; - return static_cast(static_cast(flag1) | static_cast(flag2)); + return (::ToUnderlyingType(mask) & ::ToUnderlyingType(flags)) == ::ToUnderlyingType(flags); } //----------------------------------------------------------------------------- template -inline TFlag CombineFlags(TFlag flag1, TFlag flag2, TOthers... others) +inline bool HasAllFlags(TFlag mask, TFlag flag1, TOthers... others) { - return CombineFlags(flag1, CombineFlags(flag2, others...)); + return ::HasAllFlags(mask, ::CombineFlags(flag1, others...)); } //----------------------------------------------------------------------------- @@ -249,3 +270,12 @@ class PulseValueScope final //----------------------------------------------------------------------------- using StdBool = int8_t; + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- + +struct Constants final: StaticBase +{ + static const size_t MaxInlineArgCount = 16; +}; diff --git a/ClearScriptV8/HighResolutionClock.cpp b/ClearScriptV8/HighResolutionClock.cpp index e915430bb..b52e5cc39 100644 --- a/ClearScriptV8/HighResolutionClock.cpp +++ b/ClearScriptV8/HighResolutionClock.cpp @@ -7,18 +7,23 @@ // HighResolutionClock implementation //----------------------------------------------------------------------------- -void HighResolutionClock::SleepMilliseconds(double delay, bool precise) +double HighResolutionClock::SleepMilliseconds(double delay, bool precise) { + auto start = std::chrono::high_resolution_clock::now(); + auto end = start + std::chrono::duration(delay); + std::chrono::high_resolution_clock::time_point final; + if (!precise) { std::this_thread::sleep_for(std::chrono::duration(delay)); + final = std::chrono::high_resolution_clock::now(); } else { - auto start = std::chrono::high_resolution_clock::now(); - auto end = start + std::chrono::duration(delay); - while (std::chrono::high_resolution_clock::now() < end) std::this_thread::yield(); + while ((final = std::chrono::high_resolution_clock::now()) < end) std::this_thread::yield(); } + + return std::chrono::duration(final - end).count(); } //----------------------------------------------------------------------------- diff --git a/ClearScriptV8/HighResolutionClock.h b/ClearScriptV8/HighResolutionClock.h index 7cb1da1af..761751c39 100644 --- a/ClearScriptV8/HighResolutionClock.h +++ b/ClearScriptV8/HighResolutionClock.h @@ -11,7 +11,7 @@ struct HighResolutionClock final: StaticBase { static bool SetTimerResolution(); static void RestoreTimerResolution(); - static void SleepMilliseconds(double delay, bool precise); + static double SleepMilliseconds(double delay, bool precise); static double GetMillisecondsSinceUnixEpoch(); static double GetRelativeMilliseconds(); static double GetRelativeSeconds(); diff --git a/ClearScriptV8/HostObjectHolder.h b/ClearScriptV8/HostObjectHolder.h index 159add583..b2e3b83f5 100644 --- a/ClearScriptV8/HostObjectHolder.h +++ b/ClearScriptV8/HostObjectHolder.h @@ -12,7 +12,10 @@ class HostObjectHolder public: virtual HostObjectHolder* Clone() const = 0; + virtual void* GetObject() const = 0; + virtual uint8_t GetSubtype() const = 0; + virtual uint16_t GetFlags() const = 0; virtual ~HostObjectHolder() {} }; diff --git a/ClearScriptV8/HostObjectHolderImpl.cpp b/ClearScriptV8/HostObjectHolderImpl.cpp index bfb8a8e88..e08672d58 100644 --- a/ClearScriptV8/HostObjectHolderImpl.cpp +++ b/ClearScriptV8/HostObjectHolderImpl.cpp @@ -7,8 +7,10 @@ // HostObjectHolderImpl implementation //----------------------------------------------------------------------------- -HostObjectHolderImpl::HostObjectHolderImpl(void* pvObject): - m_pvObject(pvObject) +HostObjectHolderImpl::HostObjectHolderImpl(void* pvObject, uint8_t subtype, uint16_t flags): + m_pvObject(pvObject), + m_Subtype(subtype), + m_Flags(flags) { } @@ -16,7 +18,21 @@ HostObjectHolderImpl::HostObjectHolderImpl(void* pvObject): HostObjectHolderImpl* HostObjectHolderImpl::Clone() const { - return new HostObjectHolderImpl(HostObjectUtil::GetInstance().AddRef(m_pvObject)); + return new HostObjectHolderImpl(HostObjectUtil::AddRef(m_pvObject), m_Subtype, m_Flags); +} + +//----------------------------------------------------------------------------- + +uint8_t HostObjectHolderImpl::GetSubtype() const +{ + return m_Subtype; +} + +//----------------------------------------------------------------------------- + +uint16_t HostObjectHolderImpl::GetFlags() const +{ + return m_Flags; } //----------------------------------------------------------------------------- @@ -30,5 +46,5 @@ void* HostObjectHolderImpl::GetObject() const HostObjectHolderImpl::~HostObjectHolderImpl() { - HostObjectUtil::GetInstance().Release(m_pvObject); + HostObjectUtil::Release(m_pvObject); } diff --git a/ClearScriptV8/HostObjectHolderImpl.h b/ClearScriptV8/HostObjectHolderImpl.h index c3b96e822..cdbf4701f 100644 --- a/ClearScriptV8/HostObjectHolderImpl.h +++ b/ClearScriptV8/HostObjectHolderImpl.h @@ -13,14 +13,19 @@ class HostObjectHolderImpl final: public HostObjectHolder public: - explicit HostObjectHolderImpl(void* pvObject); + HostObjectHolderImpl(void* pvObject, uint8_t subtype, uint16_t flags); virtual HostObjectHolderImpl* Clone() const override; + virtual void* GetObject() const override; + virtual uint8_t GetSubtype() const override; + virtual uint16_t GetFlags() const override; ~HostObjectHolderImpl(); private: void* m_pvObject; + uint8_t m_Subtype; + uint16_t m_Flags; }; diff --git a/ClearScriptV8/HostObjectUtil.cpp b/ClearScriptV8/HostObjectUtil.cpp index 5d1f5ef3f..2205eb8f1 100644 --- a/ClearScriptV8/HostObjectUtil.cpp +++ b/ClearScriptV8/HostObjectUtil.cpp @@ -4,284 +4,452 @@ #include "ClearScriptV8Native.h" //----------------------------------------------------------------------------- -// HostObjectUtilNativeImpl +// HostObjectUtil implementation //----------------------------------------------------------------------------- -class HostObjectUtilNativeImpl: public IHostObjectUtil +void* HostObjectUtil::AddRef(void* pvObject) { - PROHIBIT_COPY(HostObjectUtilNativeImpl) - PROHIBIT_HEAP(HostObjectUtilNativeImpl) + return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, AddRefHostObject, pvObject); +} -public: +//----------------------------------------------------------------------------- - static IHostObjectUtil& GetInstance() noexcept - { - return s_Instance; - } +void HostObjectUtil::Release(void* pvObject) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(ReleaseHostObject, pvObject); +} - virtual void* AddRef(void* pvObject) override - { - return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, AddRefHostObject, pvObject); - } +//----------------------------------------------------------------------------- - virtual void Release(void* pvObject) override - { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(ReleaseHostObject, pvObject); - } +HostObjectUtil::Invocability HostObjectUtil::GetInvocability(void* pvObject) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE(Invocability, GetHostObjectInvocability, pvObject); +} - virtual V8Value GetProperty(void* pvObject, const StdString& name) override - { - V8Value value(V8Value::Nonexistent); - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectNamedProperty, pvObject, name, value); - return value; - } +//----------------------------------------------------------------------------- - virtual V8Value GetProperty(void* pvObject, const StdString& name, bool& isCacheable) override - { - V8Value value(V8Value::Nonexistent); - StdBool tempIsCacheable; - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectNamedPropertyWithCacheability, pvObject, name, value, tempIsCacheable); - isCacheable = (tempIsCacheable != 0); - return value; - } +V8Value HostObjectUtil::GetProperty(void* pvObject, const StdString& name, bool& isCacheable) +{ + V8Value value(V8Value::Nonexistent); + StdBool tempIsCacheable; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectNamedProperty, pvObject, name, value, tempIsCacheable); + isCacheable = (tempIsCacheable != 0); + return value; +} - virtual void SetProperty(void* pvObject, const StdString& name, const V8Value& value) override - { - V8Value::Decoded decodedValue; - value.Decode(decodedValue); - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(SetHostObjectNamedProperty, pvObject, name, decodedValue); - } +//----------------------------------------------------------------------------- - virtual bool DeleteProperty(void* pvObject, const StdString& name) override - { - return V8_SPLIT_PROXY_MANAGED_INVOKE(StdBool, DeleteHostObjectNamedProperty, pvObject, name); - } +void HostObjectUtil::SetProperty(void* pvObject, const StdString& name, const V8Value& value) +{ + V8Value::Decoded decodedValue; + value.Decode(decodedValue); + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(SetHostObjectNamedProperty, pvObject, name, decodedValue); +} - virtual void GetPropertyNames(void* pvObject, std::vector& names) override - { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectPropertyNames, pvObject, names); - } +//----------------------------------------------------------------------------- - virtual V8Value GetProperty(void* pvObject, int32_t index) override - { - V8Value value(V8Value::Nonexistent); - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectIndexedProperty, pvObject, index, value); - return value; - } +bool HostObjectUtil::DeleteProperty(void* pvObject, const StdString& name) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE(StdBool, DeleteHostObjectNamedProperty, pvObject, name); +} - virtual void SetProperty(void* pvObject, int32_t index, const V8Value& value) override - { - V8Value::Decoded decodedValue; - value.Decode(decodedValue); - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(SetHostObjectIndexedProperty, pvObject, index, decodedValue); - } +//----------------------------------------------------------------------------- - virtual bool DeleteProperty(void* pvObject, int32_t index) override - { - return V8_SPLIT_PROXY_MANAGED_INVOKE(StdBool, DeleteHostObjectIndexedProperty, pvObject, index); - } +void HostObjectUtil::GetPropertyNames(void* pvObject, std::vector& names) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectPropertyNames, pvObject, names); +} + +//----------------------------------------------------------------------------- + +V8Value HostObjectUtil::GetProperty(void* pvObject, int32_t index) +{ + V8Value value(V8Value::Nonexistent); + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectIndexedProperty, pvObject, index, value); + return value; +} + +//----------------------------------------------------------------------------- + +void HostObjectUtil::SetProperty(void* pvObject, int32_t index, const V8Value& value) +{ + V8Value::Decoded decodedValue; + value.Decode(decodedValue); + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(SetHostObjectIndexedProperty, pvObject, index, decodedValue); +} + +//----------------------------------------------------------------------------- + +bool HostObjectUtil::DeleteProperty(void* pvObject, int32_t index) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE(StdBool, DeleteHostObjectIndexedProperty, pvObject, index); +} + +//----------------------------------------------------------------------------- + +void HostObjectUtil::GetPropertyIndices(void* pvObject, std::vector& indices) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectPropertyIndices, pvObject, indices); +} + +//----------------------------------------------------------------------------- + +V8Value HostObjectUtil::Invoke(void* pvObject, bool asConstructor, size_t argCount, const V8Value* pArgs) +{ + V8Value result(V8Value::Nonexistent); - virtual void GetPropertyIndices(void* pvObject, std::vector& indices) override + if (argCount < 1) { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectPropertyIndices, pvObject, indices); + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObject, pvObject, asConstructor, 0, nullptr, result); } - - virtual V8Value Invoke(void* pvObject, bool asConstructor, const std::vector& args) override + else if (argCount <= Constants::MaxInlineArgCount) { - V8Value result(V8Value::Nonexistent); + V8Value::Decoded decodedArgs[argCount]; - auto argCount = args.size(); - if (argCount < 1) + for (size_t index = 0; index < argCount; index++) { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObject, pvObject, asConstructor, 0, nullptr, result); + pArgs[index].Decode(decodedArgs[index]); } - else - { - auto pArgs = args.data(); - - auto upDecodedArgs = std::make_unique(argCount); - auto pDecodedArgs = upDecodedArgs.get(); - for (size_t index = 0; index < argCount; index++) - { - pArgs[index].Decode(pDecodedArgs[index]); - } + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObject, pvObject, asConstructor, static_cast(argCount), decodedArgs, result); + } + else + { + auto upDecodedArgs = std::make_unique(argCount); + auto pDecodedArgs = upDecodedArgs.get(); - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObject, pvObject, asConstructor, static_cast(argCount), pDecodedArgs, result); + for (size_t index = 0; index < argCount; index++) + { + pArgs[index].Decode(pDecodedArgs[index]); } - return result; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObject, pvObject, asConstructor, static_cast(argCount), pDecodedArgs, result); } - virtual V8Value InvokeMethod(void* pvObject, const StdString& name, const std::vector& args) override + return result; +} + +//----------------------------------------------------------------------------- + +V8Value HostObjectUtil::InvokeMethod(void* pvObject, const StdString& name, size_t argCount, const V8Value* pArgs) +{ + V8Value result(V8Value::Nonexistent); + + if (argCount < 1) + { + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObjectMethod, pvObject, name, 0, nullptr, result); + } + else if (argCount <= Constants::MaxInlineArgCount) { - V8Value result(V8Value::Nonexistent); + V8Value::Decoded decodedArgs[argCount]; - auto argCount = args.size(); - if (argCount < 1) + for (size_t index = 0; index < argCount; index++) { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObjectMethod, pvObject, name, 0, nullptr, result); + pArgs[index].Decode(decodedArgs[index]); } - else - { - auto pArgs = args.data(); - auto upDecodedArgs = std::make_unique(argCount); - auto pDecodedArgs = upDecodedArgs.get(); - - for (size_t index = 0; index < argCount; index++) - { - pArgs[index].Decode(pDecodedArgs[index]); - } + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObjectMethod, pvObject, name, static_cast(argCount), decodedArgs, result); + } + else + { + auto upDecodedArgs = std::make_unique(argCount); + auto pDecodedArgs = upDecodedArgs.get(); - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObjectMethod, pvObject, name, static_cast(argCount), pDecodedArgs, result); + for (size_t index = 0; index < argCount; index++) + { + pArgs[index].Decode(pDecodedArgs[index]); } - return result; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObjectMethod, pvObject, name, static_cast(argCount), pDecodedArgs, result); } - virtual Invocability GetInvocability(void* pvObject) override - { - return V8_SPLIT_PROXY_MANAGED_INVOKE(Invocability, GetHostObjectInvocability, pvObject); - } + return result; +} - virtual V8Value GetEnumerator(void* pvObject) override - { - V8Value result(V8Value::Nonexistent); - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectEnumerator, pvObject, result); - return result; - } +//----------------------------------------------------------------------------- - virtual V8Value GetAsyncEnumerator(void* pvObject) override - { - V8Value result(V8Value::Nonexistent); - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectAsyncEnumerator, pvObject, result); - return result; - } +V8Value HostObjectUtil::GetEnumerator(void* pvObject) +{ + V8Value result(V8Value::Nonexistent); + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectEnumerator, pvObject, result); + return result; +} - virtual void* CreateV8ObjectCache() override - { - return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, CreateV8ObjectCache); - } +//----------------------------------------------------------------------------- - virtual void CacheV8Object(void* pvCache, void* pvObject, void* pvV8Object) override - { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(CacheV8Object, pvCache, pvObject, pvV8Object); - } +V8Value HostObjectUtil::GetAsyncEnumerator(void* pvObject) +{ + V8Value result(V8Value::Nonexistent); + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectAsyncEnumerator, pvObject, result); + return result; +} - virtual void* GetCachedV8Object(void* pvCache, void* pvObject) override - { - return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, GetCachedV8Object, pvCache, pvObject); - } +//----------------------------------------------------------------------------- - virtual void GetAllCachedV8Objects(void* pvCache, std::vector& v8ObjectPtrs) override - { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(GetAllCachedV8Objects, pvCache, v8ObjectPtrs); - } +void* HostObjectUtil::CreateV8ObjectCache() +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, CreateV8ObjectCache); +} - virtual bool RemoveV8ObjectCacheEntry(void* pvCache, void* pvObject) override - { - return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(StdBool, RemoveV8ObjectCacheEntry, pvCache, pvObject); - } +//----------------------------------------------------------------------------- - virtual void* CreateDebugAgent(const StdString& name, const StdString& version, int32_t port, bool remote, DebugCallback&& callback) override - { - return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, CreateDebugAgent, name, version, port, remote, new V8DebugCallbackHandle(new DebugCallback(std::move(callback)))); - } +void HostObjectUtil::CacheV8Object(void* pvCache, void* pvObject, void* pvV8Object) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(CacheV8Object, pvCache, pvObject, pvV8Object); +} - virtual void SendDebugMessage(void* pvAgent, const StdString& content) override - { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(SendDebugMessage, pvAgent, content); - } +//----------------------------------------------------------------------------- - virtual void DestroyDebugAgent(void* pvAgent) override - { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(DestroyDebugAgent, pvAgent); - } +void* HostObjectUtil::GetCachedV8Object(void* pvCache, void* pvObject) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, GetCachedV8Object, pvCache, pvObject); +} - virtual void QueueNativeCallback(NativeCallback&& callback) override - { - BEGIN_V8_RWX_HOST_SCOPE - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(QueueNativeCallback, new NativeCallbackHandle(new NativeCallback(std::move(callback)))); - END_V8_RWX_HOST_SCOPE - } +//----------------------------------------------------------------------------- - virtual void* CreateNativeCallbackTimer(int32_t dueTime, int32_t period, NativeCallback&& callback) override - { - BEGIN_V8_RWX_HOST_SCOPE - return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, CreateNativeCallbackTimer, dueTime, period, new NativeCallbackHandle(new NativeCallback(std::move(callback)))); - END_V8_RWX_HOST_SCOPE - } +void HostObjectUtil::GetAllCachedV8Objects(void* pvCache, std::vector& v8ObjectPtrs) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(GetAllCachedV8Objects, pvCache, v8ObjectPtrs); +} - virtual bool ChangeNativeCallbackTimer(void* pvTimer, int32_t dueTime, int32_t period) override - { - BEGIN_V8_RWX_HOST_SCOPE - return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(StdBool, ChangeNativeCallbackTimer, pvTimer, dueTime, period); - END_V8_RWX_HOST_SCOPE - } +//----------------------------------------------------------------------------- + +bool HostObjectUtil::RemoveV8ObjectCacheEntry(void* pvCache, void* pvObject) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(StdBool, RemoveV8ObjectCacheEntry, pvCache, pvObject); +} + +//----------------------------------------------------------------------------- + +void* HostObjectUtil::CreateDebugAgent(const StdString& name, const StdString& version, int32_t port, bool remote, DebugCallback&& callback) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, CreateDebugAgent, name, version, port, remote, new V8DebugCallbackHandle(new DebugCallback(std::move(callback)))); +} + +//----------------------------------------------------------------------------- + +void HostObjectUtil::SendDebugMessage(void* pvAgent, const StdString& content) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(SendDebugMessage, pvAgent, content); +} + +//----------------------------------------------------------------------------- + +void HostObjectUtil::DestroyDebugAgent(void* pvAgent) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(DestroyDebugAgent, pvAgent); +} + +//----------------------------------------------------------------------------- + +void HostObjectUtil::QueueNativeCallback(NativeCallback&& callback) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(QueueNativeCallback, new NativeCallbackHandle(new NativeCallback(std::move(callback)))); +} + +//----------------------------------------------------------------------------- + +void* HostObjectUtil::CreateNativeCallbackTimer(int32_t dueTime, int32_t period, NativeCallback&& callback) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, CreateNativeCallbackTimer, dueTime, period, new NativeCallbackHandle(new NativeCallback(std::move(callback)))); +} + +//----------------------------------------------------------------------------- + +bool HostObjectUtil::ChangeNativeCallbackTimer(void* pvTimer, int32_t dueTime, int32_t period) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(StdBool, ChangeNativeCallbackTimer, pvTimer, dueTime, period); +} + +//----------------------------------------------------------------------------- + +void HostObjectUtil::DestroyNativeCallbackTimer(void* pvTimer) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(DestroyNativeCallbackTimer, pvTimer); +} + +//----------------------------------------------------------------------------- - virtual void DestroyNativeCallbackTimer(void* pvTimer) override +StdString HostObjectUtil::LoadModule(const V8DocumentInfo& sourceDocumentInfo, const StdString& specifier, V8DocumentInfo& documentInfo, V8Value& exports) +{ + StdString resourceName; + StdString sourceMapUrl; + uint64_t uniqueId; + DocumentKind documentKind; + StdString code; + void* pvDocumentInfo; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(LoadModule, sourceDocumentInfo.GetDocumentInfo(), specifier, resourceName, sourceMapUrl, uniqueId, documentKind, code, pvDocumentInfo, exports); + + documentInfo = V8DocumentInfo(std::move(resourceName), std::move(sourceMapUrl), uniqueId, documentKind, pvDocumentInfo); + return code; +} + +//----------------------------------------------------------------------------- + +std::vector> HostObjectUtil::CreateModuleContext(const V8DocumentInfo& documentInfo) +{ + std::vector names; + std::vector values; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(CreateModuleContext, documentInfo.GetDocumentInfo(), names, values); + auto count = std::min(names.size(), values.size()); + + std::vector> context; + context.reserve(count); + for (size_t index = 0; index < count; index++) { - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(DestroyNativeCallbackTimer, pvTimer); + context.emplace_back(names[index], values[index]); } - virtual StdString LoadModule(const V8DocumentInfo& sourceDocumentInfo, const StdString& specifier, V8DocumentInfo& documentInfo, V8Value& exports) override + return context; +} + +//----------------------------------------------------------------------------- + +size_t HostObjectUtil::GetMaxScriptCacheSize() +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(int32_t, GetMaxScriptCacheSize); +} + +//----------------------------------------------------------------------------- + +size_t HostObjectUtil::GetMaxModuleCacheSize() +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(int32_t, GetMaxModuleCacheSize); +} + +//----------------------------------------------------------------------------- +// FastHostObjectUtil implementation +//----------------------------------------------------------------------------- + +V8Value FastHostObjectUtil::GetProperty(void* pvObject, const StdString& name, bool& isCacheable) +{ + V8Value::FastResult value; + StdBool tempIsCacheable; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetFastHostObjectNamedProperty, pvObject, name, value, tempIsCacheable); + isCacheable = (tempIsCacheable != 0); + return V8Value(value); +} + +//----------------------------------------------------------------------------- + +void FastHostObjectUtil::SetProperty(void* pvObject, const StdString& name, const V8Value& value) +{ + V8Value::FastArg fastValue; + value.Decode(fastValue); + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(SetFastHostObjectNamedProperty, pvObject, name, fastValue); +} + +//----------------------------------------------------------------------------- + +FastHostObjectUtil::PropertyFlags FastHostObjectUtil::QueryProperty(void* pvObject, const StdString& name) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE(PropertyFlags, QueryFastHostObjectNamedProperty, pvObject, name); +} + +//----------------------------------------------------------------------------- + +bool FastHostObjectUtil::DeleteProperty(void* pvObject, const StdString& name) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE(StdBool, DeleteFastHostObjectNamedProperty, pvObject, name); +} + +//----------------------------------------------------------------------------- + +void FastHostObjectUtil::GetPropertyNames(void* pvObject, std::vector& names) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetFastHostObjectPropertyNames, pvObject, names); +} + +//----------------------------------------------------------------------------- + +V8Value FastHostObjectUtil::GetProperty(void* pvObject, int32_t index) +{ + V8Value::FastResult value; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetFastHostObjectIndexedProperty, pvObject, index, value); + return V8Value(value); +} + +//----------------------------------------------------------------------------- + +void FastHostObjectUtil::SetProperty(void* pvObject, int32_t index, const V8Value& value) +{ + V8Value::FastArg fastValue; + value.Decode(fastValue); + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(SetFastHostObjectIndexedProperty, pvObject, index, fastValue); +} + +//----------------------------------------------------------------------------- + +FastHostObjectUtil::PropertyFlags FastHostObjectUtil::QueryProperty(void* pvObject, int32_t index) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE(PropertyFlags, QueryFastHostObjectIndexedProperty, pvObject, index); +} + +//----------------------------------------------------------------------------- + +bool FastHostObjectUtil::DeleteProperty(void* pvObject, int32_t index) +{ + return V8_SPLIT_PROXY_MANAGED_INVOKE(StdBool, DeleteFastHostObjectIndexedProperty, pvObject, index); +} + +//----------------------------------------------------------------------------- + +void FastHostObjectUtil::GetPropertyIndices(void* pvObject, std::vector& indices) +{ + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetFastHostObjectPropertyIndices, pvObject, indices); +} + +//----------------------------------------------------------------------------- + +V8Value FastHostObjectUtil::Invoke(void* pvObject, bool asConstructor, size_t argCount, const V8Value* pArgs) +{ + V8Value::FastResult result; + + if (argCount < 1) { - StdString resourceName; - StdString sourceMapUrl; - uint64_t uniqueId; - DocumentKind documentKind; - StdString code; - void* pvDocumentInfo; - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(LoadModule, sourceDocumentInfo.GetDocumentInfo(), specifier, resourceName, sourceMapUrl, uniqueId, documentKind, code, pvDocumentInfo, exports); - - documentInfo = V8DocumentInfo(std::move(resourceName), std::move(sourceMapUrl), uniqueId, documentKind, pvDocumentInfo); - return code; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeFastHostObject, pvObject, asConstructor, 0, nullptr, result); } - - virtual std::vector> CreateModuleContext(const V8DocumentInfo& documentInfo) override + else if (argCount <= Constants::MaxInlineArgCount) { - std::vector names; - std::vector values; - V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(CreateModuleContext, documentInfo.GetDocumentInfo(), names, values); - auto count = std::min(names.size(), values.size()); - - std::vector> context; - context.reserve(count); - for (size_t index = 0; index < count; index++) + V8Value::FastArg fastArgs[argCount]; + + for (size_t index = 0; index < argCount; index++) { - context.emplace_back(names[index], values[index]); + pArgs[index].Decode(fastArgs[index]); } - return context; - } - - virtual size_t GetMaxScriptCacheSize() override - { - return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(int32_t, GetMaxScriptCacheSize); + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeFastHostObject, pvObject, asConstructor, static_cast(argCount), fastArgs, result); } - - virtual size_t GetMaxModuleCacheSize() override + else { - return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(int32_t, GetMaxModuleCacheSize); - } + auto upFastArgs = std::make_unique(argCount); + auto pFastArgs = upFastArgs.get(); -private: + for (size_t index = 0; index < argCount; index++) + { + pArgs[index].Decode(pFastArgs[index]); + } - HostObjectUtilNativeImpl() noexcept = default; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeFastHostObject, pvObject, asConstructor, static_cast(argCount), pFastArgs, result); + } - static HostObjectUtilNativeImpl s_Instance; -}; + return V8Value(result); +} //----------------------------------------------------------------------------- -HostObjectUtilNativeImpl HostObjectUtilNativeImpl::s_Instance; +V8Value FastHostObjectUtil::GetEnumerator(void* pvObject) +{ + V8Value::FastResult result; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetFastHostObjectEnumerator, pvObject, result); + return V8Value(result); +} -//----------------------------------------------------------------------------- -// HostObjectUtil implementation //----------------------------------------------------------------------------- -IHostObjectUtil& HostObjectUtil::GetInstance() noexcept +V8Value FastHostObjectUtil::GetAsyncEnumerator(void* pvObject) { - return HostObjectUtilNativeImpl::GetInstance(); + V8Value::FastResult result; + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetFastHostObjectAsyncEnumerator, pvObject, result); + return V8Value(result); } diff --git a/ClearScriptV8/HostObjectUtil.h b/ClearScriptV8/HostObjectUtil.h index 3fdbe3211..228f33aff 100644 --- a/ClearScriptV8/HostObjectUtil.h +++ b/ClearScriptV8/HostObjectUtil.h @@ -10,27 +10,13 @@ struct V8DocumentInfo; //----------------------------------------------------------------------------- -// IHostObjectUtil +// HostObjectUtil //----------------------------------------------------------------------------- -struct IHostObjectUtil +struct HostObjectUtil final: StaticBase { - virtual void* AddRef(void* pvObject) = 0; - virtual void Release(void* pvObject) = 0; - - virtual V8Value GetProperty(void* pvObject, const StdString& name) = 0; - virtual V8Value GetProperty(void* pvObject, const StdString& name, bool& isCacheable) = 0; - virtual void SetProperty(void* pvObject, const StdString& name, const V8Value& value) = 0; - virtual bool DeleteProperty(void* pvObject, const StdString& name) = 0; - virtual void GetPropertyNames(void* pvObject, std::vector& names) = 0; - - virtual V8Value GetProperty(void* pvObject, int32_t index) = 0; - virtual void SetProperty(void* pvObject, int32_t index, const V8Value& value) = 0; - virtual bool DeleteProperty(void* pvObject, int32_t index) = 0; - virtual void GetPropertyIndices(void* pvObject, std::vector& indices) = 0; - - virtual V8Value Invoke(void* pvObject, bool asConstructor, const std::vector& args) = 0; - virtual V8Value InvokeMethod(void* pvObject, const StdString& name, const std::vector& args) = 0; + static void* AddRef(void* pvObject); + static void Release(void* pvObject); enum class Invocability : int32_t { @@ -41,16 +27,29 @@ struct IHostObjectUtil DefaultProperty }; - virtual Invocability GetInvocability(void* pvObject) = 0; + static Invocability GetInvocability(void* pvObject); + + static V8Value GetProperty(void* pvObject, const StdString& name, bool& isCacheable); + static void SetProperty(void* pvObject, const StdString& name, const V8Value& value); + static bool DeleteProperty(void* pvObject, const StdString& name); + static void GetPropertyNames(void* pvObject, std::vector& names); + + static V8Value GetProperty(void* pvObject, int32_t index); + static void SetProperty(void* pvObject, int32_t index, const V8Value& value); + static bool DeleteProperty(void* pvObject, int32_t index); + static void GetPropertyIndices(void* pvObject, std::vector& indices); + + static V8Value Invoke(void* pvObject, bool asConstructor, size_t argCount, const V8Value* pArgs); + static V8Value InvokeMethod(void* pvObject, const StdString& name, size_t argCount, const V8Value* pArgs); - virtual V8Value GetEnumerator(void* pvObject) = 0; - virtual V8Value GetAsyncEnumerator(void* pvObject) = 0; + static V8Value GetEnumerator(void* pvObject); + static V8Value GetAsyncEnumerator(void* pvObject); - virtual void* CreateV8ObjectCache() = 0; - virtual void CacheV8Object(void* pvCache, void* pvObject, void* pvV8Object) = 0; - virtual void* GetCachedV8Object(void* pvCache, void* pvObject) = 0; - virtual void GetAllCachedV8Objects(void* pvCache, std::vector& v8ObjectPtrs) = 0; - virtual bool RemoveV8ObjectCacheEntry(void* pvCache, void* pvObject) = 0; + static void* CreateV8ObjectCache(); + static void CacheV8Object(void* pvCache, void* pvObject, void* pvV8Object); + static void* GetCachedV8Object(void* pvCache, void* pvObject); + static void GetAllCachedV8Objects(void* pvCache, std::vector& v8ObjectPtrs); + static bool RemoveV8ObjectCacheEntry(void* pvCache, void* pvObject); enum class DebugDirective { @@ -60,28 +59,54 @@ struct IHostObjectUtil }; using DebugCallback = std::function; - virtual void* CreateDebugAgent(const StdString& name, const StdString& version, int32_t port, bool remote, DebugCallback&& callback) = 0; - virtual void SendDebugMessage(void* pvAgent, const StdString& content) = 0; - virtual void DestroyDebugAgent(void* pvAgent) = 0; + static void* CreateDebugAgent(const StdString& name, const StdString& version, int32_t port, bool remote, DebugCallback&& callback); + static void SendDebugMessage(void* pvAgent, const StdString& content); + static void DestroyDebugAgent(void* pvAgent); using NativeCallback = std::function; - virtual void QueueNativeCallback(NativeCallback&& callback) = 0; - virtual void* CreateNativeCallbackTimer(int32_t dueTime, int32_t period, NativeCallback&& callback) = 0; - virtual bool ChangeNativeCallbackTimer(void* pvTimer, int32_t dueTime, int32_t period) = 0; - virtual void DestroyNativeCallbackTimer(void* pvTimer) = 0; + static void QueueNativeCallback(NativeCallback&& callback); + static void* CreateNativeCallbackTimer(int32_t dueTime, int32_t period, NativeCallback&& callback); + static bool ChangeNativeCallbackTimer(void* pvTimer, int32_t dueTime, int32_t period); + static void DestroyNativeCallbackTimer(void* pvTimer); - virtual StdString LoadModule(const V8DocumentInfo& sourceDocumentInfo, const StdString& specifier, V8DocumentInfo& documentInfo, V8Value& exports) = 0; - virtual std::vector> CreateModuleContext(const V8DocumentInfo& documentInfo) = 0; + static StdString LoadModule(const V8DocumentInfo& sourceDocumentInfo, const StdString& specifier, V8DocumentInfo& documentInfo, V8Value& exports); + static std::vector> CreateModuleContext(const V8DocumentInfo& documentInfo); - virtual size_t GetMaxScriptCacheSize() = 0; - virtual size_t GetMaxModuleCacheSize() = 0; + static size_t GetMaxScriptCacheSize(); + static size_t GetMaxModuleCacheSize(); }; //----------------------------------------------------------------------------- -// HostObjectUtil +// FastHostObjectUtil //----------------------------------------------------------------------------- -struct HostObjectUtil final: StaticBase +struct FastHostObjectUtil final: StaticBase { - static IHostObjectUtil& GetInstance() noexcept; + enum class PropertyFlags : int32_t + { + // IMPORTANT: maintain bitwise equivalence with managed enum V8.FastProxy.V8FastHostPropertyFlags + None = 0, + Available = 0x00000001, + Cacheable = 0x00000002, + Enumerable = 0x00000004, + Writable = 0x00000008, + Deletable = 0x00000010 + }; + + static V8Value GetProperty(void* pvObject, const StdString& name, bool& isCacheable); + static void SetProperty(void* pvObject, const StdString& name, const V8Value& value); + static PropertyFlags QueryProperty(void* pvObject, const StdString& name); + static bool DeleteProperty(void* pvObject, const StdString& name); + static void GetPropertyNames(void* pvObject, std::vector& names); + + static V8Value GetProperty(void* pvObject, int32_t index); + static void SetProperty(void* pvObject, int32_t index, const V8Value& value); + static PropertyFlags QueryProperty(void* pvObject, int32_t index); + static bool DeleteProperty(void* pvObject, int32_t index); + static void GetPropertyIndices(void* pvObject, std::vector& indices); + + static V8Value Invoke(void* pvObject, bool asConstructor, size_t argCount, const V8Value* pArgs); + + static V8Value GetEnumerator(void* pvObject); + static V8Value GetAsyncEnumerator(void* pvObject); }; diff --git a/ClearScriptV8/StdString.h b/ClearScriptV8/StdString.h index fccf8283d..983e09ce3 100644 --- a/ClearScriptV8/StdString.h +++ b/ClearScriptV8/StdString.h @@ -221,8 +221,27 @@ class StdString final static Value GetValue(v8::Isolate* pIsolate, v8::Local hValue) { - v8::String::Value value(pIsolate, hValue); - return Value(EnsureNonNull(reinterpret_cast(*value)), value.length()); + Value value; + if (hValue.IsEmpty()) + { + return value; + } + + v8::Local hString; + if (hValue->IsString()) + { + hString = hValue.As(); + } + else if (!hValue->ToString(pIsolate->GetCurrentContext()).ToLocal(&hString)) + { + return value; + } + + auto length = hString->Length(); + value.resize(length); + + hString->WriteV2(pIsolate, 0, length, reinterpret_cast(value.data())); + return value; } static Value GetValue(const v8_inspector::StringView& stringView); diff --git a/ClearScriptV8/Timer.h b/ClearScriptV8/Timer.h index 403c5c2c5..00d9688f0 100644 --- a/ClearScriptV8/Timer.h +++ b/ClearScriptV8/Timer.h @@ -17,7 +17,7 @@ class Timer final: public WeakRefTarget m_Func(std::move(func)) { auto wrTimer = CreateWeakRef(); - IHostObjectUtil::NativeCallback callback = [wrTimer] () + HostObjectUtil::NativeCallback callback = [wrTimer] () { auto spTimer = wrTimer.GetTarget(); if (!spTimer.IsEmpty()) @@ -26,17 +26,17 @@ class Timer final: public WeakRefTarget } }; - m_pvTimer = HostObjectUtil::GetInstance().CreateNativeCallbackTimer(-1, -1, std::move(callback)); + m_pvTimer = HostObjectUtil::CreateNativeCallbackTimer(-1, -1, std::move(callback)); } void Start() { - HostObjectUtil::GetInstance().ChangeNativeCallbackTimer(m_pvTimer, m_DueTime, m_Period); + HostObjectUtil::ChangeNativeCallbackTimer(m_pvTimer, m_DueTime, m_Period); } ~Timer() { - HostObjectUtil::GetInstance().DestroyNativeCallbackTimer(m_pvTimer); + HostObjectUtil::DestroyNativeCallbackTimer(m_pvTimer); } private: diff --git a/ClearScriptV8/V8Context.h b/ClearScriptV8/V8Context.h index 7e688b5f4..949cbca17 100644 --- a/ClearScriptV8/V8Context.h +++ b/ClearScriptV8/V8Context.h @@ -21,8 +21,8 @@ class V8Context: public WeakRefTarget, public IV8Entity AwaitDebuggerAndPauseOnStart = 0x00000008, EnableDateTimeConversion = 0x00000010, EnableDynamicModuleImports = 0x00000020, - MarshalUnsafeLongAsBigInt = 0x00000040, - MarshalAllLongAsBigInt = 0x00000080, + MarshalUnsafeInt64AsBigInt = 0x00000040, + MarshalAllInt64AsBigInt = 0x00000080, EnableTaskPromiseConversion = 0x00000100, EnableValueTaskPromiseConversion = 0x00000200, UseCaseInsensitiveMemberBinding = 0x00000400, @@ -30,7 +30,8 @@ class V8Context: public WeakRefTarget, public IV8Entity HideHostExceptions = 0x00001000, UseSynchronizationContexts = 0x00002000, AddPerformanceObject = 0x00004000, - SetTimerResolution = 0x00008000 + SetTimerResolution = 0x00008000, + EnableArrayConversion = 0x00010000 }; struct Options final @@ -57,8 +58,11 @@ class V8Context: public WeakRefTarget, public IV8Entity virtual size_t GetMaxIsolateStackUsage() = 0; virtual void SetMaxIsolateStackUsage(size_t value) = 0; - typedef void CallWithLockCallback(void* pvArg); - virtual void CallWithLock(CallWithLockCallback* pCallback, void* pvArg) = 0; + typedef void CallWithLockCallback(void* pvAction); + virtual void CallWithLock(CallWithLockCallback* pCallback, void* pvAction) = 0; + + typedef void CallWithLockWithArgCallback(void* pvAction, void* pvArg); + virtual void CallWithLockWithArg(CallWithLockWithArgCallback* pCallback, void* pvAction, void* pvArg) = 0; virtual V8Value GetRootObject() = 0; virtual void SetGlobalProperty(const StdString& name, const V8Value& value, bool globalMembers) = 0; diff --git a/ClearScriptV8/V8ContextImpl.cpp b/ClearScriptV8/V8ContextImpl.cpp index e96472f26..0256a53b7 100644 --- a/ClearScriptV8/V8ContextImpl.cpp +++ b/ClearScriptV8/V8ContextImpl.cpp @@ -206,38 +206,10 @@ inline bool TryGetValueAsNumber(v8::Local hContext, const v8::Local //----------------------------------------------------------------------------- -inline bool TryGetValueAsAnyNumber(v8::Local hContext, const v8::Local& hValue, double& value) -{ - if (hValue.IsEmpty()) - { - return false; - } - - FROM_MAYBE_TRY - - if (hValue->IsInt32()) - { - value = FROM_MAYBE(hValue->Int32Value(hContext)); - return true; - } - - if (hValue->IsUint32()) - { - value = FROM_MAYBE(hValue->Uint32Value(hContext)); - return true; - } - - FROM_MAYBE_CATCH_CONSUME - - return TryGetValueAsNumber(hContext, hValue, value); -} - -//----------------------------------------------------------------------------- - template -static V8ContextImpl* GetContextImplFromHolder(const TInfo& info) +inline V8ContextImpl* GetContextImplFromHolder(const TInfo& info) { - auto hHolder = info.Holder(); + auto hHolder = info.HolderV2(); if (!hHolder.IsEmpty() && hHolder->InternalFieldCount() > 0) { auto hField = hHolder->GetInternalField(0); @@ -253,12 +225,61 @@ static V8ContextImpl* GetContextImplFromHolder(const TInfo& info) //----------------------------------------------------------------------------- template -static V8ContextImpl* GetContextImplFromData(const TInfo& info) +inline V8ContextImpl* GetContextImplFromData(const TInfo& info) { auto hContextImpl = ::ValueAsExternal(info.Data()); return !hContextImpl.IsEmpty() ? static_cast(hContextImpl->Value()) : nullptr; } +//----------------------------------------------------------------------------- + +template +inline void SetIfSameType(TVariable& /*variable*/, TValue /*value*/) +{ +} + +//----------------------------------------------------------------------------- + +template +inline void SetIfSameType(TVariable& variable, TVariable value) +{ + variable = value; +} + +//----------------------------------------------------------------------------- + +template +inline v8::Intercepted GetCallbackStatus(const T& /*value*/) +{ + return v8::Intercepted::kYes; +} + +//----------------------------------------------------------------------------- + +template +inline v8::Intercepted GetCallbackStatus(const v8::Local& hValue) +{ + return hValue.IsEmpty() ? v8::Intercepted::kNo : v8::Intercepted::kYes; +} + +//----------------------------------------------------------------------------- + +template +inline void ProcessCallbackResult(const TResult& result, const TInfo& info, TStatus& status) +{ + ::SetIfSameType(status, ::GetCallbackStatus(result)); + info.GetReturnValue().Set(result); +} + +//----------------------------------------------------------------------------- + +template +inline void ProcessVoidCallbackResult(const TInfo& info, TStatus& status) +{ + IGNORE_UNUSED(info); + ::SetIfSameType(status, v8::Intercepted::kYes); +} + //----------------------------------------------------------------------------- // V8ContextImpl implementation //----------------------------------------------------------------------------- @@ -319,10 +340,28 @@ static V8ContextImpl* GetContextImplFromData(const TInfo& info) #define CALLBACK_RETURN(RESULT) \ BEGIN_COMPOUND_MACRO \ - info.GetReturnValue().Set(RESULT); \ + ::ProcessCallbackResult(RESULT, info, t_CallbackStatus); \ + return; \ + END_COMPOUND_MACRO + +#define CALLBACK_RETURN_VOID() \ + BEGIN_COMPOUND_MACRO \ + ::ProcessVoidCallbackResult(info, t_CallbackStatus); \ return; \ END_COMPOUND_MACRO +#define CALLBACK_ENTER \ + auto t_CallbackStatus = v8::Intercepted::kNo; \ + ([&] () noexcept -> void \ + { \ + +#define CALLBACK_EXIT \ + } \ + )(); \ + return t_CallbackStatus; + +constexpr enum class DummyCallbackStatus {} t_CallbackStatus {}; + //----------------------------------------------------------------------------- static std::atomic s_InstanceCount(0); @@ -339,15 +378,15 @@ V8ContextImpl::V8ContextImpl(V8IsolateImpl* pIsolateImpl, const StdString& name) V8ContextImpl::V8ContextImpl(SharedPtr&& spIsolateImpl, const StdString& name, const Options& options): m_Name(name), m_spIsolateImpl(std::move(spIsolateImpl)), - m_DateTimeConversionEnabled(HasFlag(options.Flags, Flags::EnableDateTimeConversion)), - m_HideHostExceptions(HasFlag(options.Flags, Flags::HideHostExceptions)), + m_DateTimeConversionEnabled(::HasFlag(options.Flags, Flags::EnableDateTimeConversion)), + m_HideHostExceptions(::HasFlag(options.Flags, Flags::HideHostExceptions)), m_AllowHostObjectConstructorCall(false), m_ChangedTimerResolution(false), m_pvV8ObjectCache(nullptr) { VerifyNotOutOfMemory(); - if (HasFlags(options.Flags, Flags::AddPerformanceObject, Flags::SetTimerResolution)) + if (::HasAllFlags(options.Flags, Flags::AddPerformanceObject, Flags::SetTimerResolution)) { m_ChangedTimerResolution = HighResolutionClock::SetTimerResolution(); } @@ -358,7 +397,7 @@ V8ContextImpl::V8ContextImpl(SharedPtr&& spIsolateImpl, const Std BEGIN_ISOLATE_SCOPE FROM_MAYBE_TRY - if (HasFlag(options.Flags, Flags::DisableGlobalMembers)) + if (::HasFlag(options.Flags, Flags::DisableGlobalMembers)) { m_hContext = CreatePersistent(CreateContext()); } @@ -372,14 +411,10 @@ V8ContextImpl::V8ContextImpl(SharedPtr&& spIsolateImpl, const Std m_hContext = CreatePersistent(CreateContext(nullptr, hGlobalTemplate)); if (!m_hContext.IsEmpty()) { - auto hGlobalProxy = m_hContext->Global(); - if (!hGlobalProxy.IsEmpty()) + auto hGlobal = m_hContext->Global(); + if (!hGlobal.IsEmpty() && (hGlobal->InternalFieldCount() > 0)) { - auto hGlobal = ::ValueAsObject(hGlobalProxy->GetPrototype()); - if (!hGlobal.IsEmpty() && (hGlobal->InternalFieldCount() > 0)) - { - hGlobal->SetAlignedPointerInInternalField(0, this); - } + hGlobal->SetAlignedPointerInInternalField(0, this); } } } @@ -391,10 +426,12 @@ V8ContextImpl::V8ContextImpl(SharedPtr&& spIsolateImpl, const Std auto hContextImpl = CreateExternal(this); - v8::Local hGetIteratorFunction; - v8::Local hGetAsyncIteratorFunction; - v8::Local hGetJsonFunction; - v8::Local hToFunctionFunction; + v8::Local hGetHostObjectIteratorFunction; + v8::Local hGetHostObjectAsyncIteratorFunction; + v8::Local hGetFastHostObjectIteratorFunction; + v8::Local hGetFastHostObjectAsyncIteratorFunction; + v8::Local hGetHostObjectJsonFunction; + v8::Local hHostDelegateToFunctionFunction; BEGIN_CONTEXT_SCOPE @@ -403,6 +440,13 @@ V8ContextImpl::V8ContextImpl(SharedPtr&& spIsolateImpl, const Std m_hIsHostObjectKey = CreatePersistent(CreateSymbol()); ASSERT_EVAL(FROM_MAYBE(m_hContext->Global()->Set(m_hContext, CreateString("isHostObjectKey"), m_hIsHostObjectKey))); + m_hModuleResultKey = CreatePersistent(CreateSymbol()); + ASSERT_EVAL(FROM_MAYBE(m_hContext->Global()->Set(m_hContext, CreateString("moduleResultKey"), m_hModuleResultKey))); + + ASSERT_EVAL(FROM_MAYBE(m_hContext->Global()->Set(m_hContext, CreateString("getPromiseState"), FROM_MAYBE(v8::Function::New(m_hContext, GetPromiseStateCallback, hContextImpl))))); + ASSERT_EVAL(FROM_MAYBE(m_hContext->Global()->Set(m_hContext, CreateString("getPromiseResult"), FROM_MAYBE(v8::Function::New(m_hContext, GetPromiseResultCallback, hContextImpl))))); + + m_hMissingPropertyValue = CreatePersistent(CreateSymbol()); m_hHostExceptionKey = CreatePersistent(CreateString("hostException")); m_hCacheKey = CreatePersistent(CreatePrivate()); m_hAccessTokenKey = CreatePersistent(CreatePrivate()); @@ -413,22 +457,25 @@ V8ContextImpl::V8ContextImpl(SharedPtr&& spIsolateImpl, const Std m_hPropertyValueNotInvocable = CreatePersistent(CreateString("The property value does not support invocation")); m_hInvalidModuleRequest = CreatePersistent(CreateString("Invalid module load request")); m_hConstructorKey = CreatePersistent(CreateString("constructor")); + m_hSetModuleResultKey = CreatePersistent(CreateString("setResult")); - hGetIteratorFunction = CreateFunctionTemplate(GetHostObjectIterator, hContextImpl); - hGetAsyncIteratorFunction = CreateFunctionTemplate(GetHostObjectAsyncIterator, hContextImpl); - hGetJsonFunction = CreateFunctionTemplate(GetHostObjectJson, hContextImpl); - hToFunctionFunction = CreateFunctionTemplate(CreateFunctionForHostDelegate, hContextImpl); + hGetHostObjectIteratorFunction = CreateFunctionTemplate(GetHostObjectIterator, hContextImpl); + hGetHostObjectAsyncIteratorFunction = CreateFunctionTemplate(GetHostObjectAsyncIterator, hContextImpl); + hGetFastHostObjectIteratorFunction = CreateFunctionTemplate(GetFastHostObjectIterator, hContextImpl); + hGetFastHostObjectAsyncIteratorFunction = CreateFunctionTemplate(GetFastHostObjectAsyncIterator, hContextImpl); + hGetHostObjectJsonFunction = CreateFunctionTemplate(GetHostObjectJson, hContextImpl); + hHostDelegateToFunctionFunction = CreateFunctionTemplate(CreateFunctionForHostDelegate, hContextImpl); m_hAccessToken = CreatePersistent(CreateObject()); m_hFlushFunction = CreatePersistent(FROM_MAYBE(v8::Function::New(m_hContext, FlushCallback))); m_hTerminationException = CreatePersistent(v8::Exception::Error(CreateString("Script execution was interrupted"))); - if (HasFlag(options.Flags, Flags::AddPerformanceObject)) + if (::HasFlag(options.Flags, Flags::AddPerformanceObject)) { auto hPerformance = CreateObject(); - ASSERT_EVAL(FROM_MAYBE(hPerformance->DefineOwnProperty(m_hContext, CreateString("timeOrigin"), CreateNumber(timeOrigin), CombineFlags(v8::ReadOnly, v8::DontDelete)))); - ASSERT_EVAL(FROM_MAYBE(hPerformance->DefineOwnProperty(m_hContext, CreateString("now"), FROM_MAYBE(v8::Function::New(m_hContext, PerformanceNowCallback, hContextImpl)), CombineFlags(v8::ReadOnly, v8::DontDelete)))); - ASSERT_EVAL(FROM_MAYBE(hPerformance->DefineOwnProperty(m_hContext, CreateString("sleep"), FROM_MAYBE(v8::Function::New(m_hContext, PerformanceSleepCallback, hContextImpl)), CombineFlags(v8::ReadOnly, v8::DontDelete)))); + ASSERT_EVAL(FROM_MAYBE(hPerformance->DefineOwnProperty(m_hContext, CreateString("timeOrigin"), CreateNumber(timeOrigin), ::CombineFlags(v8::ReadOnly, v8::DontDelete)))); + ASSERT_EVAL(FROM_MAYBE(hPerformance->DefineOwnProperty(m_hContext, CreateString("now"), FROM_MAYBE(v8::Function::New(m_hContext, PerformanceNowCallback, hContextImpl)), ::CombineFlags(v8::ReadOnly, v8::DontDelete)))); + ASSERT_EVAL(FROM_MAYBE(hPerformance->DefineOwnProperty(m_hContext, CreateString("sleep"), FROM_MAYBE(v8::Function::New(m_hContext, PerformanceSleepCallback, hContextImpl)), ::CombineFlags(v8::ReadOnly, v8::DontDelete)))); ASSERT_EVAL(FROM_MAYBE(m_hContext->Global()->DefineOwnProperty(m_hContext, CreateString("Performance"), hPerformance, v8::DontEnum))); } @@ -441,18 +488,18 @@ V8ContextImpl::V8ContextImpl(SharedPtr&& spIsolateImpl, const Std m_hHostObjectTemplate->SetCallHandler(HostObjectConstructorCallHandler, hContextImpl); m_hHostObjectTemplate->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyNames, hContextImpl, v8::PropertyHandlerFlags::kNone)); m_hHostObjectTemplate->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyIndices, hContextImpl)); - m_hHostObjectTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetIteratorFunction); - m_hHostObjectTemplate->PrototypeTemplate()->Set(GetAsyncIteratorSymbol(), hGetAsyncIteratorFunction); - m_hHostObjectTemplate->PrototypeTemplate()->Set(hToJSON, hGetJsonFunction, CombineFlags(v8::ReadOnly, v8::DontDelete, v8::DontEnum)); + m_hHostObjectTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetHostObjectIteratorFunction); + m_hHostObjectTemplate->PrototypeTemplate()->Set(GetAsyncIteratorSymbol(), hGetHostObjectAsyncIteratorFunction); + m_hHostObjectTemplate->PrototypeTemplate()->Set(hToJSON, hGetHostObjectJsonFunction, ::CombineFlags(v8::ReadOnly, v8::DontDelete, v8::DontEnum)); m_hHostInvocableTemplate = CreatePersistent(CreateFunctionTemplate()); m_hHostInvocableTemplate->SetClassName(CreateString("HostInvocable")); m_hHostInvocableTemplate->SetCallHandler(HostObjectConstructorCallHandler, hContextImpl); m_hHostInvocableTemplate->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyNames, hContextImpl, v8::PropertyHandlerFlags::kNone)); m_hHostInvocableTemplate->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyIndices, hContextImpl)); - m_hHostInvocableTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetIteratorFunction); - m_hHostInvocableTemplate->PrototypeTemplate()->Set(GetAsyncIteratorSymbol(), hGetAsyncIteratorFunction); - m_hHostInvocableTemplate->PrototypeTemplate()->Set(hToJSON, hGetJsonFunction, CombineFlags(v8::ReadOnly, v8::DontDelete, v8::DontEnum)); + m_hHostInvocableTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetHostObjectIteratorFunction); + m_hHostInvocableTemplate->PrototypeTemplate()->Set(GetAsyncIteratorSymbol(), hGetHostObjectAsyncIteratorFunction); + m_hHostInvocableTemplate->PrototypeTemplate()->Set(hToJSON, hGetHostObjectJsonFunction, ::CombineFlags(v8::ReadOnly, v8::DontDelete, v8::DontEnum)); m_hHostInvocableTemplate->InstanceTemplate()->SetCallAsFunctionHandler(InvokeHostObject, hContextImpl); m_hHostDelegateTemplate = CreatePersistent(CreateFunctionTemplate()); @@ -460,20 +507,39 @@ V8ContextImpl::V8ContextImpl(SharedPtr&& spIsolateImpl, const Std m_hHostDelegateTemplate->SetCallHandler(HostObjectConstructorCallHandler, hContextImpl); m_hHostDelegateTemplate->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyNames, hContextImpl, v8::PropertyHandlerFlags::kNone)); m_hHostDelegateTemplate->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(GetHostObjectProperty, SetHostObjectProperty, QueryHostObjectProperty, DeleteHostObjectProperty, GetHostObjectPropertyIndices, hContextImpl)); - m_hHostDelegateTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetIteratorFunction); - m_hHostDelegateTemplate->PrototypeTemplate()->Set(GetAsyncIteratorSymbol(), hGetAsyncIteratorFunction); - m_hHostDelegateTemplate->PrototypeTemplate()->Set(hToJSON, hGetJsonFunction, CombineFlags(v8::ReadOnly, v8::DontDelete, v8::DontEnum)); + m_hHostDelegateTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetHostObjectIteratorFunction); + m_hHostDelegateTemplate->PrototypeTemplate()->Set(GetAsyncIteratorSymbol(), hGetHostObjectAsyncIteratorFunction); + m_hHostDelegateTemplate->PrototypeTemplate()->Set(hToJSON, hGetHostObjectJsonFunction, ::CombineFlags(v8::ReadOnly, v8::DontDelete, v8::DontEnum)); m_hHostDelegateTemplate->InstanceTemplate()->SetCallAsFunctionHandler(InvokeHostObject, hContextImpl); m_hHostDelegateTemplate->InstanceTemplate()->SetHostDelegate(); // instructs our patched V8 typeof implementation to return "function" - m_hHostDelegateTemplate->PrototypeTemplate()->Set(CreateString("toFunction"), hToFunctionFunction); - - m_pvV8ObjectCache = HostObjectUtil::GetInstance().CreateV8ObjectCache(); + m_hHostDelegateTemplate->PrototypeTemplate()->Set(CreateString("toFunction"), hHostDelegateToFunctionFunction); + + m_hFastHostObjectTemplate = CreatePersistent(CreateFunctionTemplate()); + m_hFastHostObjectTemplate->SetClassName(CreateString("FastHostObject")); + m_hFastHostObjectTemplate->SetCallHandler(HostObjectConstructorCallHandler, hContextImpl); + m_hFastHostObjectTemplate->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(GetFastHostObjectProperty, SetFastHostObjectProperty, QueryFastHostObjectProperty, DeleteFastHostObjectProperty, GetFastHostObjectPropertyNames, hContextImpl, v8::PropertyHandlerFlags::kNone)); + m_hFastHostObjectTemplate->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(GetFastHostObjectProperty, SetFastHostObjectProperty, QueryFastHostObjectProperty, DeleteFastHostObjectProperty, GetFastHostObjectPropertyIndices, hContextImpl)); + m_hFastHostObjectTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetFastHostObjectIteratorFunction); + m_hFastHostObjectTemplate->PrototypeTemplate()->Set(GetAsyncIteratorSymbol(), hGetFastHostObjectAsyncIteratorFunction); + + m_hFastHostFunctionTemplate = CreatePersistent(CreateFunctionTemplate()); + m_hFastHostFunctionTemplate->SetClassName(CreateString("FastHostFunction")); + m_hFastHostFunctionTemplate->SetCallHandler(HostObjectConstructorCallHandler, hContextImpl); + m_hFastHostFunctionTemplate->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(GetFastHostObjectProperty, SetFastHostObjectProperty, QueryFastHostObjectProperty, DeleteFastHostObjectProperty, GetFastHostObjectPropertyNames, hContextImpl, v8::PropertyHandlerFlags::kNone)); + m_hFastHostFunctionTemplate->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(GetFastHostObjectProperty, SetFastHostObjectProperty, QueryFastHostObjectProperty, DeleteFastHostObjectProperty, GetFastHostObjectPropertyIndices, hContextImpl)); + m_hFastHostFunctionTemplate->PrototypeTemplate()->Set(GetIteratorSymbol(), hGetFastHostObjectIteratorFunction); + m_hFastHostFunctionTemplate->PrototypeTemplate()->Set(GetAsyncIteratorSymbol(), hGetFastHostObjectAsyncIteratorFunction); + m_hFastHostFunctionTemplate->InstanceTemplate()->SetCallAsFunctionHandler(InvokeFastHostObject, hContextImpl); + m_hFastHostFunctionTemplate->InstanceTemplate()->SetHostDelegate(); // instructs our patched V8 typeof implementation to return "function" + m_hFastHostFunctionTemplate->PrototypeTemplate()->Set(CreateString("toFunction"), hHostDelegateToFunctionFunction); + + m_pvV8ObjectCache = HostObjectUtil::CreateV8ObjectCache(); m_spIsolateImpl->AddContext(this, options); FROM_MAYBE_CATCH Teardown(); - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime cannot initialize the script engine because a script exception is pending")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime cannot initialize the script engine because a script exception is pending")), false); FROM_MAYBE_END END_ISOLATE_SCOPE @@ -532,13 +598,26 @@ void V8ContextImpl::SetMaxIsolateStackUsage(size_t value) //----------------------------------------------------------------------------- -void V8ContextImpl::CallWithLock(CallWithLockCallback* pCallback, void* pvArg) +void V8ContextImpl::CallWithLock(CallWithLockCallback* pCallback, void* pvAction) +{ + VerifyNotOutOfMemory(); + + BEGIN_ISOLATE_SCOPE + + (*pCallback)(pvAction); + + END_ISOLATE_SCOPE +} + +//----------------------------------------------------------------------------- + +void V8ContextImpl::CallWithLockWithArg(CallWithLockWithArgCallback* pCallback, void* pvAction, void* pvArg) { VerifyNotOutOfMemory(); BEGIN_ISOLATE_SCOPE - (*pCallback)(pvArg); + (*pCallback)(pvAction, pvArg); END_ISOLATE_SCOPE } @@ -591,7 +670,7 @@ void V8ContextImpl::SetGlobalProperty(const StdString& name, const V8Value& valu FROM_MAYBE_CATCH - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime cannot perform the requested operation because a script exception is pending")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime cannot perform the requested operation because a script exception is pending")), false); FROM_MAYBE_END END_CONTEXT_SCOPE @@ -632,7 +711,7 @@ V8Value V8ContextImpl::Execute(const V8DocumentInfo& documentInfo, const StdStri hModule = VERIFY_MAYBE(CompileModule(&source)); if (hModule.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false); } CacheModule(documentInfo, codeDigest, hModule); @@ -646,12 +725,39 @@ V8Value V8ContextImpl::Execute(const V8DocumentInfo& documentInfo, const StdStri if (hModule->GetStatus() == v8::Module::kInstantiated) { hResult = VERIFY_MAYBE(hModule->Evaluate(m_hContext)); - if (!hModule->IsGraphAsync() && hResult->IsPromise()) + if (hResult->IsPromise()) { auto hPromise = hResult.As(); - if (hPromise->State() == v8::Promise::PromiseState::kFulfilled) + if (hModule->IsGraphAsync() || (hPromise->State() == v8::Promise::PromiseState::kPending)) + { + v8::Local hMetaHolder; + if (TryGetCachedModuleMetaHolder(hModule, hMetaHolder)) + { + if (m_hGetModuleResultFunction.IsEmpty()) + { + auto hEngineInternal = FROM_MAYBE(m_hContext->Global()->Get(m_hContext, CreateString("EngineInternal"))).As(); + m_hGetModuleResultFunction = CreatePersistent(FROM_MAYBE(hEngineInternal->Get(m_hContext, CreateString("getModuleResult"))).As()); + } + + v8::Local args[] = { hResult, hMetaHolder }; + hResult = FROM_MAYBE(m_hGetModuleResultFunction->Call(m_hContext, GetUndefined(), 2, args)); + } + } + else if (hPromise->State() == v8::Promise::PromiseState::kFulfilled) { hResult = hPromise->Result(); + if (evaluate && (hResult.IsEmpty() || hResult->IsUndefined())) + { + v8::Local hMetaHolder; + if (TryGetCachedModuleMetaHolder(hModule, hMetaHolder)) + { + auto hMeta = ::ValueAsObject(FROM_MAYBE(hMetaHolder->Get(m_hContext, 0))); + if (!hMeta.IsEmpty()) + { + hResult = FROM_MAYBE(hMeta->Get(m_hContext, m_hModuleResultKey)); + } + } + } } else if (hPromise->State() == v8::Promise::PromiseState::kRejected) { @@ -681,7 +787,7 @@ V8Value V8ContextImpl::Execute(const V8DocumentInfo& documentInfo, const StdStri hScript = VERIFY_MAYBE(CompileUnboundScript(&source)); if (hScript.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false); } CacheScript(documentInfo, codeDigest, hScript); @@ -728,7 +834,7 @@ V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, StdSt hModule = VERIFY_MAYBE(CompileModule(&source)); if (hModule.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false); } CacheModule(documentInfo, codeDigest, hModule); @@ -744,7 +850,7 @@ V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, StdSt hScript = VERIFY_MAYBE(CompileUnboundScript(&source)); if (hScript.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false); } CacheScript(documentInfo, codeDigest, hScript); @@ -792,7 +898,7 @@ V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, StdSt hModule = VERIFY_MAYBE(CompileModule(&source)); if (hModule.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false); } std::unique_ptr upCachedData(v8::ScriptCompiler::CreateCodeCache(hModule->GetUnboundModuleScript())); @@ -825,7 +931,7 @@ V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, StdSt hScript = VERIFY_MAYBE(CompileUnboundScript(&source)); if (hScript.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false); } std::unique_ptr upCachedData(v8::ScriptCompiler::CreateCodeCache(hScript)); @@ -897,7 +1003,7 @@ V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, StdSt hModule = VERIFY_MAYBE(CompileModule(&source, v8::ScriptCompiler::kConsumeCodeCache)); if (hModule.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false); } cacheAccepted = !pCachedData->rejected; @@ -914,7 +1020,7 @@ V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, StdSt hScript = VERIFY_MAYBE(CompileUnboundScript(&source, v8::ScriptCompiler::kConsumeCodeCache)); if (hScript.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false); } cacheAccepted = !pCachedData->rejected; @@ -977,7 +1083,7 @@ V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, StdSt hModule = VERIFY_MAYBE(CompileModule(&source, v8::ScriptCompiler::kConsumeCodeCache)); if (hModule.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false); } if (!pCachedData->rejected) @@ -1036,7 +1142,7 @@ V8ScriptHolder* V8ContextImpl::Compile(const V8DocumentInfo& documentInfo, StdSt hScript = VERIFY_MAYBE(CompileUnboundScript(&source, v8::ScriptCompiler::kConsumeCodeCache)); if (hScript.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Script compilation failed; no additional information was provided by the V8 runtime")), false); } if (!pCachedData->rejected) @@ -1123,7 +1229,7 @@ V8Value V8ContextImpl::Execute(const SharedPtr& spHolder, bool e if (!CanExecute(spHolder)) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Invalid compiled script")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Invalid compiled script")), false); } v8::Local hResult; @@ -1149,7 +1255,7 @@ V8Value V8ContextImpl::Execute(const SharedPtr& spHolder, bool e if (hModule.IsEmpty()) { - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("Module compilation failed; no additional information was provided by the V8 runtime")), false); } CacheModule(spHolder->GetDocumentInfo(), codeDigest, hModule); @@ -1163,12 +1269,39 @@ V8Value V8ContextImpl::Execute(const SharedPtr& spHolder, bool e if (hModule->GetStatus() == v8::Module::kInstantiated) { hResult = VERIFY_MAYBE(hModule->Evaluate(m_hContext)); - if (!hModule->IsGraphAsync() && hResult->IsPromise()) + if (hResult->IsPromise()) { auto hPromise = hResult.As(); - if (hPromise->State() == v8::Promise::PromiseState::kFulfilled) + if (hModule->IsGraphAsync() || (hPromise->State() == v8::Promise::PromiseState::kPending)) + { + v8::Local hMetaHolder; + if (TryGetCachedModuleMetaHolder(hModule, hMetaHolder)) + { + if (m_hGetModuleResultFunction.IsEmpty()) + { + auto hEngineInternal = FROM_MAYBE(m_hContext->Global()->Get(m_hContext, CreateString("EngineInternal"))).As(); + m_hGetModuleResultFunction = CreatePersistent(FROM_MAYBE(hEngineInternal->Get(m_hContext, CreateString("getModuleResult"))).As()); + } + + v8::Local args[] = { hResult, hMetaHolder }; + hResult = FROM_MAYBE(m_hGetModuleResultFunction->Call(m_hContext, GetUndefined(), 2, args)); + } + } + else if (hPromise->State() == v8::Promise::PromiseState::kFulfilled) { hResult = hPromise->Result(); + if (evaluate && (hResult.IsEmpty() || hResult->IsUndefined())) + { + v8::Local hMetaHolder; + if (TryGetCachedModuleMetaHolder(hModule, hMetaHolder)) + { + auto hMeta = ::ValueAsObject(FROM_MAYBE(hMetaHolder->Get(m_hContext, 0))); + if (!hMeta.IsEmpty()) + { + hResult = FROM_MAYBE(hMeta->Get(m_hContext, m_hModuleResultKey)); + } + } + } } else if (hPromise->State() == v8::Promise::PromiseState::kRejected) { @@ -1217,7 +1350,7 @@ V8Value V8ContextImpl::Execute(const SharedPtr& spHolder, bool e void V8ContextImpl::Interrupt() { - TerminateExecution(); + TerminateExecution(false); } //----------------------------------------------------------------------------- @@ -1358,7 +1491,7 @@ void V8ContextImpl::Flush() void V8ContextImpl::Destroy() { - m_spIsolateImpl->CallWithLockNoWait(true /*allowNesting*/, [this] (V8IsolateImpl* /*pIsolateImpl*/) + m_spIsolateImpl->CallWithLockNoWait(true, [this] (V8IsolateImpl* /*pIsolateImpl*/) { delete this; }); @@ -1441,7 +1574,7 @@ bool V8ContextImpl::DeleteV8ObjectProperty(void* pvObject, const StdString& name FROM_MAYBE_CATCH - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime cannot perform the requested operation because a script exception is pending")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime cannot perform the requested operation because a script exception is pending")), false); FROM_MAYBE_END END_CONTEXT_SCOPE @@ -1507,7 +1640,7 @@ bool V8ContextImpl::DeleteV8ObjectProperty(void* pvObject, int index) FROM_MAYBE_CATCH - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime cannot perform the requested operation because a script exception is pending")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime cannot perform the requested operation because a script exception is pending")), false); FROM_MAYBE_END END_CONTEXT_SCOPE @@ -1661,7 +1794,7 @@ void V8ContextImpl::GetV8ObjectArrayBufferOrViewInfo(void* pvObject, V8Value& ar return; } - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The object is not a V8 array buffer or view")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The object is not a V8 array buffer or view")), false); END_CONTEXT_SCOPE } @@ -1706,27 +1839,33 @@ void V8ContextImpl::InvokeWithV8ObjectArrayBufferOrViewData(void* pvObject, V8Ob return; } - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The object is not a V8 array buffer or view")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The object is not a V8 array buffer or view")), false); END_CONTEXT_SCOPE } //----------------------------------------------------------------------------- -void V8ContextImpl::InitializeImportMeta(v8::Local /*hContext*/, v8::Local hModule, v8::Local hMeta) +void V8ContextImpl::InitializeImportMeta(v8::Local hContext, v8::Local hModule, v8::Local hMeta) { BEGIN_CONTEXT_SCOPE + FROM_MAYBE_TRY try { - for (const auto& entry : m_ModuleCache) + for (auto& entry : m_ModuleCache) { if (entry.hModule == hModule) { - for (const auto& pair : HostObjectUtil::GetInstance().CreateModuleContext(entry.DocumentInfo)) + ASSERT_EVAL(FROM_MAYBE(entry.hMetaHolder->Set(hContext, 0, hMeta))); + + auto hSetModuleResultFunction = FROM_MAYBE(v8::Function::New(m_hContext, SetModuleResultCallback, hMeta)); + ASSERT_EVAL(FROM_MAYBE(hMeta->DefineOwnProperty(m_hContext, m_hSetModuleResultKey, hSetModuleResultFunction, v8::DontEnum))); + + for (const auto& pair : HostObjectUtil::CreateModuleContext(entry.DocumentInfo)) { - (void)hMeta->Set(m_hContext, FROM_MAYBE(CreateString(pair.first)), ImportValue(pair.second)); + ASSERT_EVAL(FROM_MAYBE(hMeta->Set(m_hContext, FROM_MAYBE(CreateString(pair.first)), ImportValue(pair.second)))); } return; @@ -1739,6 +1878,7 @@ void V8ContextImpl::InitializeImportMeta(v8::Local /*hContext*/, v8 } FROM_MAYBE_CATCH_CONSUME + END_CONTEXT_SCOPE } @@ -1807,7 +1947,7 @@ v8::MaybeLocal V8ContextImpl::ImportModule(const V8DocumentInfo* pS if (innerHasCaught) { - (void)hResolver->Reject(m_hContext, innerTryCatch.Exception()); + ASSERT_EVAL(FROM_MAYBE(hResolver->Reject(m_hContext, innerTryCatch.Exception()))); } return hResolver->GetPromise(); @@ -1867,7 +2007,7 @@ v8::MaybeLocal V8ContextImpl::ResolveModule(v8::Local hS { V8DocumentInfo documentInfo; V8Value exportsValue(V8Value::Undefined); - auto code = HostObjectUtil::GetInstance().LoadModule(*pSourceDocumentInfo, CreateStdString(hSpecifier), documentInfo, exportsValue); + auto code = HostObjectUtil::LoadModule(*pSourceDocumentInfo, CreateStdString(hSpecifier), documentInfo, exportsValue); auto codeDigest = code.GetDigest(); auto hModule = GetCachedModule(documentInfo.GetUniqueId(), codeDigest); @@ -1963,7 +2103,7 @@ v8::MaybeLocal V8ContextImpl::PopulateSyntheticModule(v8::LocalGetNumberOfEmbedderDataFields() > 1) { - auto pContextImpl = reinterpret_cast(hContext->GetAlignedPointerFromEmbedderData(1)); + auto pContextImpl = static_cast(hContext->GetAlignedPointerFromEmbedderData(1)); if (pContextImpl != nullptr) { return pContextImpl->PopulateSyntheticModule(hModule); @@ -2019,7 +2159,7 @@ void V8ContextImpl::Teardown() if (m_pvV8ObjectCache != nullptr) { std::vector v8ObjectPtrs; - HostObjectUtil::GetInstance().GetAllCachedV8Objects(m_pvV8ObjectCache, v8ObjectPtrs); + HostObjectUtil::GetAllCachedV8Objects(m_pvV8ObjectCache, v8ObjectPtrs); for (auto pvV8Object : v8ObjectPtrs) { auto hObject = ::HandleFromPtr(pvV8Object); @@ -2034,7 +2174,7 @@ void V8ContextImpl::Teardown() Dispose(hObject); } - HostObjectUtil::GetInstance().Release(m_pvV8ObjectCache); + HostObjectUtil::Release(m_pvV8ObjectCache); m_pvV8ObjectCache = nullptr; } @@ -2056,14 +2196,18 @@ void V8ContextImpl::Teardown() } Dispose(m_hAsyncGeneratorConstructor); + Dispose(m_hGetModuleResultFunction); Dispose(m_hToJsonFunction); Dispose(m_hToAsyncIteratorFunction); Dispose(m_hToIteratorFunction); + Dispose(m_hFastHostFunctionTemplate); + Dispose(m_hFastHostObjectTemplate); Dispose(m_hHostDelegateTemplate); Dispose(m_hHostInvocableTemplate); Dispose(m_hHostObjectTemplate); Dispose(m_hTerminationException); Dispose(m_hFlushFunction); + Dispose(m_hSetModuleResultKey); Dispose(m_hConstructorKey); Dispose(m_hInvalidModuleRequest); Dispose(m_hPropertyValueNotInvocable); @@ -2075,6 +2219,8 @@ void V8ContextImpl::Teardown() Dispose(m_hAccessTokenKey); Dispose(m_hCacheKey); Dispose(m_hHostExceptionKey); + Dispose(m_hMissingPropertyValue); + Dispose(m_hModuleResultKey); Dispose(m_hIsHostObjectKey); // As of V8 3.16.0, the global property getter for a disposed context @@ -2082,14 +2228,10 @@ void V8ContextImpl::Teardown() if (!m_hContext.IsEmpty()) { - auto hGlobalProxy = m_hContext->Global(); - if (!hGlobalProxy.IsEmpty()) + auto hGlobal = m_hContext->Global(); + if (!hGlobal.IsEmpty() && (hGlobal->InternalFieldCount() > 0)) { - auto hGlobal = ::ValueAsObject(hGlobalProxy->GetPrototype()); - if (!hGlobal.IsEmpty() && (hGlobal->InternalFieldCount() > 0)) - { - hGlobal->SetAlignedPointerInInternalField(0, nullptr); - } + hGlobal->SetAlignedPointerInInternalField(0, nullptr); } if (m_hContext->GetNumberOfEmbedderDataFields() > 1) @@ -2274,8 +2416,10 @@ void V8ContextImpl::GetV8ObjectPropertyIndices(v8::Local hObject, st //----------------------------------------------------------------------------- -void V8ContextImpl::GetGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::GetGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto hName = ::ValueAsString(hKey); if (hName.IsEmpty()) { @@ -2301,12 +2445,16 @@ void V8ContextImpl::GetGlobalProperty(v8::Local hKey, const v8::Proper } FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::SetGlobalProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::SetGlobalProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto hName = ::ValueAsString(hKey); if (hName.IsEmpty()) { @@ -2325,20 +2473,24 @@ void V8ContextImpl::SetGlobalProperty(v8::Local hKey, v8::Localsecond->HasOwnProperty(pContextImpl->m_hContext, hName))) { - (void)it->second->Set(pContextImpl->m_hContext, hName, hValue); - CALLBACK_RETURN(hValue); + ASSERT_EVAL(FROM_MAYBE(it->second->Set(pContextImpl->m_hContext, hName, hValue))); + CALLBACK_RETURN_VOID(); } } } } FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::QueryGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::QueryGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto hName = ::ValueAsString(hKey); if (hName.IsEmpty()) { @@ -2364,12 +2516,16 @@ void V8ContextImpl::QueryGlobalProperty(v8::Local hKey, const v8::Prop } FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::DeleteGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::DeleteGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto hName = ::ValueAsString(hKey); if (hName.IsEmpty()) { @@ -2397,7 +2553,7 @@ void V8ContextImpl::DeleteGlobalProperty(v8::Local hKey, const v8::Pro { try { - CALLBACK_RETURN(HostObjectUtil::GetInstance().DeleteProperty(pvObject, pContextImpl->CreateStdString(hName))); + CALLBACK_RETURN(HostObjectUtil::DeleteProperty(pvObject, pContextImpl->CreateStdString(hName))); } catch (const HostException&) { @@ -2412,6 +2568,8 @@ void V8ContextImpl::DeleteGlobalProperty(v8::Local hKey, const v8::Pro } FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT } //----------------------------------------------------------------------------- @@ -2436,7 +2594,7 @@ void V8ContextImpl::GetGlobalPropertyNames(const v8::PropertyCallbackInfoGetHostObject(it->second); if (pvObject != nullptr) { - HostObjectUtil::GetInstance().GetPropertyNames(pvObject, tempNames); + HostObjectUtil::GetPropertyNames(pvObject, tempNames); } else { @@ -2470,8 +2628,10 @@ void V8ContextImpl::GetGlobalPropertyNames(const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::GetGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + FROM_MAYBE_TRY auto pContextImpl = ::GetContextImplFromHolder(info); @@ -2492,12 +2652,16 @@ void V8ContextImpl::GetGlobalProperty(uint32_t index, const v8::PropertyCallback } FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::SetGlobalProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::SetGlobalProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + FROM_MAYBE_TRY auto pContextImpl = ::GetContextImplFromHolder(info); @@ -2511,20 +2675,24 @@ void V8ContextImpl::SetGlobalProperty(uint32_t index, v8::Local hValu { if (FROM_MAYBE(it->second->HasOwnProperty(pContextImpl->m_hContext, hName))) { - (void)it->second->Set(pContextImpl->m_hContext, index, hValue); - CALLBACK_RETURN(hValue); + ASSERT_EVAL(FROM_MAYBE(it->second->Set(pContextImpl->m_hContext, index, hValue))); + CALLBACK_RETURN_VOID(); } } } } FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::QueryGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::QueryGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + FROM_MAYBE_TRY auto pContextImpl = ::GetContextImplFromHolder(info); @@ -2546,12 +2714,16 @@ void V8ContextImpl::QueryGlobalProperty(uint32_t index, const v8::PropertyCallba } FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::DeleteGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::DeleteGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + FROM_MAYBE_TRY auto pContextImpl = ::GetContextImplFromHolder(info); @@ -2572,6 +2744,8 @@ void V8ContextImpl::DeleteGlobalProperty(uint32_t index, const v8::PropertyCallb } FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT } //----------------------------------------------------------------------------- @@ -2596,7 +2770,7 @@ void V8ContextImpl::GetGlobalPropertyIndices(const v8::PropertyCallbackInfoGetHostObject(it->second); if (pvObject != nullptr) { - HostObjectUtil::GetInstance().GetPropertyIndices(pvObject, tempIndices); + HostObjectUtil::GetPropertyIndices(pvObject, tempIndices); } else { @@ -2648,7 +2822,7 @@ void V8ContextImpl::GetHostObjectIterator(const v8::FunctionCallbackInfoGetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.This()); if (pvObject != nullptr) { try @@ -2659,7 +2833,7 @@ void V8ContextImpl::GetHostObjectIterator(const v8::FunctionCallbackInfom_hToIteratorFunction = pContextImpl->CreatePersistent(FROM_MAYBE(hEngineInternal->Get(pContextImpl->m_hContext, pContextImpl->CreateString("toIterator"))).As()); } - v8::Local args[] = { pContextImpl->ImportValue(HostObjectUtil::GetInstance().GetEnumerator(pvObject)) }; + v8::Local args[] = { pContextImpl->ImportValue(HostObjectUtil::GetEnumerator(pvObject)) }; CALLBACK_RETURN(FROM_MAYBE(pContextImpl->m_hToIteratorFunction->Call(pContextImpl->m_hContext, pContextImpl->GetUndefined(), 1, args))); } catch (const HostException& exception) @@ -2681,7 +2855,73 @@ void V8ContextImpl::GetHostObjectAsyncIterator(const v8::FunctionCallbackInfoGetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.This()); + if (pvObject != nullptr) + { + try + { + if (pContextImpl->m_hToAsyncIteratorFunction.IsEmpty()) + { + auto hEngineInternal = FROM_MAYBE(pContextImpl->m_hContext->Global()->Get(pContextImpl->m_hContext, pContextImpl->CreateString("EngineInternal"))).As(); + pContextImpl->m_hToAsyncIteratorFunction = pContextImpl->CreatePersistent(FROM_MAYBE(hEngineInternal->Get(pContextImpl->m_hContext, pContextImpl->CreateString("toAsyncIterator"))).As()); + } + + v8::Local args[] = { pContextImpl->ImportValue(HostObjectUtil::GetAsyncEnumerator(pvObject)) }; + CALLBACK_RETURN(FROM_MAYBE(pContextImpl->m_hToAsyncIteratorFunction->Call(pContextImpl->m_hContext, pContextImpl->GetUndefined(), 1, args))); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + FROM_MAYBE_CATCH_CONSUME +} + +//----------------------------------------------------------------------------- + +void V8ContextImpl::GetFastHostObjectIterator(const v8::FunctionCallbackInfo& info) +{ + FROM_MAYBE_TRY + + auto pContextImpl = ::GetContextImplFromData(info); + if (pContextImpl != nullptr) + { + auto pvObject = pContextImpl->GetHostObject(info.This()); + if (pvObject != nullptr) + { + try + { + if (pContextImpl->m_hToIteratorFunction.IsEmpty()) + { + auto hEngineInternal = FROM_MAYBE(pContextImpl->m_hContext->Global()->Get(pContextImpl->m_hContext, pContextImpl->CreateString("EngineInternal"))).As(); + pContextImpl->m_hToIteratorFunction = pContextImpl->CreatePersistent(FROM_MAYBE(hEngineInternal->Get(pContextImpl->m_hContext, pContextImpl->CreateString("toIterator"))).As()); + } + + v8::Local args[] = { pContextImpl->ImportValue(FastHostObjectUtil::GetEnumerator(pvObject)) }; + CALLBACK_RETURN(FROM_MAYBE(pContextImpl->m_hToIteratorFunction->Call(pContextImpl->m_hContext, pContextImpl->GetUndefined(), 1, args))); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + FROM_MAYBE_CATCH_CONSUME +} + +//----------------------------------------------------------------------------- + +void V8ContextImpl::GetFastHostObjectAsyncIterator(const v8::FunctionCallbackInfo& info) +{ + FROM_MAYBE_TRY + + auto pContextImpl = ::GetContextImplFromData(info); + if (pContextImpl != nullptr) + { + auto pvObject = pContextImpl->GetHostObject(info.This()); if (pvObject != nullptr) { try @@ -2692,7 +2932,7 @@ void V8ContextImpl::GetHostObjectAsyncIterator(const v8::FunctionCallbackInfom_hToAsyncIteratorFunction = pContextImpl->CreatePersistent(FROM_MAYBE(hEngineInternal->Get(pContextImpl->m_hContext, pContextImpl->CreateString("toAsyncIterator"))).As()); } - v8::Local args[] = { pContextImpl->ImportValue(HostObjectUtil::GetInstance().GetAsyncEnumerator(pvObject)) }; + v8::Local args[] = { pContextImpl->ImportValue(FastHostObjectUtil::GetAsyncEnumerator(pvObject)) }; CALLBACK_RETURN(FROM_MAYBE(pContextImpl->m_hToAsyncIteratorFunction->Call(pContextImpl->m_hContext, pContextImpl->GetUndefined(), 1, args))); } catch (const HostException& exception) @@ -2714,7 +2954,7 @@ void V8ContextImpl::GetHostObjectJson(const v8::FunctionCallbackInfo& auto pContextImpl = ::GetContextImplFromData(info); if (pContextImpl != nullptr) { - auto hObject = info.Holder(); + auto hObject = info.This(); if (pContextImpl->GetHostObject(hObject) != nullptr) { try @@ -2749,7 +2989,7 @@ void V8ContextImpl::CreateFunctionForHostDelegate(const v8::FunctionCallbackInfo auto pContextImpl = ::GetContextImplFromData(info); if (pContextImpl != nullptr) { - CALLBACK_RETURN(FROM_MAYBE(v8::Function::New(pContextImpl->m_hContext, InvokeHostDelegate, info.Holder()))); + CALLBACK_RETURN(FROM_MAYBE(v8::Function::New(pContextImpl->m_hContext, InvokeHostDelegate, info.This()))); } FROM_MAYBE_CATCH_CONSUME @@ -2762,7 +3002,8 @@ void V8ContextImpl::InvokeHostDelegate(const v8::FunctionCallbackInfo auto hTarget = ::ValueAsObject(info.Data()); if (!hTarget.IsEmpty()) { - auto argCount = info.Length(); + auto argCount = static_cast(info.Length()); + if (argCount < 1) { if (info.IsConstructCall()) @@ -2773,10 +3014,27 @@ void V8ContextImpl::InvokeHostDelegate(const v8::FunctionCallbackInfo CALLBACK_RETURN(FROM_MAYBE_DEFAULT(hTarget->CallAsFunction(info.GetIsolate()->GetCurrentContext(), hTarget, 0, nullptr))); } + if (argCount <= Constants::MaxInlineArgCount) + { + v8::Local args[argCount]; + + for (size_t index = 0; index < argCount; index++) + { + args[index] = info[index]; + } + + if (info.IsConstructCall()) + { + CALLBACK_RETURN(FROM_MAYBE_DEFAULT(hTarget->CallAsConstructor(info.GetIsolate()->GetCurrentContext(), argCount, args))); + } + + CALLBACK_RETURN(FROM_MAYBE_DEFAULT(hTarget->CallAsFunction(info.GetIsolate()->GetCurrentContext(), hTarget, argCount, args))); + } + std::vector> args; args.reserve(argCount); - for (auto index = 0; index < argCount; index++) + for (size_t index = 0; index < argCount; index++) { args.push_back(info[index]); } @@ -2792,14 +3050,16 @@ void V8ContextImpl::InvokeHostDelegate(const v8::FunctionCallbackInfo //----------------------------------------------------------------------------- -void V8ContextImpl::GetHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::GetHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + FROM_MAYBE_TRY auto pContextImpl = ::GetContextImplFromData(info); if (CheckContextImplForHostObjectCallback(pContextImpl)) { - auto hHolder = info.Holder(); + auto hHolder = info.HolderV2(); auto pvObject = pContextImpl->GetHostObject(hHolder); auto hName = ::ValueAsString(hKey); @@ -2809,11 +3069,8 @@ void V8ContextImpl::GetHostObjectProperty(v8::Local hKey, const v8::Pr { CALLBACK_RETURN((pvObject != nullptr) ? pContextImpl->GetTrue() : pContextImpl->GetFalse()); } - - return; } - - if (pvObject != nullptr) + else if (pvObject != nullptr) { try { @@ -2828,13 +3085,14 @@ void V8ContextImpl::GetHostObjectProperty(v8::Local hKey, const v8::Pr auto hCache = ::ValueAsObject(FROM_MAYBE(hHolder->GetPrivate(pContextImpl->m_hContext, pContextImpl->m_hCacheKey))); if (!hCache.IsEmpty() && FROM_MAYBE(hCache->HasOwnProperty(pContextImpl->m_hContext, hName))) { - CALLBACK_RETURN(FROM_MAYBE(hCache->Get(pContextImpl->m_hContext, hName))); + auto hValue = FROM_MAYBE(hCache->Get(pContextImpl->m_hContext, hName)); + CALLBACK_RETURN(!hValue->StrictEquals(pContextImpl->m_hMissingPropertyValue) ? hValue : v8::Local()); } } bool isCacheable; - auto hResult = pContextImpl->ImportValue(HostObjectUtil::GetInstance().GetProperty(pvObject, pContextImpl->CreateStdString(hName), isCacheable)); - if (isCacheable && !hResult.IsEmpty()) + auto hResult = pContextImpl->ImportValue(HostObjectUtil::GetProperty(pvObject, pContextImpl->CreateStdString(hName), isCacheable)); + if (isCacheable) { auto hCache = ::ValueAsObject(FROM_MAYBE(hHolder->GetPrivate(pContextImpl->m_hContext, pContextImpl->m_hCacheKey))); if (hCache.IsEmpty()) @@ -2843,7 +3101,7 @@ void V8ContextImpl::GetHostObjectProperty(v8::Local hKey, const v8::Pr ASSERT_EVAL(FROM_MAYBE(hHolder->SetPrivate(pContextImpl->m_hContext, pContextImpl->m_hCacheKey, hCache))); } - ASSERT_EVAL(FROM_MAYBE(hCache->Set(pContextImpl->m_hContext, hName, hResult))); + ASSERT_EVAL(FROM_MAYBE(hCache->Set(pContextImpl->m_hContext, hName, !hResult.IsEmpty() ? hResult : pContextImpl->m_hMissingPropertyValue))); } CALLBACK_RETURN(hResult); @@ -2856,12 +3114,16 @@ void V8ContextImpl::GetHostObjectProperty(v8::Local hKey, const v8::Pr } FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::SetHostObjectProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::SetHostObjectProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto hName = ::ValueAsString(hKey); if (hName.IsEmpty()) { @@ -2871,13 +3133,13 @@ void V8ContextImpl::SetHostObjectProperty(v8::Local hKey, v8::LocalGetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); if (pvObject != nullptr) { try { - HostObjectUtil::GetInstance().SetProperty(pvObject, pContextImpl->CreateStdString(hName), pContextImpl->ExportValue(hValue)); - CALLBACK_RETURN(hValue); + HostObjectUtil::SetProperty(pvObject, pContextImpl->CreateStdString(hName), pContextImpl->ExportValue(hValue)); + CALLBACK_RETURN_VOID(); } catch (const HostException& exception) { @@ -2885,12 +3147,16 @@ void V8ContextImpl::SetHostObjectProperty(v8::Local hKey, v8::Local hKey, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::QueryHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto hName = ::ValueAsString(hKey); if (hName.IsEmpty()) { @@ -2900,13 +3166,13 @@ void V8ContextImpl::QueryHostObjectProperty(v8::Local hKey, const v8:: auto pContextImpl = ::GetContextImplFromData(info); if (CheckContextImplForHostObjectCallback(pContextImpl)) { - auto pvObject = pContextImpl->GetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); if (pvObject != nullptr) { try { std::vector names; - HostObjectUtil::GetInstance().GetPropertyNames(pvObject, names); + HostObjectUtil::GetPropertyNames(pvObject, names); auto name = pContextImpl->CreateStdString(hName); for (auto it = names.begin(); it != names.end(); it++) @@ -2923,12 +3189,16 @@ void V8ContextImpl::QueryHostObjectProperty(v8::Local hKey, const v8:: } } } + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::DeleteHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::DeleteHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto hName = ::ValueAsString(hKey); if (hName.IsEmpty()) { @@ -2938,12 +3208,12 @@ void V8ContextImpl::DeleteHostObjectProperty(v8::Local hKey, const v8: auto pContextImpl = ::GetContextImplFromData(info); if (CheckContextImplForHostObjectCallback(pContextImpl)) { - auto pvObject = pContextImpl->GetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); if (pvObject != nullptr) { try { - CALLBACK_RETURN(HostObjectUtil::GetInstance().DeleteProperty(pvObject, pContextImpl->CreateStdString(hName))); + CALLBACK_RETURN(HostObjectUtil::DeleteProperty(pvObject, pContextImpl->CreateStdString(hName))); } catch (const HostException& exception) { @@ -2951,6 +3221,8 @@ void V8ContextImpl::DeleteHostObjectProperty(v8::Local hKey, const v8: } } } + + CALLBACK_EXIT } //----------------------------------------------------------------------------- @@ -2962,13 +3234,13 @@ void V8ContextImpl::GetHostObjectPropertyNames(const v8::PropertyCallbackInfoGetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); if (pvObject != nullptr) { try { std::vector names; - HostObjectUtil::GetInstance().GetPropertyNames(pvObject, names); + HostObjectUtil::GetPropertyNames(pvObject, names); auto nameCount = static_cast(names.size()); auto hImportedNames = pContextImpl->CreateArray(nameCount); @@ -2991,17 +3263,19 @@ void V8ContextImpl::GetHostObjectPropertyNames(const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::GetHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto pContextImpl = ::GetContextImplFromData(info); if (CheckContextImplForHostObjectCallback(pContextImpl)) { - auto pvObject = pContextImpl->GetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); if (pvObject != nullptr) { try { - CALLBACK_RETURN(pContextImpl->ImportValue(HostObjectUtil::GetInstance().GetProperty(pvObject, index))); + CALLBACK_RETURN(pContextImpl->ImportValue(HostObjectUtil::GetProperty(pvObject, index))); } catch (const HostException& exception) { @@ -3009,22 +3283,26 @@ void V8ContextImpl::GetHostObjectProperty(uint32_t index, const v8::PropertyCall } } } + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::SetHostObjectProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::SetHostObjectProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto pContextImpl = ::GetContextImplFromData(info); if (CheckContextImplForHostObjectCallback(pContextImpl)) { - auto pvObject = pContextImpl->GetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); if (pvObject != nullptr) { try { - HostObjectUtil::GetInstance().SetProperty(pvObject, index, pContextImpl->ExportValue(hValue)); - CALLBACK_RETURN(hValue); + HostObjectUtil::SetProperty(pvObject, index, pContextImpl->ExportValue(hValue)); + CALLBACK_RETURN_VOID(); } catch (const HostException& exception) { @@ -3032,22 +3310,26 @@ void V8ContextImpl::SetHostObjectProperty(uint32_t index, v8::Local h } } } + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::QueryHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::QueryHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto pContextImpl = ::GetContextImplFromData(info); if (CheckContextImplForHostObjectCallback(pContextImpl)) { - auto pvObject = pContextImpl->GetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); if (pvObject != nullptr) { try { std::vector indices; - HostObjectUtil::GetInstance().GetPropertyIndices(pvObject, indices); + HostObjectUtil::GetPropertyIndices(pvObject, indices); for (auto it = indices.begin(); it < indices.end(); it++) { @@ -3063,21 +3345,25 @@ void V8ContextImpl::QueryHostObjectProperty(uint32_t index, const v8::PropertyCa } } } + + CALLBACK_EXIT } //----------------------------------------------------------------------------- -void V8ContextImpl::DeleteHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info) +v8::Intercepted V8ContextImpl::DeleteHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info) { + CALLBACK_ENTER + auto pContextImpl = ::GetContextImplFromData(info); if (CheckContextImplForHostObjectCallback(pContextImpl)) { - auto pvObject = pContextImpl->GetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); if (pvObject != nullptr) { try { - CALLBACK_RETURN(HostObjectUtil::GetInstance().DeleteProperty(pvObject, index)); + CALLBACK_RETURN(HostObjectUtil::DeleteProperty(pvObject, index)); } catch (const HostException& exception) { @@ -3085,6 +3371,8 @@ void V8ContextImpl::DeleteHostObjectProperty(uint32_t index, const v8::PropertyC } } } + + CALLBACK_EXIT } //----------------------------------------------------------------------------- @@ -3096,13 +3384,13 @@ void V8ContextImpl::GetHostObjectPropertyIndices(const v8::PropertyCallbackInfo< auto pContextImpl = ::GetContextImplFromData(info); if (CheckContextImplForHostObjectCallback(pContextImpl)) { - auto pvObject = pContextImpl->GetHostObject(info.Holder()); + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); if (pvObject != nullptr) { try { std::vector indices; - HostObjectUtil::GetInstance().GetPropertyIndices(pvObject, indices); + HostObjectUtil::GetPropertyIndices(pvObject, indices); auto indexCount = static_cast(indices.size()); auto hImportedIndices = pContextImpl->CreateArray(indexCount); @@ -3125,41 +3413,484 @@ void V8ContextImpl::GetHostObjectPropertyIndices(const v8::PropertyCallbackInfo< //----------------------------------------------------------------------------- -void V8ContextImpl::InvokeHostObject(const v8::FunctionCallbackInfo& info) +v8::Intercepted V8ContextImpl::GetFastHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) { - auto pContextImpl = ::GetContextImplFromData(info); - if (CheckContextImplForHostObjectCallback(pContextImpl)) - { - auto pvObject = pContextImpl->GetHostObject(info.Holder()); - if (pvObject != nullptr) - { - try - { - auto argCount = info.Length(); + CALLBACK_ENTER - std::vector exportedArgs; - exportedArgs.reserve(argCount); + FROM_MAYBE_TRY + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto hHolder = info.HolderV2(); + auto pvObject = pContextImpl->GetHostObject(hHolder); - for (auto index = 0; index < argCount; index++) + auto hName = ::ValueAsString(hKey); + if (hName.IsEmpty()) + { + if (!hKey.IsEmpty() && hKey->StrictEquals(pContextImpl->m_hIsHostObjectKey)) { - exportedArgs.push_back(pContextImpl->ExportValue(info[index])); + CALLBACK_RETURN((pvObject != nullptr) ? pContextImpl->GetTrue() : pContextImpl->GetFalse()); } - - CALLBACK_RETURN(pContextImpl->ImportValue(HostObjectUtil::GetInstance().Invoke(pvObject, info.IsConstructCall(), exportedArgs))); } - catch (const HostException& exception) + else if (pvObject != nullptr) { - pContextImpl->ThrowScriptException(exception); - } - } - } -} - -//----------------------------------------------------------------------------- + try + { + auto hCache = ::ValueAsObject(FROM_MAYBE(hHolder->GetPrivate(pContextImpl->m_hContext, pContextImpl->m_hCacheKey))); + if (!hCache.IsEmpty() && FROM_MAYBE(hCache->HasOwnProperty(pContextImpl->m_hContext, hName))) + { + auto hValue = FROM_MAYBE(hCache->Get(pContextImpl->m_hContext, hName)); + CALLBACK_RETURN(!hValue->StrictEquals(pContextImpl->m_hMissingPropertyValue) ? hValue : v8::Local()); + } -void V8ContextImpl::FlushCallback(const v8::FunctionCallbackInfo& /*info*/) -{ -} + bool isCacheable; + auto hResult = pContextImpl->ImportValue(FastHostObjectUtil::GetProperty(pvObject, pContextImpl->CreateStdString(hName), isCacheable)); + if (isCacheable) + { + auto hCache = ::ValueAsObject(FROM_MAYBE(hHolder->GetPrivate(pContextImpl->m_hContext, pContextImpl->m_hCacheKey))); + if (hCache.IsEmpty()) + { + hCache = pContextImpl->CreateObject(); + ASSERT_EVAL(FROM_MAYBE(hHolder->SetPrivate(pContextImpl->m_hContext, pContextImpl->m_hCacheKey, hCache))); + } + + ASSERT_EVAL(FROM_MAYBE(hCache->Set(pContextImpl->m_hContext, hName, !hResult.IsEmpty() ? hResult : pContextImpl->m_hMissingPropertyValue))); + } + + CALLBACK_RETURN(hResult); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + FROM_MAYBE_CATCH_CONSUME + + CALLBACK_EXIT +} + +//----------------------------------------------------------------------------- + +v8::Intercepted V8ContextImpl::SetFastHostObjectProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info) +{ + CALLBACK_ENTER + + auto hName = ::ValueAsString(hKey); + if (hName.IsEmpty()) + { + return; + } + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); + if (pvObject != nullptr) + { + try + { + FastHostObjectUtil::SetProperty(pvObject, pContextImpl->CreateStdString(hName), pContextImpl->ExportValue(hValue)); + CALLBACK_RETURN_VOID(); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + CALLBACK_EXIT +} + +//----------------------------------------------------------------------------- + +v8::Intercepted V8ContextImpl::QueryFastHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) +{ + CALLBACK_ENTER + + auto hName = ::ValueAsString(hKey); + if (hName.IsEmpty()) + { + return; + } + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); + if (pvObject != nullptr) + { + try + { + auto flags = FastHostObjectUtil::QueryProperty(pvObject, pContextImpl->CreateStdString(hName)); + if (::HasFlag(flags, FastHostObjectUtil::PropertyFlags::Available)) + { + auto attrs = v8::None; + + if (!::HasFlag(flags, FastHostObjectUtil::PropertyFlags::Writable)) + { + attrs = ::CombineFlags(attrs, v8::ReadOnly); + } + + if (!::HasFlag(flags, FastHostObjectUtil::PropertyFlags::Enumerable)) + { + attrs = ::CombineFlags(attrs, v8::DontEnum); + } + + if (!::HasFlag(flags, FastHostObjectUtil::PropertyFlags::Deletable)) + { + attrs = ::CombineFlags(attrs, v8::DontDelete); + } + + CALLBACK_RETURN(attrs); + } + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + CALLBACK_EXIT +} + +//----------------------------------------------------------------------------- + +v8::Intercepted V8ContextImpl::DeleteFastHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info) +{ + CALLBACK_ENTER + + auto hName = ::ValueAsString(hKey); + if (hName.IsEmpty()) + { + return; + } + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); + if (pvObject != nullptr) + { + try + { + CALLBACK_RETURN(FastHostObjectUtil::DeleteProperty(pvObject, pContextImpl->CreateStdString(hName))); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + CALLBACK_EXIT +} + +//----------------------------------------------------------------------------- + +void V8ContextImpl::GetFastHostObjectPropertyNames(const v8::PropertyCallbackInfo& info) +{ + FROM_MAYBE_TRY + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); + if (pvObject != nullptr) + { + try + { + std::vector names; + FastHostObjectUtil::GetPropertyNames(pvObject, names); + auto nameCount = static_cast(names.size()); + + auto hImportedNames = pContextImpl->CreateArray(nameCount); + for (auto index = 0; index < nameCount; index++) + { + ASSERT_EVAL(FROM_MAYBE(hImportedNames->Set(pContextImpl->m_hContext, index, FROM_MAYBE(pContextImpl->CreateString(names[index]))))); + } + + CALLBACK_RETURN(hImportedNames); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + FROM_MAYBE_CATCH_CONSUME +} + +//----------------------------------------------------------------------------- + +v8::Intercepted V8ContextImpl::GetFastHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info) +{ + CALLBACK_ENTER + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); + if (pvObject != nullptr) + { + try + { + CALLBACK_RETURN(pContextImpl->ImportValue(FastHostObjectUtil::GetProperty(pvObject, index))); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + CALLBACK_EXIT +} + +//----------------------------------------------------------------------------- + +v8::Intercepted V8ContextImpl::SetFastHostObjectProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info) +{ + CALLBACK_ENTER + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); + if (pvObject != nullptr) + { + try + { + FastHostObjectUtil::SetProperty(pvObject, index, pContextImpl->ExportValue(hValue)); + CALLBACK_RETURN_VOID(); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + CALLBACK_EXIT +} + +//----------------------------------------------------------------------------- + +v8::Intercepted V8ContextImpl::QueryFastHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info) +{ + CALLBACK_ENTER + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); + if (pvObject != nullptr) + { + try + { + auto flags = FastHostObjectUtil::QueryProperty(pvObject, index); + if (::HasFlag(flags, FastHostObjectUtil::PropertyFlags::Available)) + { + auto attrs = v8::None; + + if (!::HasFlag(flags, FastHostObjectUtil::PropertyFlags::Writable)) + { + attrs = ::CombineFlags(attrs, v8::ReadOnly); + } + + if (!::HasFlag(flags, FastHostObjectUtil::PropertyFlags::Enumerable)) + { + attrs = ::CombineFlags(attrs, v8::DontEnum); + } + + if (!::HasFlag(flags, FastHostObjectUtil::PropertyFlags::Deletable)) + { + attrs = ::CombineFlags(attrs, v8::DontDelete); + } + + CALLBACK_RETURN(attrs); + } + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + CALLBACK_EXIT +} + +//----------------------------------------------------------------------------- + +v8::Intercepted V8ContextImpl::DeleteFastHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info) +{ + CALLBACK_ENTER + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); + if (pvObject != nullptr) + { + try + { + CALLBACK_RETURN(FastHostObjectUtil::DeleteProperty(pvObject, index)); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + CALLBACK_EXIT +} + +//----------------------------------------------------------------------------- + +void V8ContextImpl::GetFastHostObjectPropertyIndices(const v8::PropertyCallbackInfo& info) +{ + FROM_MAYBE_TRY + + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.HolderV2()); + if (pvObject != nullptr) + { + try + { + std::vector indices; + FastHostObjectUtil::GetPropertyIndices(pvObject, indices); + auto indexCount = static_cast(indices.size()); + + auto hImportedIndices = pContextImpl->CreateArray(indexCount); + for (auto index = 0; index < indexCount; index++) + { + ASSERT_EVAL(FROM_MAYBE(hImportedIndices->Set(pContextImpl->m_hContext, index, pContextImpl->CreateInteger(indices[index])))); + } + + CALLBACK_RETURN(hImportedIndices); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } + + FROM_MAYBE_CATCH_CONSUME +} + +//----------------------------------------------------------------------------- + +void V8ContextImpl::InvokeHostObject(const v8::FunctionCallbackInfo& info) +{ + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.This()); + if (pvObject != nullptr) + { + try + { + auto argCount = static_cast(info.Length()); + + if (argCount < 1) + { + CALLBACK_RETURN(pContextImpl->ImportValue(HostObjectUtil::Invoke(pvObject, info.IsConstructCall(), 0, nullptr))); + } + + if (argCount <= Constants::MaxInlineArgCount) + { + NonexistentV8Value exportedArgs[argCount]; + + for (size_t index = 0; index < argCount; index++) + { + exportedArgs[index] = pContextImpl->ExportValue(info[index]); + } + + CALLBACK_RETURN(pContextImpl->ImportValue(HostObjectUtil::Invoke(pvObject, info.IsConstructCall(), argCount, exportedArgs))); + } + + std::vector exportedArgs; + exportedArgs.reserve(argCount); + + for (size_t index = 0; index < argCount; index++) + { + exportedArgs.push_back(pContextImpl->ExportValue(info[index])); + } + + CALLBACK_RETURN(pContextImpl->ImportValue(HostObjectUtil::Invoke(pvObject, info.IsConstructCall(), argCount, exportedArgs.data()))); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } +} + +//----------------------------------------------------------------------------- + +void V8ContextImpl::InvokeFastHostObject(const v8::FunctionCallbackInfo& info) +{ + auto pContextImpl = ::GetContextImplFromData(info); + if (CheckContextImplForHostObjectCallback(pContextImpl)) + { + auto pvObject = pContextImpl->GetHostObject(info.This()); + if (pvObject != nullptr) + { + try + { + auto argCount = static_cast(info.Length()); + + if (argCount < 1) + { + CALLBACK_RETURN(pContextImpl->ImportValue(FastHostObjectUtil::Invoke(pvObject, info.IsConstructCall(), 0, nullptr))); + } + + if (argCount <= Constants::MaxInlineArgCount) + { + NonexistentV8Value exportedArgs[argCount]; + + for (size_t index = 0; index < argCount; index++) + { + exportedArgs[index] = pContextImpl->ExportValue(info[index]); + } + + CALLBACK_RETURN(pContextImpl->ImportValue(FastHostObjectUtil::Invoke(pvObject, info.IsConstructCall(), argCount, exportedArgs))); + } + + std::vector exportedArgs; + exportedArgs.reserve(argCount); + + for (size_t index = 0; index < argCount; index++) + { + exportedArgs.push_back(pContextImpl->ExportValue(info[index])); + } + + CALLBACK_RETURN(pContextImpl->ImportValue(FastHostObjectUtil::Invoke(pvObject, info.IsConstructCall(), argCount, exportedArgs.data()))); + } + catch (const HostException& exception) + { + pContextImpl->ThrowScriptException(exception); + } + } + } +} + +//----------------------------------------------------------------------------- + +void V8ContextImpl::FlushCallback(const v8::FunctionCallbackInfo& /*info*/) +{ +} //----------------------------------------------------------------------------- @@ -3181,31 +3912,100 @@ void V8ContextImpl::PerformanceNowCallback(const v8::FunctionCallbackInfo& info) { auto pContextImpl = ::GetContextImplFromData(info); - if (pContextImpl == nullptr) + if (pContextImpl != nullptr) { - return; - } + double delay; + if ((info.Length() < 1) || !::TryGetValueAsNumber(pContextImpl->m_hContext, info[0], delay)) + { + pContextImpl->ThrowException(v8::Exception::TypeError(pContextImpl->CreateString("Invalid argument: 'delay' must be a number"))); + } + else + { + auto precise = false; + if (info.Length() > 1) + { + auto hArg = info[1]; + if (!hArg.IsEmpty()) + { + precise = hArg->BooleanValue(info.GetIsolate()); + } + } - double delay; - if ((info.Length() < 1) || !::TryGetValueAsAnyNumber(pContextImpl->m_hContext, info[0], delay)) - { - pContextImpl->ThrowException(v8::Exception::TypeError(pContextImpl->CreateString("Invalid argument: 'delay' must be a number"))); - return; + if (delay > 0) + { + CALLBACK_RETURN(HighResolutionClock::SleepMilliseconds(delay, precise)); + } + } } +} + +//----------------------------------------------------------------------------- + +void V8ContextImpl::SetModuleResultCallback(const v8::FunctionCallbackInfo& info) +{ + FROM_MAYBE_TRY + + auto hMeta = ::ValueAsObject(info.Data()); + if (!hMeta.IsEmpty()) + { + auto pIsolate = info.GetIsolate(); + if (pIsolate != nullptr) + { + auto pIsolateImpl = V8IsolateImpl::GetInstanceFromIsolate(pIsolate); + if (pIsolateImpl != nullptr) + { + auto pContextImpl = pIsolateImpl->FindContext(FROM_MAYBE(hMeta->GetCreationContext(pIsolate))); + if (pContextImpl != nullptr) + { + auto hValue = (info.Length() > 0) ? info[0] : v8::Local(pContextImpl->GetUndefined()); + auto value = pContextImpl->ExportValue(hValue); + ASSERT_EVAL(FROM_MAYBE(hMeta->Set(pContextImpl->m_hContext, pContextImpl->m_hModuleResultKey, hValue))); + } + } + } + } + + FROM_MAYBE_CATCH_CONSUME +} + +//----------------------------------------------------------------------------- - auto precise = false; - if (info.Length() > 1) +void V8ContextImpl::GetPromiseStateCallback(const v8::FunctionCallbackInfo& info) +{ + auto pContextImpl = ::GetContextImplFromData(info); + if (pContextImpl != nullptr) { - auto hArg = info[1]; - if (!hArg.IsEmpty()) + if (info.Length() > 0) { - precise = hArg->BooleanValue(info.GetIsolate()); + auto hArg = info[0]; + if (!hArg.IsEmpty() && hArg->IsPromise()) + { + auto hPromise = hArg.As(); + CALLBACK_RETURN(hPromise->State()); + } } } +} - if (delay > 0) +//----------------------------------------------------------------------------- + +void V8ContextImpl::GetPromiseResultCallback(const v8::FunctionCallbackInfo& info) +{ + auto pContextImpl = ::GetContextImplFromData(info); + if (pContextImpl != nullptr) { - HighResolutionClock::SleepMilliseconds(delay, precise); + if (info.Length() > 0) + { + auto hArg = info[0]; + if (!hArg.IsEmpty() && hArg->IsPromise()) + { + auto hPromise = hArg.As(); + if (hPromise->State() != v8::Promise::PromiseState::kPending) + { + CALLBACK_RETURN(hPromise->Result()); + } + } + } } } @@ -3215,7 +4015,7 @@ void V8ContextImpl::DisposeWeakHandle(v8::Isolate* pIsolate, PersistentGetObject())); + ASSERT_EVAL(HostObjectUtil::RemoveV8ObjectCacheEntry(pvV8ObjectCache, pHolder->GetObject())); delete pHolder; phObject->Dispose(); @@ -3261,6 +4061,42 @@ bool V8ContextImpl::TryGetCachedModuleInfo(uint64_t uniqueId, V8DocumentInfo& do //----------------------------------------------------------------------------- +bool V8ContextImpl::TryGetCachedModuleMetaHolder(v8::Local hModule, v8::Local& hMetaHolder) +{ + _ASSERTE(m_spIsolateImpl->IsCurrent() && m_spIsolateImpl->IsLocked()); + + for (auto it = m_ModuleCache.begin(); it != m_ModuleCache.end(); it++) + { + if (it->hModule == hModule) + { + hMetaHolder = it->hMetaHolder; + return true; + } + } + + return false; +} + +//----------------------------------------------------------------------------- + +bool V8ContextImpl::TryGetCachedModuleMetaHolder(uint64_t uniqueId, v8::Local& hMetaHolder) +{ + _ASSERTE(m_spIsolateImpl->IsCurrent() && m_spIsolateImpl->IsLocked()); + + for (auto it = m_ModuleCache.begin(); it != m_ModuleCache.end(); it++) + { + if (it->DocumentInfo.GetUniqueId() == uniqueId) + { + hMetaHolder = it->hMetaHolder; + return true; + } + } + + return false; +} + +//----------------------------------------------------------------------------- + v8::Local V8ContextImpl::GetCachedModule(uint64_t uniqueId, size_t codeDigest) { _ASSERTE(m_spIsolateImpl->IsCurrent() && m_spIsolateImpl->IsLocked()); @@ -3310,10 +4146,12 @@ void V8ContextImpl::CacheModule(const V8DocumentInfo& documentInfo, size_t codeD { _ASSERTE(m_spIsolateImpl->IsCurrent() && m_spIsolateImpl->IsLocked()); - auto maxModuleCacheSize = HostObjectUtil::GetInstance().GetMaxModuleCacheSize(); + auto maxModuleCacheSize = HostObjectUtil::GetMaxModuleCacheSize(); while (m_ModuleCache.size() >= maxModuleCacheSize) { - Dispose(m_ModuleCache.back().hModule); + const auto& entry = m_ModuleCache.back(); + Dispose(entry.hMetaHolder); + Dispose(entry.hModule); m_ModuleCache.pop_back(); } @@ -3323,7 +4161,7 @@ void V8ContextImpl::CacheModule(const V8DocumentInfo& documentInfo, size_t codeD return (entry.DocumentInfo.GetUniqueId() == documentInfo.GetUniqueId()) && (entry.CodeDigest == codeDigest); })); - ModuleCacheEntry entry { documentInfo, codeDigest, CreatePersistent(hModule), cacheBytes }; + ModuleCacheEntry entry { documentInfo, codeDigest, CreatePersistent(hModule), cacheBytes, CreatePersistent(CreateObject()) }; m_ModuleCache.push_front(std::move(entry)); m_Statistics.ModuleCacheSize = m_ModuleCache.size(); @@ -3354,7 +4192,9 @@ void V8ContextImpl::ClearModuleCache() while (!m_ModuleCache.empty()) { - Dispose(m_ModuleCache.front().hModule); + const auto& entry = m_ModuleCache.front(); + Dispose(entry.hMetaHolder); + Dispose(entry.hModule); m_ModuleCache.pop_front(); } @@ -3438,22 +4278,6 @@ v8::Local V8ContextImpl::ImportValue(const V8Value& value) } } - { - int32_t result; - if (value.AsInt32(result)) - { - return CreateInteger(result); - } - } - - { - uint32_t result; - if (value.AsUInt32(result)) - { - return CreateInteger(result); - } - } - { const StdString* pString; if (value.AsString(pString)) @@ -3464,9 +4288,11 @@ v8::Local V8ContextImpl::ImportValue(const V8Value& value) { HostObjectHolder* pHolder; - if (value.AsHostObject(pHolder)) + V8Value::Subtype subtype; + V8Value::Flags flags; + if (value.AsHostObject(pHolder, subtype, flags)) { - auto pvV8Object = HostObjectUtil::GetInstance().GetCachedV8Object(m_pvV8ObjectCache, pHolder->GetObject()); + auto pvV8Object = HostObjectUtil::GetCachedV8Object(m_pvV8ObjectCache, pHolder->GetObject()); if (pvV8Object != nullptr) { return CreateLocal(::HandleFromPtr(pvV8Object)); @@ -3474,30 +4300,48 @@ v8::Local V8ContextImpl::ImportValue(const V8Value& value) v8::Local hObject; - auto invocability = HostObjectUtil::GetInstance().GetInvocability(pHolder->GetObject()); - if (invocability == IHostObjectUtil::Invocability::None) - { - BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true) - hObject = FROM_MAYBE(m_hHostObjectTemplate->InstanceTemplate()->NewInstance(m_hContext)); - END_PULSE_VALUE_SCOPE - } - else if (invocability == IHostObjectUtil::Invocability::Delegate) + if (::HasFlag(flags, V8Value::Flags::Fast)) { - BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true) - hObject = FROM_MAYBE(m_hHostDelegateTemplate->InstanceTemplate()->NewInstance(m_hContext)); - END_PULSE_VALUE_SCOPE + if (subtype == V8Value::Subtype::Function) + { + BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true) + hObject = FROM_MAYBE(m_hFastHostFunctionTemplate->InstanceTemplate()->NewInstance(m_hContext)); + END_PULSE_VALUE_SCOPE + } + else + { + BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true) + hObject = FROM_MAYBE(m_hFastHostObjectTemplate->InstanceTemplate()->NewInstance(m_hContext)); + END_PULSE_VALUE_SCOPE + } } else { - BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true) - hObject = FROM_MAYBE(m_hHostInvocableTemplate->InstanceTemplate()->NewInstance(m_hContext)); - END_PULSE_VALUE_SCOPE + auto invocability = HostObjectUtil::GetInvocability(pHolder->GetObject()); + if (invocability == HostObjectUtil::Invocability::None) + { + BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true) + hObject = FROM_MAYBE(m_hHostObjectTemplate->InstanceTemplate()->NewInstance(m_hContext)); + END_PULSE_VALUE_SCOPE + } + else if (invocability == HostObjectUtil::Invocability::Delegate) + { + BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true) + hObject = FROM_MAYBE(m_hHostDelegateTemplate->InstanceTemplate()->NewInstance(m_hContext)); + END_PULSE_VALUE_SCOPE + } + else + { + BEGIN_PULSE_VALUE_SCOPE(&m_AllowHostObjectConstructorCall, true) + hObject = FROM_MAYBE(m_hHostInvocableTemplate->InstanceTemplate()->NewInstance(m_hContext)); + END_PULSE_VALUE_SCOPE + } } ASSERT_EVAL(SetHostObjectHolder(hObject, pHolder = pHolder->Clone())); ASSERT_EVAL(FROM_MAYBE(hObject->SetPrivate(m_hContext, m_hAccessTokenKey, m_hAccessToken))); pvV8Object = ::PtrFromHandle(MakeWeak(CreatePersistent(hObject), pHolder, m_pvV8ObjectCache, DisposeWeakHandle)); - HostObjectUtil::GetInstance().CacheV8Object(m_pvV8ObjectCache, pHolder->GetObject(), pvV8Object); + HostObjectUtil::CacheV8Object(m_pvV8ObjectCache, pHolder->GetObject(), pvV8Object); return hObject; } @@ -3514,7 +4358,7 @@ v8::Local V8ContextImpl::ImportValue(const V8Value& value) return CreateLocal(::HandleFromPtr(pHolder->GetObject())); } - if (HasFlag(flags, V8Value::Flags::Shared)) + if (::HasFlag(flags, V8Value::Flags::Shared)) { const auto& spSharedObjectInfo = pHolder->GetSharedObjectInfo(); if (!spSharedObjectInfo.IsEmpty()) @@ -3630,16 +4474,6 @@ V8Value V8ContextImpl::ExportValue(v8::Local hValue) } } - if (hValue->IsInt32()) - { - return V8Value(FROM_MAYBE(hValue->Int32Value(m_hContext))); - } - - if (hValue->IsUint32()) - { - return V8Value(FROM_MAYBE(hValue->Uint32Value(m_hContext))); - } - auto hString = ::ValueAsString(hValue); if (!hString.IsEmpty()) { @@ -3686,12 +4520,12 @@ V8Value V8ContextImpl::ExportValue(v8::Local hValue) if (hObject->IsAsyncFunction()) { - flags = CombineFlags(flags, V8Value::Flags::Async); + flags = ::CombineFlags(flags, V8Value::Flags::Async); } if (hObject->IsGeneratorFunction()) { - flags = CombineFlags(flags, V8Value::Flags::Generator); + flags = ::CombineFlags(flags, V8Value::Flags::Generator); } } else if (hObject->IsGeneratorObject()) @@ -3706,7 +4540,7 @@ V8Value V8ContextImpl::ExportValue(v8::Local hValue) if (FROM_MAYBE(hObject->Get(m_hContext, m_hConstructorKey))->StrictEquals(m_hAsyncGeneratorConstructor)) { - flags = CombineFlags(flags, V8Value::Flags::Async); + flags = ::CombineFlags(flags, V8Value::Flags::Async); } } else if (hObject->IsMapIterator() || hObject->IsSetIterator()) @@ -3716,6 +4550,21 @@ V8Value V8ContextImpl::ExportValue(v8::Local hValue) else if (hObject->IsPromise()) { subtype = V8Value::Subtype::Promise; + + auto hPromise = hObject.As(); + switch (hPromise->State()) + { + case v8::Promise::PromiseState::kFulfilled: + break; + + case v8::Promise::PromiseState::kRejected: + flags = ::CombineFlags(flags, V8Value::Flags::Rejected); + break; + + default: + flags = ::CombineFlags(flags, V8Value::Flags::Pending); + break; + } } else if (hObject->IsArray()) { @@ -3728,7 +4577,7 @@ V8Value V8ContextImpl::ExportValue(v8::Local hValue) else if (hObject->IsSharedArrayBuffer()) { subtype = V8Value::Subtype::ArrayBuffer; - flags = CombineFlags(flags, V8Value::Flags::Shared); + flags = ::CombineFlags(flags, V8Value::Flags::Shared); auto hSharedArrayBuffer = hObject.As(); auto size = hSharedArrayBuffer->ByteLength(); @@ -3743,13 +4592,13 @@ V8Value V8ContextImpl::ExportValue(v8::Local hValue) auto spBackingStore = hArrayBufferView->Buffer()->GetBackingStore(); if (spBackingStore->IsShared()) { - flags = CombineFlags(flags, V8Value::Flags::Shared); + flags = ::CombineFlags(flags, V8Value::Flags::Shared); } if (hObject->IsDataView()) { subtype = V8Value::Subtype::DataView; - if (HasFlag(flags, V8Value::Flags::Shared)) + if (::HasFlag(flags, V8Value::Flags::Shared)) { spSharedObjectInfo = new V8SharedObjectInfo(std::move(spBackingStore), offset, size, size); } @@ -3801,7 +4650,7 @@ V8Value V8ContextImpl::ExportValue(v8::Local hValue) subtype = V8Value::Subtype::Float64Array; } - if (HasFlag(flags, V8Value::Flags::Shared) && (subtype != V8Value::Subtype::None)) + if (::HasFlag(flags, V8Value::Flags::Shared) && (subtype != V8Value::Subtype::None)) { auto hTypedArray = hObject.As(); spSharedObjectInfo = new V8SharedObjectInfo(std::move(spBackingStore), offset, size, hTypedArray->Length()); diff --git a/ClearScriptV8/V8ContextImpl.h b/ClearScriptV8/V8ContextImpl.h index 644ee7106..fa4efb358 100644 --- a/ClearScriptV8/V8ContextImpl.h +++ b/ClearScriptV8/V8ContextImpl.h @@ -34,7 +34,8 @@ class V8ContextImpl final: public V8Context virtual size_t GetMaxIsolateStackUsage() override; virtual void SetMaxIsolateStackUsage(size_t value) override; - virtual void CallWithLock(CallWithLockCallback* pCallback, void* pvArg) override; + virtual void CallWithLock(CallWithLockCallback* pCallback, void* pvAction) override; + virtual void CallWithLockWithArg(CallWithLockWithArgCallback* pCallback, void* pvAction, void* pvArg) override; virtual V8Value GetRootObject() override; virtual void SetGlobalProperty(const StdString& name, const V8Value& value, bool globalMembers) override; @@ -122,6 +123,7 @@ class V8ContextImpl final: public V8Context size_t CodeDigest; Persistent hModule; std::vector CacheBytes; + Persistent hMetaHolder; }; struct SyntheticModuleExport final @@ -363,9 +365,9 @@ class V8ContextImpl final: public V8Context return m_spIsolateImpl->ThrowException(hException); } - void TerminateExecution() + void TerminateExecution(bool force) { - return m_spIsolateImpl->TerminateExecution(); + return m_spIsolateImpl->TerminateExecution(force); } bool IsExecutionTerminating() @@ -425,41 +427,61 @@ class V8ContextImpl final: public V8Context void GetV8ObjectPropertyNames(v8::Local hObject, std::vector& names, v8::PropertyFilter filter, v8::IndexFilter indexFilter); void GetV8ObjectPropertyIndices(v8::Local hObject, std::vector& indices, v8::PropertyFilter filter); - static void GetGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); - static void SetGlobalProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info); - static void QueryGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); - static void DeleteGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); + static v8::Intercepted GetGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); + static v8::Intercepted SetGlobalProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info); + static v8::Intercepted QueryGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); + static v8::Intercepted DeleteGlobalProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); static void GetGlobalPropertyNames(const v8::PropertyCallbackInfo& info); - static void GetGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info); - static void SetGlobalProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info); - static void QueryGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info); - static void DeleteGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info); + static v8::Intercepted GetGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info); + static v8::Intercepted SetGlobalProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info); + static v8::Intercepted QueryGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info); + static v8::Intercepted DeleteGlobalProperty(uint32_t index, const v8::PropertyCallbackInfo& info); static void GetGlobalPropertyIndices(const v8::PropertyCallbackInfo& info); static void HostObjectConstructorCallHandler(const v8::FunctionCallbackInfo& info); static void GetHostObjectIterator(const v8::FunctionCallbackInfo& info); static void GetHostObjectAsyncIterator(const v8::FunctionCallbackInfo& info); + static void GetFastHostObjectIterator(const v8::FunctionCallbackInfo& info); + static void GetFastHostObjectAsyncIterator(const v8::FunctionCallbackInfo& info); static void GetHostObjectJson(const v8::FunctionCallbackInfo& info); static void CreateFunctionForHostDelegate(const v8::FunctionCallbackInfo& info); static void InvokeHostDelegate(const v8::FunctionCallbackInfo& info); - static void GetHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); - static void SetHostObjectProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info); - static void QueryHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); - static void DeleteHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); + static v8::Intercepted GetHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); + static v8::Intercepted SetHostObjectProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info); + static v8::Intercepted QueryHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); + static v8::Intercepted DeleteHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); static void GetHostObjectPropertyNames(const v8::PropertyCallbackInfo& info); - static void GetHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info); - static void SetHostObjectProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info); - static void QueryHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info); - static void DeleteHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info); + static v8::Intercepted GetHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info); + static v8::Intercepted SetHostObjectProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info); + static v8::Intercepted QueryHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info); + static v8::Intercepted DeleteHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info); static void GetHostObjectPropertyIndices(const v8::PropertyCallbackInfo& info); + static v8::Intercepted GetFastHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); + static v8::Intercepted SetFastHostObjectProperty(v8::Local hKey, v8::Local hValue, const v8::PropertyCallbackInfo& info); + static v8::Intercepted QueryFastHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); + static v8::Intercepted DeleteFastHostObjectProperty(v8::Local hKey, const v8::PropertyCallbackInfo& info); + static void GetFastHostObjectPropertyNames(const v8::PropertyCallbackInfo& info); + + static v8::Intercepted GetFastHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info); + static v8::Intercepted SetFastHostObjectProperty(uint32_t index, v8::Local hValue, const v8::PropertyCallbackInfo& info); + static v8::Intercepted QueryFastHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info); + static v8::Intercepted DeleteFastHostObjectProperty(uint32_t index, const v8::PropertyCallbackInfo& info); + static void GetFastHostObjectPropertyIndices(const v8::PropertyCallbackInfo& info); + static void InvokeHostObject(const v8::FunctionCallbackInfo& info); + static void InvokeFastHostObject(const v8::FunctionCallbackInfo& info); + static void FlushCallback(const v8::FunctionCallbackInfo& info); static void PerformanceNowCallback(const v8::FunctionCallbackInfo& info); static void PerformanceSleepCallback(const v8::FunctionCallbackInfo& info); + static void SetModuleResultCallback(const v8::FunctionCallbackInfo& info); + + static void GetPromiseStateCallback(const v8::FunctionCallbackInfo& info); + static void GetPromiseResultCallback(const v8::FunctionCallbackInfo& info); v8::MaybeLocal ImportModule(const V8DocumentInfo* pSourceDocumentInfo, v8::Local hSpecifier); v8::MaybeLocal ResolveModule(v8::Local hSpecifier, const V8DocumentInfo* pSourceDocumentInfo); @@ -470,6 +492,8 @@ class V8ContextImpl final: public V8Context bool TryGetCachedModuleInfo(uint64_t uniqueId, V8DocumentInfo& documentInfo); bool TryGetCachedModuleInfo(v8::Local hModule, V8DocumentInfo& documentInfo); + bool TryGetCachedModuleMetaHolder(v8::Local hModule, v8::Local& hMetaHolder); + bool TryGetCachedModuleMetaHolder(uint64_t uniqueId, v8::Local& hMetaHolder); v8::Local GetCachedModule(uint64_t uniqueId, size_t codeDigest); v8::Local GetCachedModule(uint64_t uniqueId, size_t codeDigest, std::vector& cacheBytes); void CacheModule(const V8DocumentInfo& documentInfo, size_t codeDigest, v8::Local hModule); @@ -498,6 +522,8 @@ class V8ContextImpl final: public V8Context Persistent m_hContext; std::vector>> m_GlobalMembersStack; Persistent m_hIsHostObjectKey; + Persistent m_hModuleResultKey; + Persistent m_hMissingPropertyValue; Persistent m_hHostExceptionKey; Persistent m_hCacheKey; Persistent m_hAccessTokenKey; @@ -509,13 +535,17 @@ class V8ContextImpl final: public V8Context Persistent m_hPropertyValueNotInvocable; Persistent m_hInvalidModuleRequest; Persistent m_hConstructorKey; + Persistent m_hSetModuleResultKey; Persistent m_hHostObjectTemplate; Persistent m_hHostInvocableTemplate; Persistent m_hHostDelegateTemplate; + Persistent m_hFastHostObjectTemplate; + Persistent m_hFastHostFunctionTemplate; Persistent m_hToIteratorFunction; Persistent m_hToAsyncIteratorFunction; Persistent m_hToJsonFunction; Persistent m_hFlushFunction; + Persistent m_hGetModuleResultFunction; Persistent m_hAsyncGeneratorConstructor; Persistent m_hTerminationException; SharedPtr m_spWeakBinding; diff --git a/ClearScriptV8/V8DocumentInfo.h b/ClearScriptV8/V8DocumentInfo.h index d1d118a3b..6a8404fd9 100644 --- a/ClearScriptV8/V8DocumentInfo.h +++ b/ClearScriptV8/V8DocumentInfo.h @@ -45,7 +45,7 @@ struct V8DocumentInfo final m_SourceMapUrl(that.m_SourceMapUrl), m_UniqueId(that.m_UniqueId), m_Kind(that.m_Kind), - m_pvDocumentInfo((that.m_pvDocumentInfo != nullptr) ? HostObjectUtil::GetInstance().AddRef(that.m_pvDocumentInfo) : nullptr) + m_pvDocumentInfo((that.m_pvDocumentInfo != nullptr) ? HostObjectUtil::AddRef(that.m_pvDocumentInfo) : nullptr) { } @@ -66,7 +66,7 @@ struct V8DocumentInfo final m_SourceMapUrl = that.m_SourceMapUrl; m_UniqueId = that.m_UniqueId; m_Kind = that.m_Kind; - m_pvDocumentInfo = (that.m_pvDocumentInfo != nullptr) ? HostObjectUtil::GetInstance().AddRef(that.m_pvDocumentInfo) : nullptr; + m_pvDocumentInfo = (that.m_pvDocumentInfo != nullptr) ? HostObjectUtil::AddRef(that.m_pvDocumentInfo) : nullptr; return *this; } @@ -86,7 +86,7 @@ struct V8DocumentInfo final { if (m_pvDocumentInfo != nullptr) { - HostObjectUtil::GetInstance().Release(m_pvDocumentInfo); + HostObjectUtil::Release(m_pvDocumentInfo); } } diff --git a/ClearScriptV8/V8IsolateImpl.cpp b/ClearScriptV8/V8IsolateImpl.cpp index 8f8cb2c6b..6c8408184 100644 --- a/ClearScriptV8/V8IsolateImpl.cpp +++ b/ClearScriptV8/V8IsolateImpl.cpp @@ -67,19 +67,19 @@ void V8Platform::EnsureInitialized() #ifdef CLEARSCRIPT_TOP_LEVEL_AWAIT_CONTROL - if (!HasFlag(globalFlags, V8GlobalFlags::EnableTopLevelAwait)) + if (!::HasFlag(globalFlags, V8GlobalFlags::EnableTopLevelAwait)) { flagStrings.push_back("--no_harmony_top_level_await"); } #endif // CLEARSCRIPT_TOP_LEVEL_AWAIT_CONTROL - if (HasFlag(m_GlobalFlags, V8GlobalFlags::DisableJITCompilation)) + if (::HasFlag(m_GlobalFlags, V8GlobalFlags::DisableJITCompilation)) { flagStrings.push_back("--jitless"); } - if (HasFlag(m_GlobalFlags, V8GlobalFlags::DisableBackgroundWork)) + if (::HasFlag(m_GlobalFlags, V8GlobalFlags::DisableBackgroundWork)) { flagStrings.push_back("--single_threaded"); } @@ -199,15 +199,18 @@ class V8ForegroundTaskRunner final: public v8::TaskRunner V8ForegroundTaskRunner(V8IsolateImpl& isolateImpl); - virtual void PostTask(std::unique_ptr upTask) override; - virtual void PostNonNestableTask(std::unique_ptr upTask) override; - virtual void PostDelayedTask(std::unique_ptr upTask, double delayInSeconds) override; - virtual void PostNonNestableDelayedTask(std::unique_ptr upTask, double delayInSeconds) override; - virtual void PostIdleTask(std::unique_ptr upTask) override; virtual bool IdleTasksEnabled() override; virtual bool NonNestableTasksEnabled() const override; virtual bool NonNestableDelayedTasksEnabled() const override; +protected: + + virtual void PostTaskImpl(std::unique_ptr upTask, const v8::SourceLocation& location) override; + virtual void PostNonNestableTaskImpl(std::unique_ptr upTask, const v8::SourceLocation& location) override; + virtual void PostDelayedTaskImpl(std::unique_ptr upTask, double delayInSeconds, const v8::SourceLocation& location) override; + virtual void PostNonNestableDelayedTaskImpl(std::unique_ptr upTask, double delayInSeconds, const v8::SourceLocation& location) override; + virtual void PostIdleTaskImpl(std::unique_ptr upTask, const v8::SourceLocation& location) override; + private: V8IsolateImpl& m_IsolateImpl; @@ -224,7 +227,28 @@ V8ForegroundTaskRunner::V8ForegroundTaskRunner(V8IsolateImpl& isolateImpl): //----------------------------------------------------------------------------- -void V8ForegroundTaskRunner::PostTask(std::unique_ptr upTask) +bool V8ForegroundTaskRunner::IdleTasksEnabled() +{ + return false; +} + +//----------------------------------------------------------------------------- + +bool V8ForegroundTaskRunner::NonNestableTasksEnabled() const +{ + return true; +} + +//----------------------------------------------------------------------------- + +bool V8ForegroundTaskRunner::NonNestableDelayedTasksEnabled() const +{ + return true; +} + +//----------------------------------------------------------------------------- + +void V8ForegroundTaskRunner::PostTaskImpl(std::unique_ptr upTask, const v8::SourceLocation& /*location*/) { auto spIsolate = m_wrIsolate.GetTarget(); if (spIsolate.IsEmpty()) @@ -233,72 +257,51 @@ void V8ForegroundTaskRunner::PostTask(std::unique_ptr upTask) } else { - m_IsolateImpl.RunTaskWithLockAsync(true /*allowNesting*/, std::move(upTask)); + m_IsolateImpl.RunTaskWithLockAsync(true, std::move(upTask)); } } //----------------------------------------------------------------------------- -void V8ForegroundTaskRunner::PostNonNestableTask(std::unique_ptr upTask) +void V8ForegroundTaskRunner::PostNonNestableTaskImpl(std::unique_ptr upTask, const v8::SourceLocation& /*location*/) { auto spIsolate = m_wrIsolate.GetTarget(); if (!spIsolate.IsEmpty()) { - m_IsolateImpl.RunTaskWithLockAsync(false /*allowNesting*/, std::move(upTask)); + m_IsolateImpl.RunTaskWithLockAsync(false, std::move(upTask)); } } //----------------------------------------------------------------------------- -void V8ForegroundTaskRunner::PostDelayedTask(std::unique_ptr upTask, double delayInSeconds) +void V8ForegroundTaskRunner::PostDelayedTaskImpl(std::unique_ptr upTask, double delayInSeconds, const v8::SourceLocation& /*location*/) { auto spIsolate = m_wrIsolate.GetTarget(); if (!spIsolate.IsEmpty()) { - m_IsolateImpl.RunTaskWithLockDelayed(true /*allowNesting*/, std::move(upTask), delayInSeconds); + m_IsolateImpl.RunTaskWithLockDelayed(true, std::move(upTask), delayInSeconds); } } //----------------------------------------------------------------------------- -void V8ForegroundTaskRunner::PostNonNestableDelayedTask(std::unique_ptr upTask, double delayInSeconds) +void V8ForegroundTaskRunner::PostNonNestableDelayedTaskImpl(std::unique_ptr upTask, double delayInSeconds, const v8::SourceLocation& /*location*/) { auto spIsolate = m_wrIsolate.GetTarget(); if (!spIsolate.IsEmpty()) { - m_IsolateImpl.RunTaskWithLockDelayed(false /*allowNesting*/, std::move(upTask), delayInSeconds); + m_IsolateImpl.RunTaskWithLockDelayed(false, std::move(upTask), delayInSeconds); } } //----------------------------------------------------------------------------- -void V8ForegroundTaskRunner::PostIdleTask(std::unique_ptr /*upTask*/) +void V8ForegroundTaskRunner::PostIdleTaskImpl(std::unique_ptr /*upTask*/, const v8::SourceLocation& /*location*/) { // unexpected call to unsupported method std::terminate(); } -//----------------------------------------------------------------------------- - -bool V8ForegroundTaskRunner::IdleTasksEnabled() -{ - return false; -} - -//----------------------------------------------------------------------------- - -bool V8ForegroundTaskRunner::NonNestableTasksEnabled() const -{ - return true; -} - -//----------------------------------------------------------------------------- - -bool V8ForegroundTaskRunner::NonNestableDelayedTasksEnabled() const -{ - return true; -} - //----------------------------------------------------------------------------- // V8ArrayBufferAllocator //----------------------------------------------------------------------------- @@ -512,13 +515,13 @@ V8IsolateImpl::V8IsolateImpl(const StdString& name, const v8::ResourceConstraint m_hHostObjectHolderKey = CreatePersistent(CreatePrivate()); - if (HasFlag(options.Flags, Flags::EnableDebugging)) + if (::HasFlag(options.Flags, Flags::EnableDebugging)) { - EnableDebugging(options.DebugPort, HasFlag(options.Flags, Flags::EnableRemoteDebugging)); + EnableDebugging(options.DebugPort, ::HasFlag(options.Flags, Flags::EnableRemoteDebugging)); } m_upIsolate->SetHostInitializeImportMetaObjectCallback(ImportMetaInitializeCallback); - if (HasFlag(options.Flags, Flags::EnableDynamicModuleImports)) + if (::HasFlag(options.Flags, Flags::EnableDynamicModuleImports)) { m_upIsolate->SetHostImportModuleDynamicallyCallback(ModuleImportCallback); } @@ -551,17 +554,17 @@ void V8IsolateImpl::AddContext(V8ContextImpl* pContextImpl, const V8Context::Opt { _ASSERTE(IsCurrent() && IsLocked()); - if (!HasFlag(options.Flags, V8Context::Flags::EnableDebugging)) + if (!::HasFlag(options.Flags, V8Context::Flags::EnableDebugging)) { m_ContextEntries.emplace_back(pContextImpl); } else { m_ContextEntries.emplace_front(pContextImpl); - EnableDebugging(options.DebugPort, HasFlag(options.Flags, V8Context::Flags::EnableRemoteDebugging)); + EnableDebugging(options.DebugPort, ::HasFlag(options.Flags, V8Context::Flags::EnableRemoteDebugging)); } - if (HasFlag(options.Flags, V8Context::Flags::EnableDynamicModuleImports)) + if (::HasFlag(options.Flags, V8Context::Flags::EnableDynamicModuleImports)) { m_upIsolate->SetHostImportModuleDynamicallyCallback(ModuleImportCallback); } @@ -623,20 +626,20 @@ void V8IsolateImpl::EnableDebugging(int port, bool remote) } auto wrIsolate = CreateWeakRef(); - m_pvDebugAgent = HostObjectUtil::GetInstance().CreateDebugAgent(m_Name, version, port, remote, [this, wrIsolate] (IHostObjectUtil::DebugDirective directive, const StdString* pCommand) + m_pvDebugAgent = HostObjectUtil::CreateDebugAgent(m_Name, version, port, remote, [this, wrIsolate] (HostObjectUtil::DebugDirective directive, const StdString* pCommand) { auto spIsolate = wrIsolate.GetTarget(); if (!spIsolate.IsEmpty()) { - if (directive == IHostObjectUtil::DebugDirective::ConnectClient) + if (directive == HostObjectUtil::DebugDirective::ConnectClient) { ConnectDebugClient(); } - else if ((directive == IHostObjectUtil::DebugDirective::SendCommand) && pCommand) + else if ((directive == HostObjectUtil::DebugDirective::SendCommand) && pCommand) { SendDebugCommand(*pCommand); } - else if (directive == IHostObjectUtil::DebugDirective::DisconnectClient) + else if (directive == HostObjectUtil::DebugDirective::DisconnectClient) { DisconnectDebugClient(); } @@ -661,7 +664,7 @@ void V8IsolateImpl::DisableDebugging() m_upInspectorSession.reset(); m_upInspector.reset(); - HostObjectUtil::GetInstance().DestroyDebugAgent(m_pvDebugAgent); + HostObjectUtil::DestroyDebugAgent(m_pvDebugAgent); m_DebuggingEnabled = false; } } @@ -1041,7 +1044,7 @@ void V8IsolateImpl::sendResponse(int /*callId*/, std::unique_ptrstring())); + HostObjectUtil::SendDebugMessage(m_pvDebugAgent, StdString(upMessage->string())); } } @@ -1073,7 +1076,7 @@ void* V8IsolateImpl::AddRefV8Object(void* pvObject) void V8IsolateImpl::ReleaseV8Object(void* pvObject) { - CallWithLockNoWait(true /*allowNesting*/, [pvObject] (V8IsolateImpl* pIsolateImpl) + CallWithLockNoWait(true, [pvObject] (V8IsolateImpl* pIsolateImpl) { pIsolateImpl->Dispose(::HandleFromPtr(pvObject)); }); @@ -1094,7 +1097,7 @@ void* V8IsolateImpl::AddRefV8Script(void* pvScript) void V8IsolateImpl::ReleaseV8Script(void* pvScript) { - CallWithLockNoWait(true /*allowNesting*/, [pvScript] (V8IsolateImpl* pIsolateImpl) + CallWithLockNoWait(true, [pvScript] (V8IsolateImpl* pIsolateImpl) { pIsolateImpl->Dispose(::HandleFromPtr(pvScript)); }); @@ -1121,7 +1124,7 @@ void V8IsolateImpl::RunTaskAsync(std::unique_ptr upTask) END_MUTEX_SCOPE auto wrIsolate = CreateWeakRef(); - HostObjectUtil::GetInstance().QueueNativeCallback([this, wrIsolate, wpTask] () + HostObjectUtil::QueueNativeCallback([this, wrIsolate, wpTask] () { auto spIsolate = wrIsolate.GetTarget(); if (!spIsolate.IsEmpty()) @@ -1542,7 +1545,7 @@ void V8IsolateImpl::CacheScript(const V8DocumentInfo& documentInfo, size_t codeD { _ASSERTE(IsCurrent() && IsLocked()); - auto maxScriptCacheSize = HostObjectUtil::GetInstance().GetMaxScriptCacheSize(); + auto maxScriptCacheSize = HostObjectUtil::GetMaxScriptCacheSize(); while (m_ScriptCache.size() >= maxScriptCacheSize) { Dispose(m_ScriptCache.back().hScript); @@ -1716,7 +1719,7 @@ void V8IsolateImpl::CallWithLockAsync(bool allowNesting, CallWithLockCallback&& // trigger asynchronous queue processing auto wrIsolate = CreateWeakRef(); - HostObjectUtil::GetInstance().QueueNativeCallback([this, wrIsolate] () + HostObjectUtil::QueueNativeCallback([this, wrIsolate] () { auto spIsolate = wrIsolate.GetTarget(); if (!spIsolate.IsEmpty()) @@ -1833,7 +1836,7 @@ V8IsolateImpl::CallWithLockQueue V8IsolateImpl::PopCallWithLockQueue(const std:: void V8IsolateImpl::ConnectDebugClient() { - CallWithLockNoWait(true /*allowNesting*/, [] (V8IsolateImpl* pIsolateImpl) + CallWithLockNoWait(true, [] (V8IsolateImpl* pIsolateImpl) { if (pIsolateImpl->m_upInspector && !pIsolateImpl->m_upInspectorSession) { @@ -1846,7 +1849,7 @@ void V8IsolateImpl::ConnectDebugClient() void V8IsolateImpl::SendDebugCommand(const StdString& command) { - CallWithLockNoWait(true /*allowNesting*/, [command] (V8IsolateImpl* pIsolateImpl) + CallWithLockNoWait(true, [command] (V8IsolateImpl* pIsolateImpl) { if (pIsolateImpl->m_upInspectorSession) { @@ -1859,7 +1862,7 @@ void V8IsolateImpl::SendDebugCommand(const StdString& command) void V8IsolateImpl::DisconnectDebugClient() { - CallWithLockNoWait(true /*allowNesting*/, [] (V8IsolateImpl* pIsolateImpl) + CallWithLockNoWait(true, [] (V8IsolateImpl* pIsolateImpl) { pIsolateImpl->m_upInspectorSession.reset(); }); @@ -1882,7 +1885,7 @@ V8IsolateImpl::ExecutionScope* V8IsolateImpl::EnterExecutionScope(ExecutionScope if (maxHeapSize > 0) { // yes; perform initial check and set up heap watch timer - CheckHeapSize(maxHeapSize, false /*timerTriggered*/); + CheckHeapSize(maxHeapSize, false); // enter outermost heap size monitoring scope m_HeapWatchLevel = 1; @@ -1934,7 +1937,7 @@ V8IsolateImpl::ExecutionScope* V8IsolateImpl::EnterExecutionScope(ExecutionScope if ((m_pStackLimit != nullptr) && (pStackMarker < m_pStackLimit)) { // stack usage limit exceeded (host-side detection) - throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime has exceeded its stack usage limit")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_Name, StdString(SL("The V8 runtime has exceeded its stack usage limit")), false); } // enter nested stack usage monitoring scope @@ -2059,14 +2062,14 @@ void V8IsolateImpl::SetUpHeapWatchTimer(bool forceMinInterval) { // yes; request callback on execution thread auto wrTimer = pTimer->CreateWeakRef(); - CallWithLockAsync(true /*allowNesting*/, [wrTimer] (V8IsolateImpl* pIsolateImpl) + CallWithLockAsync(true, [wrTimer] (V8IsolateImpl* pIsolateImpl) { // execution thread callback; is the timer still alive? auto spTimer = wrTimer.GetTarget(); if (!spTimer.IsEmpty()) { // yes; check heap size - pIsolateImpl->CheckHeapSize(std::nullopt, true /*timerTriggered*/); + pIsolateImpl->CheckHeapSize(std::nullopt, true); } }); } @@ -2105,8 +2108,10 @@ void V8IsolateImpl::CheckHeapSize(const std::optional& optMaxHeapSize, b // yes; the isolate is out of memory; act based on policy if (m_DisableHeapSizeViolationInterrupt) { + // exception policy; are we executing script code? if (InExecutionScope()) { + // yes; schedule script exception now m_MaxHeapSize = 0; m_upIsolate->ThrowError("The V8 runtime has exceeded its memory limit"); return; @@ -2117,8 +2122,9 @@ void V8IsolateImpl::CheckHeapSize(const std::optional& optMaxHeapSize, b } else { + // termination policy; mark state and request termination m_IsOutOfMemory = true; - TerminateExecution(); + TerminateExecution(!timerTriggered); return; } } @@ -2154,7 +2160,7 @@ void V8IsolateImpl::PromiseHook(v8::PromiseHookType type, v8::Local { if ((type == v8::PromiseHookType::kResolve) && !hPromise.IsEmpty()) { - auto hContext = hPromise->GetCreationContext().FromMaybe(v8::Local()); + auto hContext = hPromise->GetCreationContext(v8::Isolate::GetCurrent()).FromMaybe(v8::Local()); if (!hContext.IsEmpty()) { GetInstanceFromIsolate(hContext->GetIsolate())->FlushContextAsync(hContext); @@ -2186,7 +2192,7 @@ void V8IsolateImpl::FlushContextAsync(ContextEntry& contextEntry) if (contextEntry.FlushPending.compare_exchange_strong(expected, true)) { auto wrContext = contextEntry.pContextImpl->CreateWeakRef(); - CallWithLockAsync(true /*allowNesting*/, [wrContext] (V8IsolateImpl* pIsolateImpl) + CallWithLockAsync(true, [wrContext] (V8IsolateImpl* pIsolateImpl) { auto spContext = wrContext.GetTarget(); if (!spContext.IsEmpty()) diff --git a/ClearScriptV8/V8IsolateImpl.h b/ClearScriptV8/V8IsolateImpl.h index 388058068..b693717b1 100644 --- a/ClearScriptV8/V8IsolateImpl.h +++ b/ClearScriptV8/V8IsolateImpl.h @@ -384,7 +384,7 @@ class V8IsolateImpl final: public V8Isolate, public v8_inspector::V8InspectorCli return m_DebuggingEnabled; } - void TerminateExecution() + void TerminateExecution(bool force) { BEGIN_MUTEX_SCOPE(m_DataMutex) @@ -399,7 +399,7 @@ class V8IsolateImpl final: public V8Isolate, public v8_inspector::V8InspectorCli BEGIN_MUTEX_SCOPE(m_TerminateExecutionMutex) - if (m_pExecutionScope != nullptr) + if (force || (m_pExecutionScope != nullptr)) { TerminateExecutionInternal(); } diff --git a/ClearScriptV8/V8ObjectHelpers.cpp b/ClearScriptV8/V8ObjectHelpers.cpp index eb5ce4e2d..bf1612571 100644 --- a/ClearScriptV8/V8ObjectHelpers.cpp +++ b/ClearScriptV8/V8ObjectHelpers.cpp @@ -86,12 +86,12 @@ V8Value V8ObjectHelpers::InvokeMethod(const SharedPtr& spHolder, void V8ObjectHelpers::GetArrayBufferOrViewInfo(const SharedPtr& spHolder, V8Value& arrayBuffer, size_t& offset, size_t& size, size_t& length) { - return spHolder.DerefAs().GetArrayBufferOrViewInfo(arrayBuffer, offset, size, length); + spHolder.DerefAs().GetArrayBufferOrViewInfo(arrayBuffer, offset, size, length); } //----------------------------------------------------------------------------- void V8ObjectHelpers::InvokeWithArrayBufferOrViewData(const SharedPtr& spHolder, ArrayBufferOrViewDataCallback* pCallback, void* pvArg) { - return spHolder.DerefAs().InvokeWithArrayBufferOrViewData(pCallback, pvArg); + spHolder.DerefAs().InvokeWithArrayBufferOrViewData(pCallback, pvArg); } diff --git a/ClearScriptV8/V8ObjectHolder.h b/ClearScriptV8/V8ObjectHolder.h index 92d8bbe63..bb972189e 100644 --- a/ClearScriptV8/V8ObjectHolder.h +++ b/ClearScriptV8/V8ObjectHolder.h @@ -13,7 +13,7 @@ class V8IsolateImpl; // V8SharedObjectInfo //----------------------------------------------------------------------------- -class V8SharedObjectInfo final : public SharedPtrTarget +class V8SharedObjectInfo final: public SharedPtrTarget { public: diff --git a/ClearScriptV8/V8Platform.h b/ClearScriptV8/V8Platform.h index ed6367254..b58ab637f 100644 --- a/ClearScriptV8/V8Platform.h +++ b/ClearScriptV8/V8Platform.h @@ -14,7 +14,7 @@ #define V8_IMMINENT_DEPRECATION_WARNINGS #ifdef _DEBUG - #define V8_ENABLE_CHECKS + #define V8_ENABLE_CHECKS 1 #endif // _DEBUG // #define CLEARSCRIPT_V8_POINTER_COMPRESSION_ENABLED @@ -417,44 +417,6 @@ const v8::Persistent V8SafePersistent::ms_EmptyImpl; template using Persistent = V8FastPersistent; -//----------------------------------------------------------------------------- -// V8 host scope -//----------------------------------------------------------------------------- - -class V8RwxHostScope final -{ - PROHIBIT_COPY(V8RwxHostScope) - PROHIBIT_HEAP(V8RwxHostScope) - -public: - - V8RwxHostScope(): - m_CodeSpaceWriteNestingLevel(v8::V8::EnterRwxHostScope()) - { - } - - ~V8RwxHostScope() - { - v8::V8::ExitRwxHostScope(m_CodeSpaceWriteNestingLevel); - } - -private: - - int m_CodeSpaceWriteNestingLevel; -}; - -//----------------------------------------------------------------------------- - -#define BEGIN_V8_RWX_HOST_SCOPE \ - { \ - DISABLE_WARNING(4456) /* declaration hides previous local declaration */ \ - V8RwxHostScope t_HostScope; \ - DEFAULT_WARNING(4456) - -#define END_V8_RWX_HOST_SCOPE \ - IGNORE_UNUSED(t_HostScope); \ - } - //----------------------------------------------------------------------------- // helper functions //----------------------------------------------------------------------------- diff --git a/ClearScriptV8/V8SplitProxyManaged.h b/ClearScriptV8/V8SplitProxyManaged.h index 5ba7faefb..1744f2e7d 100644 --- a/ClearScriptV8/V8SplitProxyManaged.h +++ b/ClearScriptV8/V8SplitProxyManaged.h @@ -19,7 +19,9 @@ V8_SPLIT_PROXY_MANAGED_METHOD(void, ScheduleScriptInterruptedException, const StdString& engineName, const StdString& message, const StdString& stackTrace, StdBool isFatal, StdBool executionStarted, const V8Value& scriptException, const V8Value& innerException) \ \ V8_SPLIT_PROXY_MANAGED_METHOD(void, InvokeHostAction, void* pvAction) \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, InvokeHostActionWithArg, void* pvAction, void* pvArg) \ V8_SPLIT_PROXY_MANAGED_METHOD(void, ProcessArrayBufferOrViewData, void* pvData, void* pvAction) \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, ProcessArrayBufferOrViewDataWithArg, void* pvData, void* pvAction, void* pvArg) \ V8_SPLIT_PROXY_MANAGED_METHOD(void, ProcessCpuProfile, const v8::CpuProfile& profile, void* pvAction) \ \ V8_SPLIT_PROXY_MANAGED_METHOD(void*, CreateV8ObjectCache) \ @@ -37,10 +39,9 @@ \ V8_SPLIT_PROXY_MANAGED_METHOD(void*, AddRefHostObject, void* pvObject) \ V8_SPLIT_PROXY_MANAGED_METHOD(void, ReleaseHostObject, void* pvObject) \ - V8_SPLIT_PROXY_MANAGED_METHOD(IHostObjectUtil::Invocability, GetHostObjectInvocability, void* pvObject) \ + V8_SPLIT_PROXY_MANAGED_METHOD(HostObjectUtil::Invocability, GetHostObjectInvocability, void* pvObject) \ \ - V8_SPLIT_PROXY_MANAGED_METHOD(void, GetHostObjectNamedProperty, void* pvObject, const StdString& name, V8Value& value) \ - V8_SPLIT_PROXY_MANAGED_METHOD(void, GetHostObjectNamedPropertyWithCacheability, void* pvObject, const StdString& name, V8Value& value, StdBool& isCacheable) \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, GetHostObjectNamedProperty, void* pvObject, const StdString& name, V8Value& value, StdBool& isCacheable) \ V8_SPLIT_PROXY_MANAGED_METHOD(void, SetHostObjectNamedProperty, void* pvObject, const StdString& name, const V8Value::Decoded& value) \ V8_SPLIT_PROXY_MANAGED_METHOD(StdBool, DeleteHostObjectNamedProperty, void* pvObject, const StdString& name) \ V8_SPLIT_PROXY_MANAGED_METHOD(void, GetHostObjectPropertyNames, void* pvObject, std::vector& names) \ @@ -56,6 +57,23 @@ V8_SPLIT_PROXY_MANAGED_METHOD(void, GetHostObjectEnumerator, void* pvObject, V8Value& result) \ V8_SPLIT_PROXY_MANAGED_METHOD(void, GetHostObjectAsyncEnumerator, void* pvObject, V8Value& result) \ \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, GetFastHostObjectNamedProperty, void* pvObject, const StdString& name, V8Value::FastResult& value, StdBool& isCacheable) \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, SetFastHostObjectNamedProperty, void* pvObject, const StdString& name, const V8Value::FastArg& value) \ + V8_SPLIT_PROXY_MANAGED_METHOD(FastHostObjectUtil::PropertyFlags, QueryFastHostObjectNamedProperty, void* pvObject, const StdString& name) \ + V8_SPLIT_PROXY_MANAGED_METHOD(StdBool, DeleteFastHostObjectNamedProperty, void* pvObject, const StdString& name) \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, GetFastHostObjectPropertyNames, void* pvObject, std::vector& names) \ + \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, GetFastHostObjectIndexedProperty, void* pvObject, int32_t index, V8Value::FastResult& value) \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, SetFastHostObjectIndexedProperty, void* pvObject, int32_t index, const V8Value::FastArg& value) \ + V8_SPLIT_PROXY_MANAGED_METHOD(FastHostObjectUtil::PropertyFlags, QueryFastHostObjectIndexedProperty, void* pvObject, int32_t index) \ + V8_SPLIT_PROXY_MANAGED_METHOD(StdBool, DeleteFastHostObjectIndexedProperty, void* pvObject, int32_t index) \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, GetFastHostObjectPropertyIndices, void* pvObject, std::vector& indices) \ + \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, InvokeFastHostObject, void* pvObject, StdBool asConstructor, int32_t argCount, const V8Value::FastArg* pArgs, V8Value::FastResult& result) \ + \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, GetFastHostObjectEnumerator, void* pvObject, V8Value::FastResult& result) \ + V8_SPLIT_PROXY_MANAGED_METHOD(void, GetFastHostObjectAsyncEnumerator, void* pvObject, V8Value::FastResult& result) \ + \ V8_SPLIT_PROXY_MANAGED_METHOD(void, QueueNativeCallback, NativeCallbackHandle* pCallbackHandle) \ \ V8_SPLIT_PROXY_MANAGED_METHOD(void*, CreateNativeCallbackTimer, int32_t dueTime, int32_t period, NativeCallbackHandle* pCallbackHandle) \ @@ -143,7 +161,7 @@ class V8SplitProxyManaged final: StaticBase //----------------------------------------------------------------------------- #define V8_SPLIT_PROXY_MANAGED_CALL(TABLE, NAME, ...) \ - reinterpret_cast((TABLE)[static_cast>(V8SplitProxyManaged::MethodSlot::NAME)])(__VA_ARGS__) + reinterpret_cast((TABLE)[::ToUnderlyingType(V8SplitProxyManaged::MethodSlot::NAME)])(__VA_ARGS__) #define V8_SPLIT_PROXY_MANAGED_INVOKE(TYPE, NAME, ...) \ V8SplitProxyManaged::Invoke([&] (void** pMethodTable) noexcept { return V8_SPLIT_PROXY_MANAGED_CALL(pMethodTable, NAME, __VA_ARGS__); }) diff --git a/ClearScriptV8/V8SplitProxyNative.cpp b/ClearScriptV8/V8SplitProxyNative.cpp index c6ab68235..5d48014d6 100644 --- a/ClearScriptV8/V8SplitProxyNative.cpp +++ b/ClearScriptV8/V8SplitProxyNative.cpp @@ -39,6 +39,20 @@ static void InvokeHostAction(void* pvAction) noexcept //------------------------------------------------------------------------- +static void InvokeHostActionWithArg(void* pvAction, void* pvArg) noexcept +{ + try + { + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostActionWithArg, pvAction, pvArg); + } + catch (const HostException& exception) + { + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(ScheduleForwardingException, exception.GetException()); + } +} + +//------------------------------------------------------------------------- + static void ProcessArrayBufferOrViewData(void* pvData, void* pvAction) { try @@ -51,6 +65,22 @@ static void ProcessArrayBufferOrViewData(void* pvData, void* pvAction) } } +//------------------------------------------------------------------------- + +static void ProcessArrayBufferOrViewDataWithArg(void* pvData, void* pvArgs) +{ + const auto& args = *reinterpret_cast*>(pvArgs); + + try + { + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(ProcessArrayBufferOrViewDataWithArg, pvData, args.first, args.second); + } + catch (const HostException& exception) + { + V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(ScheduleForwardingException, exception.GetException()); + } +} + //----------------------------------------------------------------------------- static void ProcessCpuProfile(const v8::CpuProfile& profile, void* pvAction) @@ -88,7 +118,7 @@ void V8Exception::ScheduleScriptEngineException() const noexcept } //----------------------------------------------------------------------------- -// V8EntityHandleBase (implementation) +// V8EntityHandleBase implementation //----------------------------------------------------------------------------- StdString V8EntityHandleBase::GetEntityReleasedMessage(const StdChar* pName) noexcept @@ -107,7 +137,7 @@ void V8EntityHandleBase::ScheduleInvalidOperationException(const StdString& mess } //----------------------------------------------------------------------------- -// V8Value (implementation) +// V8Value implementation //----------------------------------------------------------------------------- void V8Value::Decode(Decoded& decoded) const @@ -121,17 +151,9 @@ void V8Value::Decode(Decoded& decoded) const { decoded.DoubleValue = m_Data.DoubleValue; } - else if (m_Type == Type::Int32) - { - decoded.Int32Value = m_Data.Int32Value; - } - else if (m_Type == Type::UInt32) - { - decoded.UInt32Value = m_Data.UInt32Value; - } else if (m_Type == Type::String) { - decoded.pvData = m_Data.pString->ToCString(); + decoded.pStringData = m_Data.pString->ToCString(); decoded.Length = static_cast(m_Data.pString->GetLength()); } else if (m_Type == Type::DateTime) @@ -140,25 +162,76 @@ void V8Value::Decode(Decoded& decoded) const } else if (m_Type == Type::BigInt) { - decoded.pvData = m_Data.pBigInt->GetWords().data(); + decoded.pBigIntData = m_Data.pBigInt->GetWords().data(); decoded.Length = static_cast(m_Data.pBigInt->GetWords().size()); decoded.SignBit = static_cast(m_Data.pBigInt->GetSignBit()); } else if (m_Type == Type::V8Object) { - decoded.pvData = new V8ObjectHandle(m_Data.pV8ObjectHolder->Clone()); + decoded.pV8ObjectHandle = new V8ObjectHandle(m_Data.pV8ObjectHolder->Clone()); decoded.Subtype = m_Subtype; decoded.Flags = m_Flags; decoded.IdentityHash = m_Data.pV8ObjectHolder->GetIdentityHash(); } else if (m_Type == Type::HostObject) { - decoded.pvData = m_Data.pHostObjectHolder->GetObject(); + decoded.pvHostObject = m_Data.pHostObjectHolder->GetObject(); + decoded.Subtype = m_Subtype; + decoded.Flags = m_Flags; } } //----------------------------------------------------------------------------- -// V8 split proxy native entry points (implementation) + +void V8Value::InitializeFromFastResult(const FastResult& result) +{ + m_Type = result.Type; + if (m_Type == Type::Boolean) + { + m_Data.BooleanValue = result.Int32Value; + } + else if (m_Type == Type::Number) + { + m_Data.DoubleValue = result.DoubleValue; + } + else if (m_Type == Type::String) + { + m_Data.pString = new StdString(result.pStringData, result.Length); + } + else if (m_Type == Type::DateTime) + { + m_Data.DoubleValue = result.DoubleValue; + } + else if (m_Type == Type::BigInt) + { + std::vector words(result.pBigIntData, result.pBigIntData + result.Length); + m_Data.pBigInt = new V8BigInt(result.SignBit, std::move(words)); + } + else if (m_Type == Type::V8Object) + { + SharedPtr spHolder; + if (!result.pV8ObjectHandle->TryGetEntity(spHolder)) + { + m_Type = Type::Undefined; + } + else + { + m_Type = Type::V8Object; + m_Subtype = result.Subtype; + m_Flags = result.Flags; + m_Data.pV8ObjectHolder = spHolder->Clone(); + } + } + else if (m_Type == Type::HostObject) + { + m_Subtype = result.Subtype; + m_Flags = result.Flags; + m_Data.pHostObjectHolder = new HostObjectHolderImpl(result.pvHostObject, ::ToUnderlyingType(m_Subtype), ::ToUnderlyingType(m_Flags)); + } +} + +//----------------------------------------------------------------------------- +// V8 split proxy native entry points implementation //----------------------------------------------------------------------------- NATIVE_ENTRY_POINT(void**) V8SplitProxyManaged_SetMethodTable(void** pMethodTable) noexcept @@ -175,6 +248,27 @@ NATIVE_ENTRY_POINT(const StdChar*) V8SplitProxyNative_GetVersion() noexcept //----------------------------------------------------------------------------- +NATIVE_ENTRY_POINT(void*) Memory_Allocate(size_t size) noexcept +{ + return ::malloc(size); +} + +//----------------------------------------------------------------------------- + +NATIVE_ENTRY_POINT(void*) Memory_AllocateZeroed(size_t size) noexcept +{ + return ::calloc(1, size); +} + +//----------------------------------------------------------------------------- + +NATIVE_ENTRY_POINT(void) Memory_Free(const void* pMemory) noexcept +{ + ::free(const_cast(pMemory)); +} + +//----------------------------------------------------------------------------- + NATIVE_ENTRY_POINT(void) V8Environment_InitializeICU(const char* pICUData, uint32_t size) noexcept { ASSERT_EVAL(v8::V8::InitializeICU(pICUData, size)); @@ -506,20 +600,6 @@ NATIVE_ENTRY_POINT(void) V8Value_SetNumber(V8Value* pV8Value, double value) noex //----------------------------------------------------------------------------- -NATIVE_ENTRY_POINT(void) V8Value_SetInt32(V8Value* pV8Value, int32_t value) noexcept -{ - *pV8Value = V8Value(value); -} - -//----------------------------------------------------------------------------- - -NATIVE_ENTRY_POINT(void) V8Value_SetUInt32(V8Value* pV8Value, uint32_t value) noexcept -{ - *pV8Value = V8Value(value); -} - -//----------------------------------------------------------------------------- - NATIVE_ENTRY_POINT(void) V8Value_SetString(V8Value* pV8Value, const StdChar* pValue, int32_t length) noexcept { *pV8Value = V8Value(new StdString(pValue, length)); @@ -559,9 +639,9 @@ NATIVE_ENTRY_POINT(void) V8Value_SetV8Object(V8Value* pV8Value, const V8ObjectHa //----------------------------------------------------------------------------- -NATIVE_ENTRY_POINT(void) V8Value_SetHostObject(V8Value* pV8Value, void* pvObject) noexcept +NATIVE_ENTRY_POINT(void) V8Value_SetHostObject(V8Value* pV8Value, void* pvObject, V8Value::Subtype subtype, V8Value::Flags flags) noexcept { - *pV8Value = V8Value(new HostObjectHolderImpl(pvObject)); + *pV8Value = V8Value(new HostObjectHolderImpl(pvObject, ::ToUnderlyingType(subtype), ::ToUnderlyingType(flags))); } //----------------------------------------------------------------------------- @@ -1160,6 +1240,24 @@ NATIVE_ENTRY_POINT(void) V8Context_InvokeWithLock(const V8ContextHandle& handle, //----------------------------------------------------------------------------- +NATIVE_ENTRY_POINT(void) V8Context_InvokeWithLockWithArg(const V8ContextHandle& handle, void* pvAction, void* pvArg) noexcept +{ + auto spContext = handle.GetEntity(); + if (!spContext.IsEmpty()) + { + try + { + spContext->CallWithLockWithArg(InvokeHostActionWithArg, pvAction, pvArg); + } + catch (const V8Exception& exception) + { + exception.ScheduleScriptEngineException(); + } + } +} + +//----------------------------------------------------------------------------- + NATIVE_ENTRY_POINT(void) V8Context_GetRootItem(const V8ContextHandle& handle, V8Value& item) noexcept { auto spContext = handle.GetEntity(); @@ -1852,12 +1950,31 @@ NATIVE_ENTRY_POINT(void) V8Object_InvokeWithArrayBufferOrViewData(const V8Object //----------------------------------------------------------------------------- +NATIVE_ENTRY_POINT(void) V8Object_InvokeWithArrayBufferOrViewDataWithArg(const V8ObjectHandle& handle, void* pvAction, void* pvArg) noexcept +{ + auto spV8ObjectHolder = handle.GetEntity(); + if (!spV8ObjectHolder.IsEmpty()) + { + try + { + auto args = std::make_pair(pvAction, pvArg); + V8ObjectHelpers::InvokeWithArrayBufferOrViewData(spV8ObjectHolder, ProcessArrayBufferOrViewDataWithArg, &args); + } + catch (const V8Exception& exception) + { + exception.ScheduleScriptEngineException(); + } + } +} + +//----------------------------------------------------------------------------- + NATIVE_ENTRY_POINT(void) V8DebugCallback_ConnectClient(const V8DebugCallbackHandle& handle) noexcept { - SharedPtr spCallback; + SharedPtr spCallback; if (handle.TryGetEntity(spCallback)) { - (*spCallback)(IHostObjectUtil::DebugDirective::ConnectClient, nullptr /*pCommand*/); + (*spCallback)(HostObjectUtil::DebugDirective::ConnectClient, nullptr); } } @@ -1865,10 +1982,10 @@ NATIVE_ENTRY_POINT(void) V8DebugCallback_ConnectClient(const V8DebugCallbackHand NATIVE_ENTRY_POINT(void) V8DebugCallback_SendCommand(const V8DebugCallbackHandle& handle, const StdString& command) noexcept { - SharedPtr spCallback; + SharedPtr spCallback; if (handle.TryGetEntity(spCallback)) { - (*spCallback)(IHostObjectUtil::DebugDirective::SendCommand, &command); + (*spCallback)(HostObjectUtil::DebugDirective::SendCommand, &command); } } @@ -1876,10 +1993,10 @@ NATIVE_ENTRY_POINT(void) V8DebugCallback_SendCommand(const V8DebugCallbackHandle NATIVE_ENTRY_POINT(void) V8DebugCallback_DisconnectClient(const V8DebugCallbackHandle& handle) noexcept { - SharedPtr spCallback; + SharedPtr spCallback; if (handle.TryGetEntity(spCallback)) { - (*spCallback)(IHostObjectUtil::DebugDirective::DisconnectClient, nullptr /*pCommand*/); + (*spCallback)(HostObjectUtil::DebugDirective::DisconnectClient, nullptr); } } @@ -1887,7 +2004,7 @@ NATIVE_ENTRY_POINT(void) V8DebugCallback_DisconnectClient(const V8DebugCallbackH NATIVE_ENTRY_POINT(void) NativeCallback_Invoke(const NativeCallbackHandle& handle) noexcept { - SharedPtr spCallback; + SharedPtr spCallback; if (handle.TryGetEntity(spCallback)) { try @@ -1912,6 +2029,13 @@ NATIVE_ENTRY_POINT(void) V8Entity_Release(V8EntityHandleBase& handle) noexcept //----------------------------------------------------------------------------- +NATIVE_ENTRY_POINT(V8EntityHandleBase*) V8Entity_CloneHandle(V8EntityHandleBase& handle) noexcept +{ + return handle.Clone(); +} + +//----------------------------------------------------------------------------- + NATIVE_ENTRY_POINT(void) V8Entity_DestroyHandle(V8EntityHandleBase* pHandle) noexcept { delete pHandle; diff --git a/ClearScriptV8/V8SplitProxyNative.h b/ClearScriptV8/V8SplitProxyNative.h index f9e90363f..ec7cdb9b2 100644 --- a/ClearScriptV8/V8SplitProxyNative.h +++ b/ClearScriptV8/V8SplitProxyNative.h @@ -3,12 +3,6 @@ #pragma once -//----------------------------------------------------------------------------- -// forward declarations -//----------------------------------------------------------------------------- - -struct IV8SplitProxyManaged; - //----------------------------------------------------------------------------- // V8EntityName //----------------------------------------------------------------------------- @@ -61,6 +55,7 @@ class V8EntityHandleBase { public: + virtual V8EntityHandleBase* Clone() const noexcept = 0; virtual StdString CreateStdString(v8::Local hValue) const noexcept = 0; virtual void ReleaseEntity() noexcept = 0; virtual ~V8EntityHandleBase() noexcept {} @@ -82,7 +77,7 @@ class V8EntityHandle final: public V8EntityHandleBase public: - V8EntityHandle(T* pEntity) noexcept: + explicit V8EntityHandle(T* pEntity) noexcept: m_spEntity(pEntity) { } @@ -118,6 +113,17 @@ class V8EntityHandle final: public V8EntityHandleBase END_MUTEX_SCOPE } + V8EntityHandleBase* Clone() const noexcept override + { + SharedPtr spEntity; + + BEGIN_MUTEX_SCOPE(m_Mutex) + spEntity = m_spEntity; + END_MUTEX_SCOPE + + return new V8EntityHandle(std::move(spEntity)); + } + StdString CreateStdString(v8::Local hValue) const noexcept override { SharedPtr spEntity; @@ -135,6 +141,11 @@ class V8EntityHandle final: public V8EntityHandleBase private: + explicit V8EntityHandle(SharedPtr&& spEntity) noexcept : + m_spEntity(std::move(spEntity)) + { + } + mutable SimpleMutex m_Mutex; SharedPtr m_spEntity; }; @@ -149,8 +160,8 @@ DEFINE_V8_ENTITY_HANDLE(V8IsolateHandle, V8Isolate, SL("V8 runtime")) DEFINE_V8_ENTITY_HANDLE(V8ContextHandle, V8Context, SL("V8 script engine")) DEFINE_V8_ENTITY_HANDLE(V8ObjectHandle, V8ObjectHolder, SL("V8 object")) DEFINE_V8_ENTITY_HANDLE(V8ScriptHandle, V8ScriptHolder, SL("V8 script")) -DEFINE_V8_ENTITY_HANDLE(V8DebugCallbackHandle, IHostObjectUtil::DebugCallback, SL("V8 debug callback")) -DEFINE_V8_ENTITY_HANDLE(NativeCallbackHandle, IHostObjectUtil::NativeCallback, SL("native callback")) +DEFINE_V8_ENTITY_HANDLE(V8DebugCallbackHandle, HostObjectUtil::DebugCallback, SL("V8 debug callback")) +DEFINE_V8_ENTITY_HANDLE(NativeCallbackHandle, HostObjectUtil::NativeCallback, SL("native callback")) //----------------------------------------------------------------------------- // V8 split proxy native entry points @@ -160,6 +171,10 @@ NATIVE_ENTRY_POINT(void**) V8SplitProxyManaged_SetMethodTable(void** pMethodTabl NATIVE_ENTRY_POINT(const StdChar*) V8SplitProxyNative_GetVersion() noexcept; NATIVE_ENTRY_POINT(void) V8Environment_InitializeICU(const char* pICUData, uint32_t size) noexcept; +NATIVE_ENTRY_POINT(void*) Memory_Allocate(size_t size) noexcept; +NATIVE_ENTRY_POINT(void*) Memory_AllocateZeroed(size_t size) noexcept; +NATIVE_ENTRY_POINT(void) Memory_Free(const void* pMemory) noexcept; + NATIVE_ENTRY_POINT(StdString*) StdString_New(const StdChar* pValue, int32_t length) noexcept; NATIVE_ENTRY_POINT(const StdChar*) StdString_GetValue(const StdString& string, int32_t& length) noexcept; NATIVE_ENTRY_POINT(void) StdString_SetValue(StdString& string, const StdChar* pValue, int32_t length) noexcept; @@ -214,13 +229,11 @@ NATIVE_ENTRY_POINT(void) V8Value_SetUndefined(V8Value* pV8Value) noexcept; NATIVE_ENTRY_POINT(void) V8Value_SetNull(V8Value* pV8Value) noexcept; NATIVE_ENTRY_POINT(void) V8Value_SetBoolean(V8Value* pV8Value, StdBool value) noexcept; NATIVE_ENTRY_POINT(void) V8Value_SetNumber(V8Value* pV8Value, double value) noexcept; -NATIVE_ENTRY_POINT(void) V8Value_SetInt32(V8Value* pV8Value, int32_t value) noexcept; -NATIVE_ENTRY_POINT(void) V8Value_SetUInt32(V8Value* pV8Value, uint32_t value) noexcept; NATIVE_ENTRY_POINT(void) V8Value_SetString(V8Value* pV8Value, const StdChar* pValue, int32_t length) noexcept; NATIVE_ENTRY_POINT(void) V8Value_SetDateTime(V8Value* pV8Value, double value) noexcept; NATIVE_ENTRY_POINT(void) V8Value_SetBigInt(V8Value* pV8Value, int32_t signBit, const uint8_t* pBytes, int32_t length) noexcept; NATIVE_ENTRY_POINT(void) V8Value_SetV8Object(V8Value* pV8Value, const V8ObjectHandle& handle, V8Value::Subtype subtype, V8Value::Flags flags) noexcept; -NATIVE_ENTRY_POINT(void) V8Value_SetHostObject(V8Value* pV8Value, void* pvObject) noexcept; +NATIVE_ENTRY_POINT(void) V8Value_SetHostObject(V8Value* pV8Value, void* pvObject, V8Value::Subtype subtype, V8Value::Flags flags) noexcept; NATIVE_ENTRY_POINT(void) V8Value_Decode(const V8Value& value, V8Value::Decoded& decoded) noexcept; NATIVE_ENTRY_POINT(void) V8Value_Delete(V8Value* pV8Value) noexcept; @@ -265,6 +278,7 @@ NATIVE_ENTRY_POINT(void) V8Context_SetIsolateHeapSizeSampleInterval(const V8Cont NATIVE_ENTRY_POINT(size_t) V8Context_GetMaxIsolateStackUsage(const V8ContextHandle& handle) noexcept; NATIVE_ENTRY_POINT(void) V8Context_SetMaxIsolateStackUsage(const V8ContextHandle& handle, size_t size) noexcept; NATIVE_ENTRY_POINT(void) V8Context_InvokeWithLock(const V8ContextHandle& handle, void* pvAction) noexcept; +NATIVE_ENTRY_POINT(void) V8Context_InvokeWithLockWithArg(const V8ContextHandle& handle, void* pvAction, void* pvArg) noexcept; NATIVE_ENTRY_POINT(void) V8Context_GetRootItem(const V8ContextHandle& handle, V8Value& item) noexcept; NATIVE_ENTRY_POINT(void) V8Context_AddGlobalItem(const V8ContextHandle& handle, const StdString& name, const V8Value& value, StdBool globalMembers) noexcept; NATIVE_ENTRY_POINT(void) V8Context_AwaitDebuggerAndPause(const V8ContextHandle& handle) noexcept; @@ -306,6 +320,7 @@ NATIVE_ENTRY_POINT(void) V8Object_Invoke(const V8ObjectHandle& handle, StdBool a NATIVE_ENTRY_POINT(void) V8Object_InvokeMethod(const V8ObjectHandle& handle, const StdString& name, const std::vector& args, V8Value& result) noexcept; NATIVE_ENTRY_POINT(void) V8Object_GetArrayBufferOrViewInfo(const V8ObjectHandle& handle, V8Value& arrayBuffer, uint64_t& offset, uint64_t& size, uint64_t& length) noexcept; NATIVE_ENTRY_POINT(void) V8Object_InvokeWithArrayBufferOrViewData(const V8ObjectHandle& handle, void* pvAction) noexcept; +NATIVE_ENTRY_POINT(void) V8Object_InvokeWithArrayBufferOrViewDataWithArg(const V8ObjectHandle& handle, void* pvAction, void* pvArg) noexcept; NATIVE_ENTRY_POINT(void) V8DebugCallback_ConnectClient(const V8DebugCallbackHandle& handle) noexcept; NATIVE_ENTRY_POINT(void) V8DebugCallback_SendCommand(const V8DebugCallbackHandle& handle, const StdString& command) noexcept; @@ -314,6 +329,7 @@ NATIVE_ENTRY_POINT(void) V8DebugCallback_DisconnectClient(const V8DebugCallbackH NATIVE_ENTRY_POINT(void) NativeCallback_Invoke(const NativeCallbackHandle& handle) noexcept; NATIVE_ENTRY_POINT(void) V8Entity_Release(V8EntityHandleBase& handle) noexcept; +NATIVE_ENTRY_POINT(V8EntityHandleBase*) V8Entity_CloneHandle(V8EntityHandleBase& handle) noexcept; NATIVE_ENTRY_POINT(void) V8Entity_DestroyHandle(V8EntityHandleBase* pHandle) noexcept; NATIVE_ENTRY_POINT(void) HostException_Schedule(StdString&& message, V8Value&& exception) noexcept; diff --git a/ClearScriptV8/V8Value.h b/ClearScriptV8/V8Value.h index 92a6e71aa..992d6b27f 100644 --- a/ClearScriptV8/V8Value.h +++ b/ClearScriptV8/V8Value.h @@ -71,7 +71,7 @@ class V8BigInt final // V8Value //----------------------------------------------------------------------------- -class V8Value final +class V8Value { public: @@ -103,8 +103,6 @@ class V8Value final Null, Boolean, Number, - Int32, - UInt32, String, DateTime, BigInt, @@ -140,45 +138,17 @@ class V8Value final // IMPORTANT: maintain bitwise equivalence with managed enum V8.SplitProxy.V8Value.Flags None = 0, Shared = 0x0001, + Fast = 0x0001, Async = 0x0002, - Generator = 0x0004 + Generator = 0x0004, + Pending = 0x0008, + Rejected = 0x0010 }; - struct Decoded - { - // IMPORTANT: maintain bitwise equivalence with managed struct V8.SplitProxy.V8Value.Decoded - Type Type; - Subtype Subtype; - union - { - Flags Flags; - int16_t SignBit; - }; - union - { - int32_t Length; - int32_t IdentityHash; - }; - union - { - int32_t Int32Value; - uint32_t UInt32Value; - double DoubleValue; - const void* pvData; - }; - }; - - static_assert(sizeof(Decoded) == 16, "The managed SplitProxy code assumes that sizeof(Decoded) is 16 on all platforms."); - static_assert(offsetof(Decoded, Type) == 0, "The managed SplitProxy code assumes that offsetof(Decoded, Type) is 0 on all platforms."); - static_assert(offsetof(Decoded, Subtype) == 1, "The managed SplitProxy code assumes that offsetof(Decoded, Subtype) is 1 on all platforms."); - static_assert(offsetof(Decoded, Flags) == 2, "The managed SplitProxy code assumes that offsetof(Decoded, Flags) is 2 on all platforms."); - static_assert(offsetof(Decoded, SignBit) == 2, "The managed SplitProxy code assumes that offsetof(Decoded, SignBit) is 2 on all platforms."); - static_assert(offsetof(Decoded, Length) == 4, "The managed SplitProxy code assumes that offsetof(Decoded, Length) is 4 on all platforms."); - static_assert(offsetof(Decoded, IdentityHash) == 4, "The managed SplitProxy code assumes that offsetof(Decoded, IdentityHash) is 4 on all platforms."); - static_assert(offsetof(Decoded, Int32Value) == 8, "The managed SplitProxy code assumes that offsetof(Decoded, Int32Value) is 8 on all platforms."); - static_assert(offsetof(Decoded, UInt32Value) == 8, "The managed SplitProxy code assumes that offsetof(Decoded, UInt32Value) is 8 on all platforms."); - static_assert(offsetof(Decoded, DoubleValue) == 8, "The managed SplitProxy code assumes that offsetof(Decoded, DoubleValue) is 8 on all platforms."); - static_assert(offsetof(Decoded, pvData) == 8, "The managed SplitProxy code assumes that offsetof(Decoded, pvData) is 8 on all platforms."); + struct WireData; + struct Decoded; + struct FastArg; + struct FastResult; explicit V8Value(NonexistentInitializer): m_Type(Type::Nonexistent) @@ -207,18 +177,6 @@ class V8Value final m_Data.DoubleValue = value; } - explicit V8Value(int32_t value): - m_Type(Type::Int32) - { - m_Data.Int32Value = value; - } - - explicit V8Value(uint32_t value): - m_Type(Type::UInt32) - { - m_Data.UInt32Value = value; - } - explicit V8Value(const StdString* pString): m_Type(Type::String) { @@ -231,7 +189,7 @@ class V8Value final m_Data.DoubleValue = value; } - V8Value(const V8BigInt* pBigInt): + explicit V8Value(const V8BigInt* pBigInt): m_Type(Type::BigInt) { m_Data.pBigInt = pBigInt; @@ -246,7 +204,9 @@ class V8Value final } explicit V8Value(HostObjectHolder* pHostObjectHolder): - m_Type(Type::HostObject) + m_Type(Type::HostObject), + m_Subtype(::ToEnum(pHostObjectHolder->GetSubtype())), + m_Flags(::ToEnum(pHostObjectHolder->GetFlags())) { m_Data.pHostObjectHolder = pHostObjectHolder; } @@ -261,6 +221,13 @@ class V8Value final Move(that); } + explicit V8Value(const FastResult& result) + { + InitializeFromFastResult(result); + } + + explicit V8Value(void*) = delete; + const V8Value& operator=(const V8Value& that) { Dispose(); @@ -312,28 +279,6 @@ class V8Value final return false; } - bool AsInt32(int32_t& result) const - { - if (m_Type == Type::Int32) - { - result = m_Data.Int32Value; - return true; - } - - return false; - } - - bool AsUInt32(uint32_t& result) const - { - if (m_Type == Type::UInt32) - { - result = m_Data.UInt32Value; - return true; - } - - return false; - } - bool AsString(const StdString*& pString) const { if (m_Type == Type::String) @@ -380,11 +325,13 @@ class V8Value final return false; } - bool AsHostObject(HostObjectHolder*& pHostObjectHolder) const + bool AsHostObject(HostObjectHolder*& pHostObjectHolder, Subtype& subtype, Flags& flags) const { if (m_Type == Type::HostObject) { pHostObjectHolder = m_Data.pHostObjectHolder; + subtype = m_Subtype; + flags = m_Flags; return true; } @@ -409,8 +356,6 @@ class V8Value final { bool BooleanValue; double DoubleValue; - int32_t Int32Value; - uint32_t UInt32Value; const StdString* pString; V8ObjectHolder* pV8ObjectHolder; HostObjectHolder* pHostObjectHolder; @@ -431,14 +376,6 @@ class V8Value final { m_Data.DoubleValue = that.m_Data.DoubleValue; } - else if (m_Type == Type::Int32) - { - m_Data.Int32Value = that.m_Data.Int32Value; - } - else if (m_Type == Type::UInt32) - { - m_Data.UInt32Value = that.m_Data.UInt32Value; - } else if (m_Type == Type::String) { m_Data.pString = new StdString(*that.m_Data.pString); @@ -467,9 +404,11 @@ class V8Value final m_Subtype = that.m_Subtype; m_Flags = that.m_Flags; m_Data = that.m_Data; - that.m_Type = Type::Undefined; + that.m_Type = Type::Nonexistent; } + void InitializeFromFastResult(const FastResult& result); + void Dispose() { if (m_Type == Type::String) @@ -498,3 +437,31 @@ class V8Value final }; static_assert(sizeof(V8Value) == 16, "The managed SplitProxy code assumes that sizeof(V8Value) is 16 on all platforms."); + +//----------------------------------------------------------------------------- +// DefaultInitializedV8Value +//----------------------------------------------------------------------------- + +template +class DefaultInitializedV8Value final: public V8Value +{ +public: + + using V8Value::V8Value; + + DefaultInitializedV8Value(): + V8Value(ms_Initializer) + { + static_assert(sizeof(DefaultInitializedV8Value) == sizeof(V8Value)); + } + + using V8Value::operator=; + +private: + + static const TInitializer ms_Initializer {}; +}; + +using NonexistentV8Value = DefaultInitializedV8Value; +using UndefinedV8Value = DefaultInitializedV8Value; +using NullV8Value = DefaultInitializedV8Value; diff --git a/ClearScriptV8/V8ValueWireData.h b/ClearScriptV8/V8ValueWireData.h new file mode 100644 index 000000000..99d281c35 --- /dev/null +++ b/ClearScriptV8/V8ValueWireData.h @@ -0,0 +1,132 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +#pragma once + +//----------------------------------------------------------------------------- +// V8Value::WireData +//----------------------------------------------------------------------------- + +struct V8Value::WireData +{ + // IMPORTANT: maintain bitwise equivalence with managed struct V8.SplitProxy.V8Value.WireData + + Type Type; + Subtype Subtype; + + union + { + Flags Flags; + int16_t SignBit; + }; + + union + { + int32_t Length; + int32_t IdentityHash; + }; + + union + { + int32_t Int32Value; + double DoubleValue; + const StdChar* pStringData; + const uint64_t* pBigIntData; + const V8ObjectHandle* pV8ObjectHandle; + void* pvHostObject; + }; +}; + +//----------------------------------------------------------------------------- + +static_assert(sizeof(V8Value::WireData) == 16, "The managed SplitProxy code assumes that sizeof(V8Value::WireData) is 16 on all platforms."); +static_assert(offsetof(V8Value::WireData, Type) == 0, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, Type) is 0 on all platforms."); +static_assert(offsetof(V8Value::WireData, Subtype) == 1, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, Subtype) is 1 on all platforms."); +static_assert(offsetof(V8Value::WireData, Flags) == 2, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, Flags) is 2 on all platforms."); +static_assert(offsetof(V8Value::WireData, SignBit) == 2, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, SignBit) is 2 on all platforms."); +static_assert(offsetof(V8Value::WireData, Length) == 4, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, Length) is 4 on all platforms."); +static_assert(offsetof(V8Value::WireData, IdentityHash) == 4, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, IdentityHash) is 4 on all platforms."); +static_assert(offsetof(V8Value::WireData, Int32Value) == 8, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, Int32Value) is 8 on all platforms."); +static_assert(offsetof(V8Value::WireData, DoubleValue) == 8, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, DoubleValue) is 8 on all platforms."); +static_assert(offsetof(V8Value::WireData, pStringData) == 8, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, pStringData) is 8 on all platforms."); +static_assert(offsetof(V8Value::WireData, pBigIntData) == 8, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, pBigIntData) is 8 on all platforms."); +static_assert(offsetof(V8Value::WireData, pV8ObjectHandle) == 8, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, pV8ObjectHandle) is 8 on all platforms."); +static_assert(offsetof(V8Value::WireData, pvHostObject) == 8, "The managed SplitProxy code assumes that offsetof(V8Value::WireData, pvHostObject) is 8 on all platforms."); + +//----------------------------------------------------------------------------- +// V8Value::Decoded +//----------------------------------------------------------------------------- + +struct V8Value::Decoded: WireData +{ + // IMPORTANT: maintain bitwise equivalence with managed struct V8.SplitProxy.V8Value.Decoded +}; + +//----------------------------------------------------------------------------- + +static_assert(sizeof(V8Value::Decoded) == sizeof(V8Value::WireData)); + +//----------------------------------------------------------------------------- +// V8Value::FastArg +//----------------------------------------------------------------------------- + +struct V8Value::FastArg final: Decoded +{ + // IMPORTANT: maintain bitwise equivalence with managed struct V8.SplitProxy.V8Value.FastArg + + ~FastArg() + { + switch (Type) + { + case Type::V8Object: + delete pV8ObjectHandle; + break; + + default: + break; + } + } +}; + +//----------------------------------------------------------------------------- + +static_assert(sizeof(V8Value::FastArg) == sizeof(V8Value::Decoded)); + +//----------------------------------------------------------------------------- +// V8Value::FastResult +//----------------------------------------------------------------------------- + +struct V8Value::FastResult final: WireData +{ + // IMPORTANT: maintain bitwise equivalence with managed struct V8.SplitProxy.V8Value.FastResult + + FastResult() + { + Type = Type::Nonexistent; + } + + ~FastResult() + { + switch (Type) + { + case Type::String: + ::Memory_Free(pStringData); + break; + + case Type::BigInt: + ::Memory_Free(pBigIntData); + break; + + case Type::V8Object: + delete pV8ObjectHandle; + break; + + default: + break; + } + } +}; + +//----------------------------------------------------------------------------- + +static_assert(sizeof(V8Value::FastResult) == sizeof(V8Value::WireData)); diff --git a/ClearScriptV8/V8WeakContextBinding.h b/ClearScriptV8/V8WeakContextBinding.h index 07071d3be..4c65af136 100644 --- a/ClearScriptV8/V8WeakContextBinding.h +++ b/ClearScriptV8/V8WeakContextBinding.h @@ -27,7 +27,7 @@ class V8WeakContextBinding final: public SharedPtrTarget return spIsolateImpl; } - throw V8Exception(V8Exception::Type::General, m_IsolateName, StdString(SL("The V8 runtime has been destroyed")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_IsolateName, StdString(SL("The V8 runtime has been destroyed")), false); } bool TryGetIsolateImpl(SharedPtr& spIsolateImpl) const @@ -50,7 +50,7 @@ class V8WeakContextBinding final: public SharedPtrTarget return spContextImpl; } - throw V8Exception(V8Exception::Type::General, m_ContextName, StdString(SL("The V8 script engine has been destroyed")), false /*executionStarted*/); + throw V8Exception(V8Exception::Type::General, m_ContextName, StdString(SL("The V8 script engine has been destroyed")), false); } bool TryGetContextImpl(SharedPtr& spContextImpl) const diff --git a/ClearScriptV8/win-arm64/ClearScriptV8.win-arm64.vcxproj b/ClearScriptV8/win-arm64/ClearScriptV8.win-arm64.vcxproj index 7b65ee4fe..88d313de4 100644 --- a/ClearScriptV8/win-arm64/ClearScriptV8.win-arm64.vcxproj +++ b/ClearScriptV8/win-arm64/ClearScriptV8.win-arm64.vcxproj @@ -86,7 +86,7 @@ true stdcpp20 MultiThreadedDebug - -Wno-unused-parameter -Wno-unused-private-field + -Wno-unused-parameter -Wno-unused-private-field -Wno-vla-cxx-extension -Wno-cast-function-type-mismatch DebugFull @@ -124,7 +124,7 @@ true stdcpp20 MultiThreaded - -Wno-unused-parameter -Wno-unused-private-field + -Wno-unused-parameter -Wno-unused-private-field -Wno-vla-cxx-extension -Wno-cast-function-type-mismatch DebugFull @@ -194,13 +194,10 @@ + - - - - diff --git a/ClearScriptV8/win-arm64/ClearScriptV8.win-arm64.vcxproj.filters b/ClearScriptV8/win-arm64/ClearScriptV8.win-arm64.vcxproj.filters index 3b5a4043c..eb83d7cfa 100644 --- a/ClearScriptV8/win-arm64/ClearScriptV8.win-arm64.vcxproj.filters +++ b/ClearScriptV8/win-arm64/ClearScriptV8.win-arm64.vcxproj.filters @@ -123,6 +123,9 @@ Header Files + + Header Files + Header Files diff --git a/ClearScriptV8/win-x64/ClearScriptV8.win-x64.vcxproj b/ClearScriptV8/win-x64/ClearScriptV8.win-x64.vcxproj index 13c4689ed..48d3a744d 100644 --- a/ClearScriptV8/win-x64/ClearScriptV8.win-x64.vcxproj +++ b/ClearScriptV8/win-x64/ClearScriptV8.win-x64.vcxproj @@ -86,7 +86,7 @@ true stdcpp20 MultiThreadedDebug - -Wno-unused-parameter -Wno-unused-private-field + -Wno-unused-parameter -Wno-unused-private-field -Wno-vla-cxx-extension -Wno-cast-function-type-mismatch DebugFull @@ -124,7 +124,7 @@ true stdcpp20 MultiThreaded - -Wno-unused-parameter -Wno-unused-private-field + -Wno-unused-parameter -Wno-unused-private-field -Wno-vla-cxx-extension -Wno-cast-function-type-mismatch DebugFull @@ -194,13 +194,10 @@ + - - - - diff --git a/ClearScriptV8/win-x64/ClearScriptV8.win-x64.vcxproj.filters b/ClearScriptV8/win-x64/ClearScriptV8.win-x64.vcxproj.filters index 3b5a4043c..eb83d7cfa 100644 --- a/ClearScriptV8/win-x64/ClearScriptV8.win-x64.vcxproj.filters +++ b/ClearScriptV8/win-x64/ClearScriptV8.win-x64.vcxproj.filters @@ -123,6 +123,9 @@ Header Files + + Header Files + Header Files diff --git a/ClearScriptV8/win-x86/ClearScriptV8.win-x86.vcxproj b/ClearScriptV8/win-x86/ClearScriptV8.win-x86.vcxproj index bea532ab8..6b19ed849 100644 --- a/ClearScriptV8/win-x86/ClearScriptV8.win-x86.vcxproj +++ b/ClearScriptV8/win-x86/ClearScriptV8.win-x86.vcxproj @@ -85,7 +85,7 @@ true stdcpp20 MultiThreadedDebug - -Wno-unused-parameter -Wno-unused-private-field + -Wno-unused-parameter -Wno-unused-private-field -Wno-vla-cxx-extension -Wno-cast-function-type-mismatch DebugFull @@ -123,7 +123,7 @@ true stdcpp20 MultiThreaded - -Wno-unused-parameter -Wno-unused-private-field + -Wno-unused-parameter -Wno-unused-private-field -Wno-vla-cxx-extension -Wno-cast-function-type-mismatch DebugFull @@ -193,13 +193,10 @@ + - - - - diff --git a/ClearScriptV8/win-x86/ClearScriptV8.win-x86.vcxproj.filters b/ClearScriptV8/win-x86/ClearScriptV8.win-x86.vcxproj.filters index d77cf6d36..f15dec8f8 100644 --- a/ClearScriptV8/win-x86/ClearScriptV8.win-x86.vcxproj.filters +++ b/ClearScriptV8/win-x86/ClearScriptV8.win-x86.vcxproj.filters @@ -123,6 +123,9 @@ Header Files + + Header Files + Header Files diff --git a/Misc/JScriptReplacement/DisableJScriptReplacement_CurrentUser.reg b/Misc/JScriptReplacement/DisableJScriptReplacement_CurrentUser.reg new file mode 100644 index 000000000..f16c73cda Binary files /dev/null and b/Misc/JScriptReplacement/DisableJScriptReplacement_CurrentUser.reg differ diff --git a/Misc/JScriptReplacement/DisableJScriptReplacement_LocalMachine.reg b/Misc/JScriptReplacement/DisableJScriptReplacement_LocalMachine.reg new file mode 100644 index 000000000..4c71e34ff Binary files /dev/null and b/Misc/JScriptReplacement/DisableJScriptReplacement_LocalMachine.reg differ diff --git a/Misc/ProcessDebugManager/CLSID_ProcessDebugManager.reg b/Misc/ProcessDebugManager/CLSID_ProcessDebugManager.reg index 632b2c0ab..dc7c346bd 100644 Binary files a/Misc/ProcessDebugManager/CLSID_ProcessDebugManager.reg and b/Misc/ProcessDebugManager/CLSID_ProcessDebugManager.reg differ diff --git a/Misc/macOS/GitConfiguration.txt b/Misc/macOS/GitConfiguration.txt new file mode 100644 index 000000000..8c94bcb92 --- /dev/null +++ b/Misc/macOS/GitConfiguration.txt @@ -0,0 +1,3 @@ +The "gclient sync" command fails, indicating "HTTP 500". + +Possible fix: git config --global http.postBuffer 524288000 diff --git a/NetCore/ClearScript.Core/ClearScript.Core.csproj b/NetCore/ClearScript.Core/ClearScript.Core.csproj index 03600f153..1a7cfb97f 100644 --- a/NetCore/ClearScript.Core/ClearScript.Core.csproj +++ b/NetCore/ClearScript.Core/ClearScript.Core.csproj @@ -5,6 +5,7 @@ Microsoft.ClearScript false false + 9.0 @@ -95,11 +96,9 @@ - - @@ -141,13 +140,14 @@ + - + @@ -167,12 +167,14 @@ + + diff --git a/NetCore/ClearScript.V8/ClearScript.V8.csproj b/NetCore/ClearScript.V8/ClearScript.V8.csproj index 3d5e764e3..c44cee060 100644 --- a/NetCore/ClearScript.V8/ClearScript.V8.csproj +++ b/NetCore/ClearScript.V8/ClearScript.V8.csproj @@ -5,6 +5,7 @@ Microsoft.ClearScript.V8 false false + 9.0 @@ -37,6 +38,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -49,8 +76,7 @@ - - + @@ -77,7 +103,6 @@ - @@ -144,7 +169,7 @@ - + diff --git a/NetCore/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj b/NetCore/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj index 2eb5c3e49..ebe722241 100644 --- a/NetCore/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj +++ b/NetCore/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj @@ -5,6 +5,7 @@ Microsoft.ClearScript.Windows false false + 9.0 @@ -48,7 +49,6 @@ - diff --git a/NetCore/ClearScript.Windows/ClearScript.Windows.csproj b/NetCore/ClearScript.Windows/ClearScript.Windows.csproj index a3149a31c..da87f2677 100644 --- a/NetCore/ClearScript.Windows/ClearScript.Windows.csproj +++ b/NetCore/ClearScript.Windows/ClearScript.Windows.csproj @@ -6,6 +6,7 @@ Microsoft.ClearScript.Windows false false + 9.0 @@ -43,12 +44,10 @@ - - diff --git a/NetCore/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj b/NetCore/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj index 294460cb4..d482ec1fd 100644 --- a/NetCore/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj +++ b/NetCore/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj @@ -3,10 +3,11 @@ Exe - netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows + netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows;net9.0-windows Microsoft.ClearScript.Test false false + 9.0 diff --git a/NetCore/ClearScriptConsole/ClearScriptConsole.csproj b/NetCore/ClearScriptConsole/ClearScriptConsole.csproj index 9c9123126..f95d05aa0 100644 --- a/NetCore/ClearScriptConsole/ClearScriptConsole.csproj +++ b/NetCore/ClearScriptConsole/ClearScriptConsole.csproj @@ -1,12 +1,13 @@ - + Exe - netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows + netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows;net9.0-windows Microsoft.ClearScript.Test false false + 9.0 @@ -39,8 +40,8 @@ - - + + diff --git a/NetCore/ClearScriptTest/ClearScriptTest.csproj b/NetCore/ClearScriptTest/ClearScriptTest.csproj index 02b7ddcf3..159aeda1f 100644 --- a/NetCore/ClearScriptTest/ClearScriptTest.csproj +++ b/NetCore/ClearScriptTest/ClearScriptTest.csproj @@ -1,8 +1,14 @@ - + + + + true + 9.0 + true + - netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows + netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows;net9.0-windows Microsoft.ClearScript.Test false false @@ -18,6 +24,7 @@ DEBUG;TRACE + true CA1416 true ..\..\bin\Debug @@ -25,6 +32,7 @@ TRACE + true CA1416 true ..\..\bin\Release @@ -57,7 +65,6 @@ - @@ -83,13 +90,12 @@ - + - @@ -125,17 +131,26 @@ false false + + tlbimp + 0 + 6 + f5078f18-c551-11d3-89b9-0000f81fe221 + 0 + false + false + - - - - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + + + + diff --git a/NetFramework/ClearScript.Core/ClearScript.Core.csproj b/NetFramework/ClearScript.Core/ClearScript.Core.csproj index f5ffe3805..b5c6f3b65 100644 --- a/NetFramework/ClearScript.Core/ClearScript.Core.csproj +++ b/NetFramework/ClearScript.Core/ClearScript.Core.csproj @@ -1,9 +1,10 @@ - + - net45;net471 + net462;net471 Microsoft.ClearScript false + 9.0 @@ -144,12 +145,13 @@ + - + @@ -169,12 +171,14 @@ + + @@ -205,17 +209,16 @@ - + - - - - - + + + + diff --git a/NetFramework/ClearScript.V8/ClearScript.V8.csproj b/NetFramework/ClearScript.V8/ClearScript.V8.csproj index 7337379d3..a43d80a51 100644 --- a/NetFramework/ClearScript.V8/ClearScript.V8.csproj +++ b/NetFramework/ClearScript.V8/ClearScript.V8.csproj @@ -1,9 +1,10 @@ - + - net45;net471 + net462;net471 Microsoft.ClearScript.V8 false + 9.0 @@ -40,6 +41,32 @@ True AssemblyInfo.V8.tt + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101,12 +128,12 @@ TextTemplatingFileGenerator V8ScriptEngine.InitScript.cs - + TextTemplatingFileGenerator V8SplitProxyNative.Generated.cs - + @@ -168,14 +195,8 @@ - - - - - - - + @@ -183,10 +204,6 @@ - - - - diff --git a/NetFramework/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj b/NetFramework/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj index 02aaad07e..d9d28b5bb 100644 --- a/NetFramework/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj +++ b/NetFramework/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj @@ -1,9 +1,10 @@  - net45 + net462 Microsoft.ClearScript.Windows false + 9.0 @@ -11,7 +12,7 @@ true true ..\..\bin\Debug - ..\..\bin\Debug\net45\ClearScript.Windows.Core.xml + ..\..\bin\Debug\$(TargetFramework)\ClearScript.Windows.Core.xml @@ -19,7 +20,7 @@ true true ..\..\bin\Release - ..\..\bin\Release\net45\ClearScript.Windows.Core.xml + ..\..\bin\Release\$(TargetFramework)\ClearScript.Windows.Core.xml @@ -69,17 +70,13 @@ TextTemplatingFileGenerator JScriptEngine.InitScript.cs - + - - - - diff --git a/NetFramework/ClearScript.Windows/ClearScript.Windows.csproj b/NetFramework/ClearScript.Windows/ClearScript.Windows.csproj index af707a86c..9cef203c4 100644 --- a/NetFramework/ClearScript.Windows/ClearScript.Windows.csproj +++ b/NetFramework/ClearScript.Windows/ClearScript.Windows.csproj @@ -1,10 +1,11 @@ - net45 + net462 true Microsoft.ClearScript.Windows false + 9.0 @@ -55,14 +56,9 @@ - - - - - diff --git a/NetFramework/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj b/NetFramework/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj index b4fa8655c..d35df1623 100644 --- a/NetFramework/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj +++ b/NetFramework/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj @@ -5,6 +5,7 @@ net471 Microsoft.ClearScript.Test false + 9.0 @@ -44,10 +45,6 @@ - - - - diff --git a/NetFramework/ClearScriptConsole/ClearScriptConsole.csproj b/NetFramework/ClearScriptConsole/ClearScriptConsole.csproj index 6b72dc46d..c98462053 100644 --- a/NetFramework/ClearScriptConsole/ClearScriptConsole.csproj +++ b/NetFramework/ClearScriptConsole/ClearScriptConsole.csproj @@ -5,6 +5,7 @@ net471 Microsoft.ClearScript.Test false + 9.0 @@ -44,7 +45,7 @@ - + @@ -53,10 +54,6 @@ - - - - diff --git a/NetFramework/ClearScriptTest/ClearScriptTest.csproj b/NetFramework/ClearScriptTest/ClearScriptTest.csproj index 6a7989dfb..8ea09876b 100644 --- a/NetFramework/ClearScriptTest/ClearScriptTest.csproj +++ b/NetFramework/ClearScriptTest/ClearScriptTest.csproj @@ -1,20 +1,24 @@ - + net471 true Microsoft.ClearScript.Test false + 9.0 + true TRACE;DEBUG;NETFRAMEWORK + true true ..\..\bin\Debug TRACE;NETFRAMEWORK + true true ..\..\bin\Release @@ -23,6 +27,7 @@ true $(SolutionDir)ClearScript.snk + true $(SolutionDir)ClearScript.DelaySign.snk @@ -79,6 +84,7 @@ + @@ -116,17 +122,26 @@ false false + + tlbimp + 0 + 6 + f5078f18-c551-11d3-89b9-0000f81fe221 + 0 + false + false + - - - all runtime; build; native; contentfiles; analyzers; buildtransitive - + + + + @@ -278,10 +293,6 @@ - - - - diff --git a/NetStandard/ClearScript.Core/ClearScript.Core.csproj b/NetStandard/ClearScript.Core/ClearScript.Core.csproj index b75f631cc..25aa8982f 100644 --- a/NetStandard/ClearScript.Core/ClearScript.Core.csproj +++ b/NetStandard/ClearScript.Core/ClearScript.Core.csproj @@ -1,9 +1,10 @@ - + netstandard2.1 Microsoft.ClearScript false + 9.0 @@ -94,11 +95,9 @@ - - @@ -140,13 +139,14 @@ + - + @@ -166,12 +166,14 @@ + + @@ -185,6 +187,7 @@ + diff --git a/NetStandard/ClearScript.V8.ICUData/ClearScript.V8.ICUData.csproj b/NetStandard/ClearScript.V8.ICUData/ClearScript.V8.ICUData.csproj index 60af8250f..af63bde07 100644 --- a/NetStandard/ClearScript.V8.ICUData/ClearScript.V8.ICUData.csproj +++ b/NetStandard/ClearScript.V8.ICUData/ClearScript.V8.ICUData.csproj @@ -1,9 +1,11 @@ - + netstandard1.0 Microsoft.ClearScript.V8.ICUData false + 9.0 + NETSDK1215 @@ -51,6 +53,10 @@ + + + + diff --git a/NetStandard/ClearScript.V8/ClearScript.V8.csproj b/NetStandard/ClearScript.V8/ClearScript.V8.csproj index 7bdcb1b87..e9c7d9742 100644 --- a/NetStandard/ClearScript.V8/ClearScript.V8.csproj +++ b/NetStandard/ClearScript.V8/ClearScript.V8.csproj @@ -1,9 +1,10 @@ - + netstandard2.1 Microsoft.ClearScript.V8 false + 9.0 @@ -36,6 +37,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -74,7 +101,6 @@ - @@ -141,7 +167,7 @@ - + diff --git a/NetStandard/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj b/NetStandard/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj index 9cfdba0f7..9400a24e1 100644 --- a/NetStandard/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj +++ b/NetStandard/ClearScript.Windows.Core/ClearScript.Windows.Core.csproj @@ -4,6 +4,7 @@ netstandard2.1 Microsoft.ClearScript.Windows false + 9.0 @@ -47,7 +48,6 @@ - diff --git a/NetStandard/ClearScriptConsole/ClearScriptConsole.csproj b/NetStandard/ClearScriptConsole/ClearScriptConsole.csproj index eeba81e98..d1f3614c0 100644 --- a/NetStandard/ClearScriptConsole/ClearScriptConsole.csproj +++ b/NetStandard/ClearScriptConsole/ClearScriptConsole.csproj @@ -1,9 +1,13 @@ - + + + + 9.0 + Exe - netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows + netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows;net9.0-windows Microsoft.ClearScript.Test false false @@ -41,8 +45,8 @@ - - + + diff --git a/NetStandard/ClearScriptTest.NetStandard/ClearScriptTest.NetStandard.csproj b/NetStandard/ClearScriptTest.NetStandard/ClearScriptTest.NetStandard.csproj index 076adbf06..9e6de7770 100644 --- a/NetStandard/ClearScriptTest.NetStandard/ClearScriptTest.NetStandard.csproj +++ b/NetStandard/ClearScriptTest.NetStandard/ClearScriptTest.NetStandard.csproj @@ -1,8 +1,14 @@ - + + + + true + 9.0 + true + - netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows + netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;net8.0-windows;net9.0-windows true Microsoft.ClearScript.Test false @@ -22,6 +28,7 @@ DEBUG;TRACE + true CA1416 true ..\..\bin\Debug\NetStandard @@ -29,6 +36,7 @@ TRACE + true CA1416 true ..\..\bin\Release\NetStandard @@ -62,7 +70,6 @@ - @@ -88,13 +95,12 @@ - + - @@ -130,17 +136,26 @@ false false + + tlbimp + 0 + 6 + f5078f18-c551-11d3-89b9-0000f81fe221 + 0 + false + false + - - - - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + + + + diff --git a/ReadMe.md b/ReadMe.md index 266889e27..c8ef75e2c 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -30,7 +30,7 @@ ClearScript is a library that makes it easy to add scripting to your .NET applic * [![V8](https://img.shields.io/badge/-V8-blue)](#) Automatic conversion between .NET [`BigInteger`](https://docs.microsoft.com/en-us/dotnet/api/system.numerics.biginteger) and JavaScript [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt). * [![V8](https://img.shields.io/badge/-V8-blue)](#) Optional automatic conversion between .NET [`DateTime`](https://docs.microsoft.com/en-us/dotnet/api/system.datetime) and JavaScript [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date). * [![V8](https://img.shields.io/badge/-V8-blue)](#) Optional automatic conversion between .NET [tasks](https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task) and JavaScript [promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). -* Support for .NET 5.0+, .NET Framework 4.5+, .NET Core 3.1, and .NET Standard 2.1. +* Support for .NET 5.0+, .NET Framework 4.6.2+, .NET Core 3.1, and .NET Standard 2.1. * Support for Windows (x86/x64/arm64), Linux (x64/arm/arm64), and macOS (x64/arm64). # Installation @@ -44,7 +44,7 @@ Everything you need for one platform. | Platform | Packages | | :---: | --- | -| Windows | [![ClearScript](https://img.shields.io/nuget/v/Microsoft.ClearScript?label=Windows%20(x86/x64)&logo=Windows&logoColor=white)](https://www.nuget.org/packages/Microsoft.ClearScript) [![ClearScript.win-arm64](https://img.shields.io/nuget/v/Microsoft.ClearScript.win-arm64?label=Windows%20(arm64)&logo=Windows&logoColor=white)](https://www.nuget.org/packages/Microsoft.ClearScript.win-arm64) | +| Windows | [![ClearScript](https://img.shields.io/nuget/v/Microsoft.ClearScript?label=Windows%20(x86/x64)&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+V2luZG93czwvdGl0bGU+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAsMEgxMS4zNzdWMTEuMzcySDBaTTEyLjYyMywwSDI0VjExLjM3MkgxMi42MjNaTTAsMTIuNjIzSDExLjM3N1YyNEgwWm0xMi42MjMsMEgyNFYyNEgxMi42MjMiLz48L3N2Zz4=&logoColor=white)](https://www.nuget.org/packages/Microsoft.ClearScript) [![ClearScript.win-arm64](https://img.shields.io/nuget/v/Microsoft.ClearScript.win-arm64?label=Windows%20(arm64)&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+V2luZG93czwvdGl0bGU+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAsMEgxMS4zNzdWMTEuMzcySDBaTTEyLjYyMywwSDI0VjExLjM3MkgxMi42MjNaTTAsMTIuNjIzSDExLjM3N1YyNEgwWm0xMi42MjMsMEgyNFYyNEgxMi42MjMiLz48L3N2Zz4=&logoColor=white)](https://www.nuget.org/packages/Microsoft.ClearScript.win-arm64) | | Linux | [![ClearScript.linux-x64](https://img.shields.io/nuget/v/Microsoft.ClearScript.linux-x64?label=Linux%20(x64)&logo=Linux&logoColor=white)](https://www.nuget.org/packages/Microsoft.ClearScript.linux-x64) [![ClearScript.linux-arm](https://img.shields.io/nuget/v/Microsoft.ClearScript.linux-arm?label=Linux%20(arm)&logo=Linux&logoColor=white)](https://www.nuget.org/packages/Microsoft.ClearScript.linux-arm) [![ClearScript.linux-arm64](https://img.shields.io/nuget/v/Microsoft.ClearScript.linux-arm64?label=Linux%20(arm64)&logo=Linux&logoColor=white)](https://www.nuget.org/packages/Microsoft.ClearScript.linux-arm64) | | macOS | [![ClearScript.osx-x64](https://img.shields.io/nuget/v/Microsoft.ClearScript.osx-x64?label=macOS%20(x64)&logo=Apple&logoColor=white)](https://www.nuget.org/packages/Microsoft.ClearScript.osx-x64) [![ClearScript.osx-arm64](https://img.shields.io/nuget/v/Microsoft.ClearScript.osx-arm64?label=macOS%20(arm64)&logo=Apple&logoColor=white)](https://www.nuget.org/packages/Microsoft.ClearScript.osx-arm64) | diff --git a/UWP/ClearScript.Core/ClearScript.Core.csproj b/UWP/ClearScript.Core/ClearScript.Core.csproj index 35400652e..f0ad49189 100644 --- a/UWP/ClearScript.Core/ClearScript.Core.csproj +++ b/UWP/ClearScript.Core/ClearScript.Core.csproj @@ -13,11 +13,12 @@ ClearScript.Core en-US UAP - 10.0.20348.0 - 10.0.17763.0 + 10.0.26100.0 + 10.0.19041.0 14 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 9.0 AnyCPU @@ -162,13 +163,14 @@ + - + @@ -188,12 +190,14 @@ + + @@ -210,9 +214,15 @@ + + 9.0.0 + 6.2.14 + + 4.5.5 + 14.0 diff --git a/UWP/ClearScript.V8/ClearScript.V8.csproj b/UWP/ClearScript.V8/ClearScript.V8.csproj index 9a7cbd97b..45e246212 100644 --- a/UWP/ClearScript.V8/ClearScript.V8.csproj +++ b/UWP/ClearScript.V8/ClearScript.V8.csproj @@ -1,4 +1,4 @@ - + @@ -14,11 +14,12 @@ en-US UAP - 10.0.20348.0 - 10.0.17763.0 + 10.0.26100.0 + 10.0.19041.0 14 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 9.0 AnyCPU @@ -55,6 +56,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -110,11 +137,8 @@ - - 6.2.14 - - 13.0.2 + 13.0.3 diff --git a/UWP/ClearScriptConsole/ClearScriptConsole.csproj b/UWP/ClearScriptConsole/ClearScriptConsole.csproj index 15067db81..d7c0236c5 100644 --- a/UWP/ClearScriptConsole/ClearScriptConsole.csproj +++ b/UWP/ClearScriptConsole/ClearScriptConsole.csproj @@ -36,6 +36,7 @@ False True 0 + 9.0 true @@ -138,11 +139,6 @@ - - - 6.2.11 - - {d3391831-65ce-4c1e-a21b-01a283f3e193} diff --git a/UWP/ClearScriptTest/ClearScriptTest.csproj b/UWP/ClearScriptTest/ClearScriptTest.csproj index 7e6bf64ef..2bd740389 100644 --- a/UWP/ClearScriptTest/ClearScriptTest.csproj +++ b/UWP/ClearScriptTest/ClearScriptTest.csproj @@ -18,6 +18,7 @@ {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} $(VisualStudioVersion) false + 9.0 true @@ -127,6 +128,7 @@ + @@ -173,9 +175,6 @@ 3.8.0 - - 6.2.11 - 2.1.2 diff --git a/Unix/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj b/Unix/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj index 698576fa3..10927857b 100644 --- a/Unix/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj +++ b/Unix/ClearScriptBenchmarks/ClearScriptBenchmarks.csproj @@ -1,9 +1,13 @@ - + + + + 9.0 + Exe - netcoreapp3.1;net5.0;net6.0;net7.0;net8.0 + netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0 Microsoft.ClearScript.Test false false diff --git a/Unix/ClearScriptConsole/ClearScriptConsole.csproj b/Unix/ClearScriptConsole/ClearScriptConsole.csproj index 17860462e..60a76a179 100644 --- a/Unix/ClearScriptConsole/ClearScriptConsole.csproj +++ b/Unix/ClearScriptConsole/ClearScriptConsole.csproj @@ -1,9 +1,13 @@ - + + + + 9.0 + Exe - netcoreapp3.1;net5.0;net6.0;net7.0;net8.0 + netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0 Microsoft.ClearScript.Test ClearScriptConsole false @@ -45,8 +49,8 @@ - - + + diff --git a/Unix/ClearScriptTest.NetStandard/ClearScriptTest.NetStandard.csproj b/Unix/ClearScriptTest.NetStandard/ClearScriptTest.NetStandard.csproj index 1e17ccba0..fa0c9371f 100644 --- a/Unix/ClearScriptTest.NetStandard/ClearScriptTest.NetStandard.csproj +++ b/Unix/ClearScriptTest.NetStandard/ClearScriptTest.NetStandard.csproj @@ -1,8 +1,13 @@ - + + + + true + 9.0 + - netcoreapp3.1;net5.0;net6.0;net7.0;net8.0 + net6.0;net7.0;net8.0;net9.0 false Microsoft.ClearScript.Test false @@ -23,6 +28,7 @@ DEBUG;TRACE true + true CA1416 ..\..\bin\Debug\Unix\NetStandard @@ -30,6 +36,7 @@ TRACE true + true CA1416 ..\..\bin\Release\Unix\NetStandard @@ -59,7 +66,6 @@ - @@ -80,13 +86,12 @@ - + - @@ -106,14 +111,14 @@ - - - - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + + + + diff --git a/Unix/ClearScriptTest/ClearScriptTest.csproj b/Unix/ClearScriptTest/ClearScriptTest.csproj index 7adbb7ddc..166e3c40b 100644 --- a/Unix/ClearScriptTest/ClearScriptTest.csproj +++ b/Unix/ClearScriptTest/ClearScriptTest.csproj @@ -1,8 +1,13 @@ - + + + + true + 9.0 + - netcoreapp3.1;net5.0;net6.0;net7.0;net8.0 + net6.0;net7.0;net8.0;net9.0 false Microsoft.ClearScript.Test false @@ -21,6 +26,7 @@ DEBUG;TRACE true + true CA1416 ..\..\bin\Debug\Unix @@ -28,6 +34,7 @@ TRACE true + true CA1416 ..\..\bin\Release\Unix @@ -57,7 +64,6 @@ - @@ -78,13 +84,12 @@ - + - @@ -104,14 +109,14 @@ - - - - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + + + + diff --git a/Unix/ClearScriptV8/Makefile b/Unix/ClearScriptV8/Makefile index fc304e3f1..7f4063e95 100644 --- a/Unix/ClearScriptV8/Makefile +++ b/Unix/ClearScriptV8/Makefile @@ -87,6 +87,7 @@ ifeq ($(TARGETOS), linux) endif else ifeq ($(TARGETOS), darwin) TARGET = $(TARGETARCH)-$(TARGETOS) + CXXLINKFLAGS := -framework CoreFoundation ifndef DEBUG STRIP = strip -r -u ENTITLEMENTS = $(MAKEDIR)/entitlements.xml diff --git a/Unix/V8Update.sh b/Unix/V8Update.sh index 3be6d0d90..b8c1bc485 100644 --- a/Unix/V8Update.sh +++ b/Unix/V8Update.sh @@ -1,6 +1,6 @@ #!/bin/bash -v8testedrev=12.3.219.12 +v8testedrev=13.3.415.23 v8testedcommit= v8cherrypicks= v8linuxbuildcommit=3d9590754d5d23e62d15472c5baf6777ca59df20 @@ -181,7 +181,7 @@ if [[ $download == true ]]; then if [[ $v8linuxbuildcommit != "" ]]; then git reset --hard $v8linuxbuildcommit >resetBuild.log || fail fi - cp ../../../sysroots.json linux/sysroot_scripts || fail + git apply --reject --ignore-whitespace ../../../BuildPatch.txt 2>apply-patch.log || fail cd .. cd tools/clang || abort if [[ $v8linuxclangcommit != "" ]]; then @@ -216,17 +216,23 @@ if [[ $linux == true ]]; then cd third_party/abseil-cpp || abort git diff --ignore-space-change --ignore-space-at-eol >AbseilCppPatch.txt 2>create-patch.log || fail cd ../.. + cd build || abort + git restore linux/sysroot_scripts/sysroots.json || fail + git diff --ignore-space-change --ignore-space-at-eol >BuildPatch.txt 2>create-patch.log || fail + cd .. fi if [[ $linux == true ]]; then echo "Installing LKG sysroots ..." + cp ../../sysroots.json build/linux/sysroot_scripts || fail build/linux/sysroot_scripts/install-sysroot.py --arch=x64 >install-x64-sysroot.log || fail build/linux/sysroot_scripts/install-sysroot.py --arch=i386 >install-i386-sysroot.log || fail build/linux/sysroot_scripts/install-sysroot.py --arch=$cpu >install-$cpu-sysroot.log || fail fi echo "Building V8 ..." -gn gen out/$cpu/$mode --args="fatal_linker_warnings=false is_cfi=false is_component_build=false is_debug=$isdebug target_cpu=\"$cpu\" use_custom_libcxx=false use_thin_lto=false v8_embedder_string=\"-ClearScript\" v8_enable_fuzztest=false v8_enable_pointer_compression=false v8_enable_31bit_smis_on_64bit_arch=false v8_monolithic=true v8_use_external_startup_data=false v8_target_cpu=\"$cpu\"" >gn-$cpu-$mode.log || fail +gn gen out/$cpu/$mode --args="fatal_linker_warnings=false is_cfi=false is_component_build=false is_debug=$isdebug target_cpu=\"$cpu\" use_custom_libcxx=false use_thin_lto=false v8_embedder_string=\"-ClearScript\" v8_enable_fuzztest=false v8_enable_pointer_compression=false v8_enable_31bit_smis_on_64bit_arch=false v8_monolithic=true v8_use_external_startup_data=false v8_target_cpu=\"$cpu\"" >gn-$cpu-$mode.log 2>gn-$cpu-$mode.log || fail +gn args out/$cpu/$mode --list >out/$cpu/$mode/allArgs.txt || fail ninja -C out/$cpu/$mode obj/libv8_monolith.a >build-$cpu-$mode.log || fail cd ../.. @@ -236,6 +242,7 @@ cp build/v8/V8Patch.txt . || fail if [[ $linux == true ]]; then cp build/v8/third_party/abseil-cpp/AbseilCppPatch.txt . || fail + cp build/v8/build/BuildPatch.txt . || fail fi echo "Importing ICU data ..." diff --git a/V8/AbseilCppPatch.txt b/V8/AbseilCppPatch.txt index 664e26e2d..d239020d1 100644 --- a/V8/AbseilCppPatch.txt +++ b/V8/AbseilCppPatch.txt @@ -1,12 +1,12 @@ diff --git a/absl.gni b/absl.gni -index 91d4111..9800433 100644 +index 48e1ce78..5fdb7836 100644 --- a/absl.gni +++ b/absl.gni -@@ -25,7 +25,6 @@ template("absl_source_set") { - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ - "//build/config/compiler:no_chromium_code", -- "//build/config/compiler:prevent_unsafe_narrowing", - "//third_party/abseil-cpp:absl_default_cflags_cc", - "//third_party/abseil-cpp:absl_define_config", - ] +@@ -32,7 +32,6 @@ template("absl_source_set") { + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ + "//build/config/compiler:no_chromium_code", +- "//build/config/compiler:prevent_unsafe_narrowing", + "//third_party/abseil-cpp:absl_default_cflags_cc", + "//third_party/abseil-cpp:absl_define_config", + ] diff --git a/V8/BuildPatch.txt b/V8/BuildPatch.txt new file mode 100644 index 000000000..9260a2db6 --- /dev/null +++ b/V8/BuildPatch.txt @@ -0,0 +1,13 @@ +diff --git a/config/compiler/BUILD.gn b/config/compiler/BUILD.gn +index 48aa424f8..11ead4408 100644 +--- a/config/compiler/BUILD.gn ++++ b/config/compiler/BUILD.gn +@@ -600,7 +600,7 @@ config("compiler") { + cflags_cc += [ "-fno-trigraphs" ] + } + } else { +- cflags_cc += [ "-std=${standard_prefix}++17" ] ++ cflags_cc += [ "-std=${standard_prefix}++20" ] + } + } else if (is_win) { + cflags_c += [ "/std:c11" ] diff --git a/V8/V8Patch.txt b/V8/V8Patch.txt index b7aee64a7..fe58d102e 100644 --- a/V8/V8Patch.txt +++ b/V8/V8Patch.txt @@ -1,5 +1,5 @@ diff --git a/BUILD.gn b/BUILD.gn -index a28da024c76..83c1b5d21ad 100644 +index f8a0507c92c..e5d780da89e 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -8,7 +8,6 @@ import("//build/config/coverage/coverage.gni") @@ -9,22 +9,30 @@ index a28da024c76..83c1b5d21ad 100644 -import("//build/config/riscv.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build_overrides/build.gni") - -@@ -1255,7 +1254,7 @@ config("toolchain") { + import("//third_party/icu/config.gni") +@@ -1387,7 +1386,7 @@ config("toolchain") { visibility = [ "./*" ] defines = [] - cflags = [] -+ cflags = [ "-D_SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING" ] ++ cflags = [ "-D_SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING", "-DV8_TLS_USED_IN_LIBRARY", "-Wno-cast-function-type-mismatch", "-Wno-deprecated-this-capture" ] ldflags = [] if (v8_current_cpu == "arm") { diff --git a/gni/v8.gni b/gni/v8.gni -index 185de67a522..c2335989396 100644 +index 4efb4d6d865..3f1dc0ba6c3 100644 --- a/gni/v8.gni +++ b/gni/v8.gni -@@ -119,7 +119,7 @@ declare_args() { - cppgc_is_standalone = false +@@ -4,6 +4,7 @@ + + import("//build/config/chrome_build.gni") + import("//build/config/compiler/pgo/pgo.gni") ++import("//build/config/dcheck_always_on.gni") + import("//build/config/gclient_args.gni") + import("//build/config/ios/config.gni") + import("//build/config/ios/ios_sdk_overrides.gni") +@@ -135,7 +136,7 @@ declare_args() { + cppgc_enable_slow_api_checks = false # Enable object names in cppgc for profiling purposes. - cppgc_enable_object_names = is_chrome_for_testing @@ -46,10 +54,10 @@ index 6a34f432410..88a81ab4c40 100644 * The same as NewDefaultPlatform but disables the worker thread pool. * It must be used with the --single-threaded V8 flag. diff --git a/include/v8-initialization.h b/include/v8-initialization.h -index d3e35d6ec5f..56b3faaa791 100644 +index 46a21a02cbc..ccfe020f76c 100644 --- a/include/v8-initialization.h +++ b/include/v8-initialization.h -@@ -136,6 +136,7 @@ class V8_EXPORT V8 { +@@ -159,6 +159,7 @@ class V8_EXPORT V8 { * of the data file has to be provided. */ static bool InitializeICU(const char* icu_data_file = nullptr); @@ -57,21 +65,11 @@ index d3e35d6ec5f..56b3faaa791 100644 /** * Initialize the ICU library bundled with V8. The embedder should only -@@ -264,6 +265,9 @@ class V8_EXPORT V8 { - */ - static void GetSharedMemoryStatistics(SharedMemoryStatistics* statistics); - -+ static int EnterRwxHostScope(); -+ static void ExitRwxHostScope(int code_space_write_nesting_level); -+ - private: - V8(); - diff --git a/include/v8-template.h b/include/v8-template.h -index 674d4201d5d..a4538592531 100644 +index 93b94285726..7a65b26b61e 100644 --- a/include/v8-template.h +++ b/include/v8-template.h -@@ -935,6 +935,9 @@ class V8_EXPORT ObjectTemplate : public Template { +@@ -1017,6 +1017,9 @@ class V8_EXPORT ObjectTemplate : public Template { */ void SetImmutableProto(); @@ -82,10 +80,10 @@ index 674d4201d5d..a4538592531 100644 * Support for TC39 "dynamic code brand checks" proposal. * diff --git a/include/v8config.h b/include/v8config.h -index e649d8cce7d..3ca8f9fb448 100644 +index 9d58e85db29..ff3e75eed20 100644 --- a/include/v8config.h +++ b/include/v8config.h -@@ -550,7 +550,7 @@ path. Add it with -I to the command line +@@ -582,7 +582,7 @@ path. Add it with -I to the command line // Use like: // V8_NOINLINE V8_PRESERVE_MOST void UnlikelyMethod(); #if V8_HAS_ATTRIBUTE_PRESERVE_MOST @@ -95,24 +93,24 @@ index e649d8cce7d..3ca8f9fb448 100644 # define V8_PRESERVE_MOST /* NOT SUPPORTED */ #endif diff --git a/src/api/api-natives.cc b/src/api/api-natives.cc -index 0f1747a2a91..0e3e6d6343c 100644 +index 7ed64a2671c..92c1609805b 100644 --- a/src/api/api-natives.cc +++ b/src/api/api-natives.cc -@@ -451,6 +451,9 @@ MaybeHandle InstantiateObject(Isolate* isolate, +@@ -346,6 +346,9 @@ MaybeHandle InstantiateObject(Isolate* isolate, if (info->immutable_proto()) { - JSObject::SetImmutableProto(object); + JSObject::SetImmutableProto(isolate, object); } + else if (info->host_delegate()) { -+ JSObject::SetHostDelegate(object); ++ JSObject::SetHostDelegate(isolate, object); + } if (!is_prototype) { // Keep prototypes in slow-mode. Let them be lazily turned fast later on. // TODO(dcarney): is this necessary? diff --git a/src/api/api.cc b/src/api/api.cc -index 9ca94b045c2..4bce5309eb7 100644 +index c0ff2001df7..496ef07f76d 100644 --- a/src/api/api.cc +++ b/src/api/api.cc -@@ -1934,6 +1934,17 @@ void ObjectTemplate::SetImmutableProto() { +@@ -1911,6 +1911,17 @@ void ObjectTemplate::SetImmutableProto() { self->set_immutable_proto(true); } @@ -130,7 +128,7 @@ index 9ca94b045c2..4bce5309eb7 100644 bool ObjectTemplate::IsCodeLike() const { return Utils::OpenDirectHandle(this)->code_like(); } -@@ -6530,6 +6541,10 @@ bool v8::V8::InitializeICU(const char* icu_data_file) { +@@ -6742,6 +6753,10 @@ bool v8::V8::InitializeICU(const char* icu_data_file) { return i::InitializeICU(icu_data_file); } @@ -142,10 +140,10 @@ index 9ca94b045c2..4bce5309eb7 100644 const char* icu_data_file) { return i::InitializeICUDefaultLocation(exec_path, icu_data_file); diff --git a/src/base/build_config.h b/src/base/build_config.h -index f25bd3f9b57..98b040ac0f0 100644 +index 207f46b057d..e58513be2d1 100644 --- a/src/base/build_config.h +++ b/src/base/build_config.h -@@ -36,7 +36,7 @@ +@@ -44,7 +44,7 @@ #endif #if defined(V8_OS_LINUX) && defined(V8_HOST_ARCH_X64) @@ -155,7 +153,7 @@ index f25bd3f9b57..98b040ac0f0 100644 #define V8_HAS_PKU_JIT_WRITE_PROTECT 0 #endif diff --git a/src/base/platform/platform.h b/src/base/platform/platform.h -index 99be31da701..f38dfbd6997 100644 +index a7b57d9fc80..da849f2f796 100644 --- a/src/base/platform/platform.h +++ b/src/base/platform/platform.h @@ -53,6 +53,8 @@ @@ -167,25 +165,11 @@ index 99be31da701..f38dfbd6997 100644 #ifndef V8_NO_FAST_TLS #if V8_CC_MSVC && V8_HOST_ARCH_IA32 // __readfsdword is supposed to be declared in intrin.h but it is missing from -diff --git a/src/builtins/builtins-async-module.cc b/src/builtins/builtins-async-module.cc -index 72ad214dcfa..d0a81059cb5 100644 ---- a/src/builtins/builtins-async-module.cc -+++ b/src/builtins/builtins-async-module.cc -@@ -15,7 +15,8 @@ BUILTIN(CallAsyncModuleFulfilled) { - SourceTextModule::cast(isolate->context()->get( - SourceTextModule::ExecuteAsyncModuleContextSlots::kModule)), - isolate); -- if (SourceTextModule::AsyncModuleExecutionFulfilled(isolate, module) -+ Handle result(args.at(1)); -+ if (SourceTextModule::AsyncModuleExecutionFulfilled(isolate, module, result) - .IsNothing()) { - // The evaluation of async module can not throwing a JavaScript observable - // exception. diff --git a/src/codegen/code-stub-assembler.cc b/src/codegen/code-stub-assembler.cc -index cc80f7aacca..faefc8d367f 100644 +index 20c3bbe060f..a3ba312acd5 100644 --- a/src/codegen/code-stub-assembler.cc +++ b/src/codegen/code-stub-assembler.cc -@@ -2227,6 +2227,10 @@ TNode CodeStubAssembler::LoadMapBitField3(TNode map) { +@@ -2321,6 +2321,10 @@ TNode CodeStubAssembler::LoadMapBitField3(TNode map) { return LoadObjectField(map, Map::kBitField3Offset); } @@ -196,7 +180,7 @@ index cc80f7aacca..faefc8d367f 100644 TNode CodeStubAssembler::LoadMapInstanceType(TNode map) { return LoadObjectField(map, Map::kInstanceTypeOffset); } -@@ -15093,6 +15097,11 @@ TNode CodeStubAssembler::Typeof(TNode value) { +@@ -15912,6 +15916,11 @@ TNode CodeStubAssembler::Typeof( GotoIf(InstanceTypeEqual(instance_type, ODDBALL_TYPE), &if_oddball); @@ -209,10 +193,10 @@ index cc80f7aacca..faefc8d367f 100644 Word32And(LoadMapBitField(map), Int32Constant(Map::Bits1::IsCallableBit::kMask | diff --git a/src/codegen/code-stub-assembler.h b/src/codegen/code-stub-assembler.h -index 7d687744c10..dd15ab9cc6a 100644 +index 6281b6aa2a3..62392f6bb23 100644 --- a/src/codegen/code-stub-assembler.h +++ b/src/codegen/code-stub-assembler.h -@@ -1570,6 +1570,8 @@ class V8_EXPORT_PRIVATE CodeStubAssembler +@@ -1345,6 +1345,8 @@ class V8_EXPORT_PRIVATE CodeStubAssembler TNode LoadMapBitField2(TNode map); // Load bit field 3 of a map. TNode LoadMapBitField3(TNode map); @@ -221,218 +205,11 @@ index 7d687744c10..dd15ab9cc6a 100644 // Load the instance type of a map. TNode LoadMapInstanceType(TNode map); // Load the ElementsKind of a map. -diff --git a/src/common/code-memory-access-inl.h b/src/common/code-memory-access-inl.h -index e1ec30c166f..5ceb3f452bf 100644 ---- a/src/common/code-memory-access-inl.h -+++ b/src/common/code-memory-access-inl.h -@@ -212,28 +212,89 @@ void WritableFreeSpace::ClearTagged(size_t count) const { - count); - } - --#if V8_HAS_PTHREAD_JIT_WRITE_PROTECT -+#if V8_HAS_PTHREAD_JIT_WRITE_PROTECT || V8_HAS_PKU_JIT_WRITE_PROTECT - - // static --bool RwxMemoryWriteScope::IsSupported() { return true; } -+int RwxMemoryWriteScope::EnterHostScope() { -+ if (v8_flags.jitless || !IsSupported()) return 0; -+ int code_space_write_nesting_level = code_space_write_nesting_level_; -+ DCHECK_GE(code_space_write_nesting_level, 0); -+ DCHECK_GE(code_space_host_nesting_level_, 0); -+ if (code_space_host_nesting_level_ == 0 && code_space_write_nesting_level > 0) { -+ code_space_write_nesting_level_ = 0; -+ SetExecutableInternal(); -+ } -+ code_space_host_nesting_level_++; -+ return code_space_write_nesting_level; -+} -+ -+// static -+void RwxMemoryWriteScope::ExitHostScope(int code_space_write_nesting_level) { -+ if (v8_flags.jitless || !IsSupported()) return; -+ DCHECK_GE(code_space_write_nesting_level, 0); -+ DCHECK_GT(code_space_host_nesting_level_, 0); -+ code_space_host_nesting_level_--; -+ if (code_space_host_nesting_level_ == 0 && code_space_write_nesting_level > 0) { -+ code_space_write_nesting_level_ = code_space_write_nesting_level; -+ SetWritableInternal(); -+ } -+} - - // static - void RwxMemoryWriteScope::SetWritable() { -+ if (!IsSupported()) return; -+ DCHECK_GE(code_space_write_nesting_level_, 0); -+ DCHECK_EQ(code_space_host_nesting_level_, 0); - if (code_space_write_nesting_level_ == 0) { -- base::SetJitWriteProtected(0); -+ SetWritableInternal(); - } - code_space_write_nesting_level_++; - } - - // static - void RwxMemoryWriteScope::SetExecutable() { -+ if (!IsSupported()) return; -+ DCHECK_GT(code_space_write_nesting_level_, 0); -+ DCHECK_EQ(code_space_host_nesting_level_, 0); - code_space_write_nesting_level_--; - if (code_space_write_nesting_level_ == 0) { -- base::SetJitWriteProtected(1); -+ SetExecutableInternal(); - } - } - -+#else // !V8_HAS_PTHREAD_JIT_WRITE_PROTECT && !V8_HAS_PKU_JIT_WRITE_PROTECT -+ -+// static -+int RwxMemoryWriteScope::EnterHostScope() { return 0; } -+ -+// static -+void RwxMemoryWriteScope::ExitHostScope(int /*code_space_write_nesting_level*/) {} -+ -+// static -+void RwxMemoryWriteScope::SetWritable() {} -+ -+// static -+void RwxMemoryWriteScope::SetExecutable() {} -+ -+#endif // V8_HAS_PTHREAD_JIT_WRITE_PROTECT || V8_HAS_PKU_JIT_WRITE_PROTECT -+ -+#if V8_HAS_PTHREAD_JIT_WRITE_PROTECT -+ -+// static -+bool RwxMemoryWriteScope::IsSupported() { return true; } -+ -+// static -+void RwxMemoryWriteScope::SetWritableInternal() { -+ base::SetJitWriteProtected(0); -+} -+ -+// static -+void RwxMemoryWriteScope::SetExecutableInternal() { -+ base::SetJitWriteProtected(1); -+} -+ - #elif V8_HAS_PKU_JIT_WRITE_PROTECT -+ - // static - bool RwxMemoryWriteScope::IsSupported() { - static_assert(base::MemoryProtectionKey::kNoMemoryProtectionKey == -1); -@@ -245,31 +306,23 @@ bool RwxMemoryWriteScope::IsSupported() { - } - - // static --void RwxMemoryWriteScope::SetWritable() { -+void RwxMemoryWriteScope::SetWritableInternal() { - DCHECK(ThreadIsolation::initialized()); -- if (!IsSupported()) return; -- if (code_space_write_nesting_level_ == 0) { - DCHECK_NE( - base::MemoryProtectionKey::GetKeyPermission(ThreadIsolation::pkey()), - base::MemoryProtectionKey::kNoRestrictions); - base::MemoryProtectionKey::SetPermissionsForKey( - ThreadIsolation::pkey(), base::MemoryProtectionKey::kNoRestrictions); -- } -- code_space_write_nesting_level_++; - } - - // static --void RwxMemoryWriteScope::SetExecutable() { -+void RwxMemoryWriteScope::SetExecutableInternal() { - DCHECK(ThreadIsolation::initialized()); -- if (!IsSupported()) return; -- code_space_write_nesting_level_--; -- if (code_space_write_nesting_level_ == 0) { - DCHECK_EQ( - base::MemoryProtectionKey::GetKeyPermission(ThreadIsolation::pkey()), - base::MemoryProtectionKey::kNoRestrictions); - base::MemoryProtectionKey::SetPermissionsForKey( - ThreadIsolation::pkey(), base::MemoryProtectionKey::kDisableWrite); -- } - } - - #else // !V8_HAS_PTHREAD_JIT_WRITE_PROTECT && !V8_TRY_USE_PKU_JIT_WRITE_PROTECT -@@ -278,10 +331,10 @@ void RwxMemoryWriteScope::SetExecutable() { - bool RwxMemoryWriteScope::IsSupported() { return false; } - - // static --void RwxMemoryWriteScope::SetWritable() {} -+void RwxMemoryWriteScope::SetWritableInternal() {} - - // static --void RwxMemoryWriteScope::SetExecutable() {} -+void RwxMemoryWriteScope::SetExecutableInternal() {} - - #endif // V8_HAS_PTHREAD_JIT_WRITE_PROTECT - -diff --git a/src/common/code-memory-access.cc b/src/common/code-memory-access.cc -index 94328a128b8..45317ac0461 100644 ---- a/src/common/code-memory-access.cc -+++ b/src/common/code-memory-access.cc -@@ -2,16 +2,29 @@ - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. - -+#include "include/v8-initialization.h" - #include "src/common/code-memory-access-inl.h" - #include "src/utils/allocation.h" - - namespace v8 { -+ -+// static -+int V8::EnterRwxHostScope() { -+ return i::RwxMemoryWriteScope::EnterHostScope(); -+} -+ -+// static -+void V8::ExitRwxHostScope(int code_space_write_nesting_level) { -+ i::RwxMemoryWriteScope::ExitHostScope(code_space_write_nesting_level); -+} -+ - namespace internal { - - ThreadIsolation::TrustedData ThreadIsolation::trusted_data_; - - #if V8_HAS_PTHREAD_JIT_WRITE_PROTECT || V8_HAS_PKU_JIT_WRITE_PROTECT - thread_local int RwxMemoryWriteScope::code_space_write_nesting_level_ = 0; -+thread_local int RwxMemoryWriteScope::code_space_host_nesting_level_ = 0; - #endif // V8_HAS_PTHREAD_JIT_WRITE_PROTECT || V8_HAS_PKU_JIT_WRITE_PROTECT - - #if V8_HAS_PKU_JIT_WRITE_PROTECT -diff --git a/src/common/code-memory-access.h b/src/common/code-memory-access.h -index e0d317b07fe..c77411bcdd9 100644 ---- a/src/common/code-memory-access.h -+++ b/src/common/code-memory-access.h -@@ -114,6 +114,9 @@ class V8_NODISCARD RwxMemoryWriteScope { - static V8_EXPORT void SetDefaultPermissionsForSignalHandler(); - #endif // V8_HAS_PKU_JIT_WRITE_PROTECT - -+ V8_INLINE static int EnterHostScope(); -+ V8_INLINE static void ExitHostScope(int code_space_write_nesting_level); -+ - private: - friend class RwxMemoryWriteScopeForTesting; - friend class wasm::CodeSpaceWriteScope; -@@ -124,9 +127,13 @@ class V8_NODISCARD RwxMemoryWriteScope { - V8_INLINE static void SetWritable(); - V8_INLINE static void SetExecutable(); - -+ V8_INLINE static void SetWritableInternal(); -+ V8_INLINE static void SetExecutableInternal(); -+ - #if V8_HAS_PTHREAD_JIT_WRITE_PROTECT || V8_HAS_PKU_JIT_WRITE_PROTECT - // This counter is used for supporting scope reentrance. - V8_EXPORT_PRIVATE static thread_local int code_space_write_nesting_level_; -+ static thread_local int code_space_host_nesting_level_; - #endif // V8_HAS_PTHREAD_JIT_WRITE_PROTECT || V8_HAS_PKU_JIT_WRITE_PROTECT - }; - diff --git a/src/diagnostics/unwinding-info-win64.cc b/src/diagnostics/unwinding-info-win64.cc -index a71b866135b..4f1d26676c2 100644 +index 1312609e5b6..2fc14899e1c 100644 --- a/src/diagnostics/unwinding-info-win64.cc +++ b/src/diagnostics/unwinding-info-win64.cc -@@ -462,6 +462,14 @@ void InitUnwindingRecord(Record* record, size_t code_size_in_bytes) { +@@ -464,6 +464,14 @@ void InitUnwindingRecord(Record* record, size_t code_size_in_bytes) { namespace { V8_DECLARE_ONCE(load_ntdll_unwinding_functions_once); @@ -447,7 +224,7 @@ index a71b866135b..4f1d26676c2 100644 static decltype( &::RtlAddGrowableFunctionTable) add_growable_function_table_func = nullptr; static decltype( -@@ -469,6 +477,19 @@ static decltype( +@@ -471,6 +479,19 @@ static decltype( nullptr; void LoadNtdllUnwindingFunctionsOnce() { @@ -467,7 +244,7 @@ index a71b866135b..4f1d26676c2 100644 // Load functions from the ntdll.dll module. HMODULE ntdll_module = LoadLibraryEx(L"ntdll.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32); -@@ -491,6 +512,21 @@ void LoadNtdllUnwindingFunctions() { +@@ -493,6 +514,21 @@ void LoadNtdllUnwindingFunctions() { &LoadNtdllUnwindingFunctionsOnce); } @@ -489,7 +266,7 @@ index a71b866135b..4f1d26676c2 100644 bool AddGrowableFunctionTable(PVOID* DynamicTable, PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD MaximumEntryCount, ULONG_PTR RangeBase, -@@ -542,7 +578,7 @@ void RegisterNonABICompliantCodeRange(void* start, size_t size_in_bytes) { +@@ -544,7 +580,7 @@ void RegisterNonABICompliantCodeRange(void* start, size_t size_in_bytes) { ExceptionHandlerRecord* record = new (start) ExceptionHandlerRecord(); InitUnwindingRecord(record, size_in_bytes); @@ -498,7 +275,7 @@ index a71b866135b..4f1d26676c2 100644 kDefaultRuntimeFunctionCount, reinterpret_cast(start))); -@@ -580,7 +616,7 @@ void UnregisterNonABICompliantCodeRange(void* start) { +@@ -582,7 +618,7 @@ void UnregisterNonABICompliantCodeRange(void* start) { if (unhandled_exception_callback_g) { ExceptionHandlerRecord* record = reinterpret_cast(start); @@ -508,10 +285,10 @@ index a71b866135b..4f1d26676c2 100644 // Unprotect reserved page. DWORD old_protect; diff --git a/src/execution/isolate-inl.h b/src/execution/isolate-inl.h -index 256db29d140..3880ea12bb9 100644 +index 04eaa77fa56..15cd2cab05e 100644 --- a/src/execution/isolate-inl.h +++ b/src/execution/isolate-inl.h -@@ -35,7 +35,6 @@ V8_INLINE Isolate* Isolate::TryGetCurrent() { return g_current_isolate_; } +@@ -32,7 +32,6 @@ Isolate::CurrentPerIsolateThreadData() { // static V8_INLINE Isolate* Isolate::Current() { Isolate* isolate = TryGetCurrent(); @@ -520,22 +297,20 @@ index 256db29d140..3880ea12bb9 100644 } diff --git a/src/execution/stack-guard.cc b/src/execution/stack-guard.cc -index efcaf8cd10b..0e7cfbb704d 100644 +index 4bfd56d287b..7725d3cc4ba 100644 --- a/src/execution/stack-guard.cc +++ b/src/execution/stack-guard.cc -@@ -235,8 +235,10 @@ void StackGuard::FreeThreadResources() { - void StackGuard::ThreadLocal::Initialize(Isolate* isolate, - const ExecutionAccess& lock) { +@@ -240,6 +240,9 @@ void StackGuard::ThreadLocal::Initialize(Isolate* isolate, const uintptr_t kLimitSize = v8_flags.stack_size * KB; -- DCHECK_GT(GetCurrentStackPosition(), kLimitSize); + DCHECK_GT(GetCurrentStackPosition(), kLimitSize); uintptr_t limit = GetCurrentStackPosition() - kLimitSize; + if (GetCurrentStackPosition() < kLimitSize) { + limit = 0; + } real_jslimit_ = SimulatorStack::JsLimitFromCLimit(isolate, limit); set_jslimit(SimulatorStack::JsLimitFromCLimit(isolate, limit)); - real_climit_ = limit; -@@ -383,6 +385,8 @@ Tagged StackGuard::HandleInterrupts(InterruptLevel level) { + #ifdef USE_SIMULATOR +@@ -388,6 +391,8 @@ Tagged StackGuard::HandleInterrupts(InterruptLevel level) { isolate_->counters()->stack_interrupts()->Increment(); @@ -545,10 +320,10 @@ index efcaf8cd10b..0e7cfbb704d 100644 } diff --git a/src/heap/factory.cc b/src/heap/factory.cc -index 82ee405ecb5..9a2c4f39170 100644 +index 22f4131b3a8..6c044f258d7 100644 --- a/src/heap/factory.cc +++ b/src/heap/factory.cc -@@ -2129,6 +2129,7 @@ Tagged Factory::InitializeMap(Tagged map, InstanceType type, +@@ -2317,6 +2317,7 @@ Tagged Factory::InitializeMap(Tagged map, InstanceType type, Map::Bits3::ConstructionCounterBits::encode(Map::kNoSlackTracking) | Map::Bits3::IsExtensibleBit::encode(true); map->set_bit_field3(bit_field3); @@ -557,10 +332,10 @@ index 82ee405ecb5..9a2c4f39170 100644 map->init_prototype_and_constructor_or_back_pointer(roots); map->set_instance_size(instance_size); diff --git a/src/heap/setup-heap-internal.cc b/src/heap/setup-heap-internal.cc -index 243d96b8618..7c1a72627e9 100644 +index 5f7bce594f9..5b1d79bc2ca 100644 --- a/src/heap/setup-heap-internal.cc +++ b/src/heap/setup-heap-internal.cc -@@ -296,6 +296,7 @@ void InitializePartialMap(Tagged map, Tagged meta_map, +@@ -295,6 +295,7 @@ void InitializePartialMap(Isolate* isolate, Tagged map, Map::Bits3::OwnsDescriptorsBit::encode(true) | Map::Bits3::ConstructionCounterBits::encode(Map::kNoSlackTracking); map->set_bit_field3(bit_field3); @@ -629,10 +404,10 @@ index e127e75f10f..b0e4bd2d68e 100644 // Like above, but using the default icudt[lb].dat location if icu_data_file is // not specified. diff --git a/src/init/v8.cc b/src/init/v8.cc -index 15540a75e7e..74ab11151a0 100644 +index 7444ab59bdb..75ef7ddf3a0 100644 --- a/src/init/v8.cc +++ b/src/init/v8.cc -@@ -98,7 +98,6 @@ V8_DECLARE_ONCE(init_snapshot_once); +@@ -102,7 +102,6 @@ V8_DECLARE_ONCE(init_snapshot_once); // static void V8::InitializePlatform(v8::Platform* platform) { AdvanceStartupState(V8StartupState::kPlatformInitializing); @@ -641,10 +416,10 @@ index 15540a75e7e..74ab11151a0 100644 platform_ = platform; v8::base::SetPrintStackTrace(platform_->GetStackTracePrinter()); diff --git a/src/interpreter/bytecode-generator.cc b/src/interpreter/bytecode-generator.cc -index da222bb8c3c..4950acfe588 100644 +index f44c172d0a5..1ac05072687 100644 --- a/src/interpreter/bytecode-generator.cc +++ b/src/interpreter/bytecode-generator.cc -@@ -6848,10 +6848,13 @@ static bool IsCharU(const AstRawString* str) { +@@ -7383,10 +7383,13 @@ static bool IsCharU(const AstRawString* str) { return str->length() == 1 && str->FirstCharacter() == 'u'; } @@ -659,7 +434,7 @@ index da222bb8c3c..4950acfe588 100644 Literal* right_lit = expr->right()->AsLiteral(); diff --git a/src/libplatform/default-platform.cc b/src/libplatform/default-platform.cc -index 2a8f06a9c09..5476b4c9d3b 100644 +index 82853866cce..885cfe4563a 100644 --- a/src/libplatform/default-platform.cc +++ b/src/libplatform/default-platform.cc @@ -57,6 +57,10 @@ std::unique_ptr NewDefaultPlatform( @@ -673,42 +448,57 @@ index 2a8f06a9c09..5476b4c9d3b 100644 std::unique_ptr NewSingleThreadedDefaultPlatform( IdleTaskSupport idle_task_support, InProcessStackDumping in_process_stack_dumping, +diff --git a/src/objects/bigint.cc b/src/objects/bigint.cc +index cb7e1cdb406..642ac254ae5 100644 +--- a/src/objects/bigint.cc ++++ b/src/objects/bigint.cc +@@ -1366,7 +1366,7 @@ MaybeHandle BigInt::FromWords64(Isolate* isolate, int sign_bit, + static_assert(kDigitBits == 64 || kDigitBits == 32); + uint32_t length = (64 / kDigitBits) * words64_count; + DCHECK_GT(length, 0); +- if (kDigitBits == 32 && words[words64_count - 1] <= (1ULL << 32)) length--; ++ if (kDigitBits == 32 && words[words64_count - 1] < (1ULL << 32)) length--; + + Handle result; + if (!MutableBigInt::New(isolate, length).ToHandle(&result)) return {}; diff --git a/src/objects/js-objects.cc b/src/objects/js-objects.cc -index af21b605e3d..62e84834304 100644 +index 0e5c2ed4b65..d069bcc4864 100644 --- a/src/objects/js-objects.cc +++ b/src/objects/js-objects.cc -@@ -5207,6 +5207,13 @@ void JSObject::SetImmutableProto(Handle object) { - object->set_map(*new_map, kReleaseStore); +@@ -5324,6 +5324,14 @@ void JSObject::SetImmutableProto(Isolate* isolate, + object->set_map(isolate, *new_map, kReleaseStore); } -+void JSObject::SetHostDelegate(Handle object) { -+ Handle map(object->map(), object->GetIsolate()); ++void JSObject::SetHostDelegate(Isolate* isolate, ++ DirectHandle object) { ++ DirectHandle map(object->map(), isolate); + if (map->is_host_delegate()) return; -+ Handle new_map = Map::TransitionToHostDelegate(object->GetIsolate(), map); -+ object->set_map(*new_map, kReleaseStore); ++ DirectHandle new_map = Map::TransitionToHostDelegate(isolate, map); ++ object->set_map(isolate, *new_map, kReleaseStore); +} + - void JSObject::EnsureCanContainElements(Handle object, + void JSObject::EnsureCanContainElements(DirectHandle object, JavaScriptArguments* args, uint32_t arg_count, diff --git a/src/objects/js-objects.h b/src/objects/js-objects.h -index 9fb0613af3a..2340c6ab309 100644 +index df09d807219..84351759afe 100644 --- a/src/objects/js-objects.h +++ b/src/objects/js-objects.h -@@ -774,6 +774,8 @@ class JSObject : public TorqueGeneratedJSObject { - // Never called from JavaScript - static void SetImmutableProto(Handle object); +@@ -818,6 +818,9 @@ class JSObject : public TorqueGeneratedJSObject { + static void SetImmutableProto(Isolate* isolate, + DirectHandle object); -+ static void SetHostDelegate(Handle object); ++ static void SetHostDelegate(Isolate* isolate, ++ DirectHandle object); + // Initializes the body starting at |start_offset|. It is responsibility of // the caller to initialize object header. Fill the pre-allocated fields with // undefined_value and the rest with filler_map. diff --git a/src/objects/map-inl.h b/src/objects/map-inl.h -index a28034912de..3bba62d3740 100644 +index 0ae0d5f1119..9d358b9be2f 100644 --- a/src/objects/map-inl.h +++ b/src/objects/map-inl.h -@@ -128,6 +128,9 @@ BIT_FIELD_ACCESSORS(Map, bit_field3, may_have_interesting_properties, +@@ -134,6 +134,9 @@ BIT_FIELD_ACCESSORS(Map, bit_field3, may_have_interesting_properties, BIT_FIELD_ACCESSORS(Map, relaxed_bit_field3, construction_counter, Map::Bits3::ConstructionCounterBits) @@ -719,35 +509,36 @@ index a28034912de..3bba62d3740 100644 DCHECK(has_named_interceptor()); Tagged info = GetFunctionTemplateInfo(cage_base); diff --git a/src/objects/map.cc b/src/objects/map.cc -index 2c904d398b2..4fe7a01b664 100644 +index 81a3b16e853..43c7a8d3930 100644 --- a/src/objects/map.cc +++ b/src/objects/map.cc -@@ -1241,6 +1241,7 @@ Handle Map::RawCopy(Isolate* isolate, Handle src_handle, +@@ -1283,6 +1283,7 @@ Handle Map::RawCopy(Isolate* isolate, DirectHandle src_handle, } // Same as bit_field comment above. raw->set_bit_field3(new_bit_field3); + raw->set_host_bit_field(src->host_bit_field()); raw->clear_padding(); } - Handle prototype(src_handle->prototype(), isolate); -@@ -1367,6 +1368,12 @@ Handle Map::TransitionToImmutableProto(Isolate* isolate, Handle map) { + DirectHandle prototype(src_handle->prototype(), isolate); +@@ -1428,6 +1429,13 @@ Handle Map::TransitionToImmutableProto(Isolate* isolate, return new_map; } -+Handle Map::TransitionToHostDelegate(Isolate* isolate, Handle map) { ++Handle Map::TransitionToHostDelegate(Isolate* isolate, ++ DirectHandle map) { + Handle new_map = Map::Copy(isolate, map, "HostDelegate"); + new_map->set_is_host_delegate(true); + return new_map; +} + namespace { - void EnsureInitialMap(Isolate* isolate, Handle map) { + void EnsureInitialMap(Isolate* isolate, DirectHandle map) { #ifdef DEBUG diff --git a/src/objects/map.h b/src/objects/map.h -index 3ddb06d1f99..ebf2a4b3d2c 100644 +index f169d8772a8..707fb181f34 100644 --- a/src/objects/map.h +++ b/src/objects/map.h -@@ -338,6 +338,11 @@ class Map : public TorqueGeneratedMap { +@@ -349,6 +349,11 @@ class Map : public TorqueGeneratedMap { static_assert(kSlackTrackingCounterStart <= Bits3::ConstructionCounterBits::kMax); @@ -759,7 +550,7 @@ index 3ddb06d1f99..ebf2a4b3d2c 100644 // Inobject slack tracking is the way to reclaim unused inobject space. // // The instance size is initially determined by adding some slack to -@@ -705,6 +710,8 @@ class Map : public TorqueGeneratedMap { +@@ -729,6 +734,8 @@ class Map : public TorqueGeneratedMap { DECL_BOOLEAN_ACCESSORS(is_immutable_proto) @@ -768,17 +559,18 @@ index 3ddb06d1f99..ebf2a4b3d2c 100644 // This counter is used for in-object slack tracking. // The in-object slack tracking is considered enabled when the counter is // non zero. The counter only has a valid count for initial maps. For -@@ -885,6 +892,8 @@ class Map : public TorqueGeneratedMap { +@@ -926,6 +933,9 @@ class Map : public TorqueGeneratedMap { static Handle TransitionToImmutableProto(Isolate* isolate, - Handle map); + DirectHandle map); -+ static Handle TransitionToHostDelegate(Isolate* isolate, Handle map); ++ static Handle TransitionToHostDelegate(Isolate* isolate, ++ DirectHandle map); + static_assert(kInstanceTypeOffset == Internals::kMapInstanceTypeOffset); class BodyDescriptor; diff --git a/src/objects/map.tq b/src/objects/map.tq -index 590fac8d969..dcadae3285c 100644 +index e6982895020..ccc3e1ce90b 100644 --- a/src/objects/map.tq +++ b/src/objects/map.tq @@ -34,6 +34,10 @@ bitfield struct MapBitFields3 extends uint32 { @@ -804,16 +596,16 @@ index 590fac8d969..dcadae3285c 100644 prototype: JSReceiver|Null; constructor_or_back_pointer_or_native_context: Object; diff --git a/src/objects/objects.cc b/src/objects/objects.cc -index 99446acd540..81c1e64a4e4 100644 +index c2c5886e578..0d7303040cc 100644 --- a/src/objects/objects.cc +++ b/src/objects/objects.cc -@@ -910,7 +910,12 @@ Handle Object::TypeOf(Isolate* isolate, Handle object) { +@@ -1007,7 +1007,12 @@ Handle Object::TypeOf(Isolate* isolate, DirectHandle object) { if (IsString(*object)) return isolate->factory()->string_string(); if (IsSymbol(*object)) return isolate->factory()->symbol_string(); if (IsBigInt(*object)) return isolate->factory()->bigint_string(); - if (IsCallable(*object)) return isolate->factory()->function_string(); + if (IsJSObject(*object)) { -+ Handle obj = Handle::cast(object); ++ DirectHandle obj = Cast(object); + if (obj->HasNamedInterceptor()) { + return obj->map()->is_host_delegate() ? isolate->factory()->function_string() : isolate->factory()->object_string(); + } @@ -821,82 +613,11 @@ index 99446acd540..81c1e64a4e4 100644 return isolate->factory()->object_string(); } -diff --git a/src/objects/source-text-module.cc b/src/objects/source-text-module.cc -index 13890419a01..d25c6cd86b3 100644 ---- a/src/objects/source-text-module.cc -+++ b/src/objects/source-text-module.cc -@@ -731,7 +731,8 @@ MaybeHandle SourceTextModule::Evaluate( - try_catch.SetVerbose(false); - try_catch.SetCaptureMessage(false); - // TODO(verwaest): Return a bool from InnerModuleEvaluation instead? -- if (InnerModuleEvaluation(isolate, module, &stack, &dfs_index).is_null()) { -+ Handle unused_result; -+ if (!InnerModuleEvaluation(isolate, module, &stack, &dfs_index).ToHandle(&unused_result)) { - if (!module->MaybeHandleEvaluationException(isolate, &stack)) return {}; - CHECK(try_catch.HasCaught()); - // d. Perform ! Call(capability.[[Reject]], undefined, -@@ -746,7 +747,7 @@ MaybeHandle SourceTextModule::Evaluate( - if (!module->IsAsyncEvaluating()) { - // i. Perform ! Call(capability.[[Resolve]], undefined, - // «undefined»). -- JSPromise::Resolve(capability, isolate->factory()->undefined_value()) -+ JSPromise::Resolve(capability, unused_result) - .ToHandleChecked(); - } - -@@ -759,7 +760,7 @@ MaybeHandle SourceTextModule::Evaluate( - } - - Maybe SourceTextModule::AsyncModuleExecutionFulfilled( -- Isolate* isolate, Handle module) { -+ Isolate* isolate, Handle module, Handle result) { - // 1. If module.[[Status]] is evaluated, then - if (module->status() == kErrored) { - // a. Assert: module.[[EvaluationError]] is not empty. -@@ -783,7 +784,7 @@ Maybe SourceTextModule::AsyncModuleExecutionFulfilled( - // «undefined»). - Handle capability( - JSPromise::cast(module->top_level_capability()), isolate); -- JSPromise::Resolve(capability, isolate->factory()->undefined_value()) -+ JSPromise::Resolve(capability, result) - .ToHandleChecked(); - } - -@@ -848,7 +849,7 @@ Maybe SourceTextModule::AsyncModuleExecutionFulfilled( - // undefined, «undefined»). - Handle capability( - JSPromise::cast(m->top_level_capability()), isolate); -- JSPromise::Resolve(capability, isolate->factory()->undefined_value()) -+ JSPromise::Resolve(capability, unused_result) - .ToHandleChecked(); - } - } -@@ -1186,7 +1187,6 @@ MaybeHandle SourceTextModule::InnerModuleEvaluation( - } else { - // 15. Otherwise, perform ? module.ExecuteModule(). - MaybeHandle exception; -- Handle result; - if (!ExecuteModule(isolate, module, &exception).ToHandle(&result)) { - if (!isolate->is_execution_terminating()) { - isolate->Throw(*exception.ToHandleChecked()); -diff --git a/src/objects/source-text-module.h b/src/objects/source-text-module.h -index 2a3249bf1b3..0e781fbe939 100644 ---- a/src/objects/source-text-module.h -+++ b/src/objects/source-text-module.h -@@ -58,7 +58,7 @@ class SourceTextModule - // with async SourceTextModules. Return Nothing if the execution is - // terminated. - static Maybe AsyncModuleExecutionFulfilled( -- Isolate* isolate, Handle module); -+ Isolate* isolate, Handle module, Handle result); - static void AsyncModuleExecutionRejected(Isolate* isolate, - Handle module, - Handle exception); diff --git a/src/objects/templates-inl.h b/src/objects/templates-inl.h -index 7bf87e10b82..e6a2457218c 100644 +index 062e5077625..e24a229e30e 100644 --- a/src/objects/templates-inl.h +++ b/src/objects/templates-inl.h -@@ -186,6 +186,14 @@ void ObjectTemplateInfo::set_code_like(bool is_code_like) { +@@ -277,6 +277,14 @@ void ObjectTemplateInfo::set_code_like(bool is_code_like) { return set_data(IsCodeKindBit::update(data(), is_code_like)); } @@ -912,10 +633,10 @@ index 7bf87e10b82..e6a2457218c 100644 return IsTemplateFor(object->map()); } diff --git a/src/objects/templates.h b/src/objects/templates.h -index 7eb35de4caf..be9850bf36e 100644 +index 7048661ce5e..4898cd9137f 100644 --- a/src/objects/templates.h +++ b/src/objects/templates.h -@@ -211,6 +211,7 @@ class ObjectTemplateInfo +@@ -290,6 +290,7 @@ class ObjectTemplateInfo DECL_INT_ACCESSORS(embedder_field_count) DECL_BOOLEAN_ACCESSORS(immutable_proto) DECL_BOOLEAN_ACCESSORS(code_like) @@ -924,10 +645,10 @@ index 7eb35de4caf..be9850bf36e 100644 // Starting from given object template's constructor walk up the inheritance // chain till a function template that has an instance template is found. diff --git a/src/objects/templates.tq b/src/objects/templates.tq -index e8a6c9cf209..786e41527be 100644 +index 7ebc6c58a50..7dd0377f52a 100644 --- a/src/objects/templates.tq +++ b/src/objects/templates.tq -@@ -71,7 +71,8 @@ extern class FunctionTemplateInfo extends TemplateInfo { +@@ -98,7 +98,8 @@ extern class FunctionTemplateInfo extends TemplateInfo { bitfield struct ObjectTemplateInfoFlags extends uint31 { is_immutable_prototype: bool: 1 bit; is_code_kind: bool: 1 bit; @@ -936,4 +657,4 @@ index e8a6c9cf209..786e41527be 100644 + embedder_field_count: int32: 27 bit; } - extern class ObjectTemplateInfo extends TemplateInfo { + @generateUniqueMap diff --git a/V8Update.cmd b/V8Update.cmd index c071b896a..33183da9c 100644 --- a/V8Update.cmd +++ b/V8Update.cmd @@ -1,9 +1,9 @@ @echo off setlocal -set v8testedrev=12.3.219.12 +set v8testedrev=13.3.415.23 set v8testedcommit= -set v8cherrypicks=28a7e2d45fd620fa68fb0678a7246fc8e426d1cc +set v8cherrypicks= if not "%v8testedcommit%"=="" goto ProcessArgs set v8testedcommit=%v8testedrev% @@ -226,7 +226,9 @@ setlocal call "%VSINSTALLDIR%\VC\Auxiliary\Build\vcvarsall" x64_x86 >nul if errorlevel 1 goto Build32BitError echo Building V8 (x86) ... -call gn gen out\Win32\%mode% --args="fatal_linker_warnings=false is_component_build=false is_debug=%isdebug% target_cpu=\"x86\" use_custom_libcxx=false use_thin_lto=false v8_embedder_string=\"-ClearScript\" v8_enable_pointer_compression=false v8_enable_31bit_smis_on_64bit_arch=false v8_monolithic=true v8_target_cpu=\"x86\" v8_use_external_startup_data=false" >gn-Win32-%mode%.log +call gn gen out\Win32\%mode% --args="fatal_linker_warnings=false is_cfi=false is_component_build=false is_debug=%isdebug% target_cpu=\"x86\" use_custom_libcxx=false use_thin_lto=false v8_embedder_string=\"-ClearScript\" v8_enable_fuzztest=false v8_enable_pointer_compression=false v8_enable_31bit_smis_on_64bit_arch=false v8_monolithic=true v8_target_cpu=\"x86\" v8_use_external_startup_data=false" >gn-Win32-%mode%.log 2>&1 +if errorlevel 1 goto Build32BitError +call gn args out\Win32\%mode% --list >out\Win32\%mode%\allArgs.txt if errorlevel 1 goto Build32BitError call ninja -C out\Win32\%mode% obj\v8_monolith.lib >build-Win32-%mode%.log if errorlevel 1 goto Build32BitError @@ -244,7 +246,9 @@ setlocal call "%VSINSTALLDIR%\VC\Auxiliary\Build\vcvarsall" x64 >nul if errorlevel 1 goto Build64BitError echo Building V8 (x64) ... -call gn gen out\x64\%mode% --args="fatal_linker_warnings=false is_component_build=false is_debug=%isdebug% target_cpu=\"x64\" use_custom_libcxx=false use_thin_lto=false v8_embedder_string=\"-ClearScript\" v8_enable_pointer_compression=false v8_enable_31bit_smis_on_64bit_arch=false v8_monolithic=true v8_target_cpu=\"x64\" v8_use_external_startup_data=false" >gn-x64-%mode%.log +call gn gen out\x64\%mode% --args="fatal_linker_warnings=false is_cfi=false is_component_build=false is_debug=%isdebug% target_cpu=\"x64\" use_custom_libcxx=false use_thin_lto=false v8_embedder_string=\"-ClearScript\" v8_enable_fuzztest=false v8_enable_pointer_compression=false v8_enable_31bit_smis_on_64bit_arch=false v8_monolithic=true v8_target_cpu=\"x64\" v8_use_external_startup_data=false" >gn-x64-%mode%.log 2>&1 +if errorlevel 1 goto Build64BitError +call gn args out\x64\%mode% --list >out\x64\%mode%\allArgs.txt if errorlevel 1 goto Build64BitError call ninja -C out\x64\%mode% obj\v8_monolith.lib >build-x64-%mode%.log if errorlevel 1 goto Build64BitError @@ -262,7 +266,9 @@ setlocal call "%VSINSTALLDIR%\VC\Auxiliary\Build\vcvarsall" x64_arm64 >nul if errorlevel 1 goto BuildArm64BitError echo Building V8 (arm64) ... -call gn gen out\arm64\%mode% --args="fatal_linker_warnings=false is_component_build=false is_debug=%isdebug% target_cpu=\"arm64\" use_custom_libcxx=false use_thin_lto=false v8_embedder_string=\"-ClearScript\" v8_enable_pointer_compression=false v8_enable_31bit_smis_on_64bit_arch=false v8_monolithic=true v8_target_cpu=\"arm64\" v8_use_external_startup_data=false" >gn-arm64-%mode%.log +call gn gen out\arm64\%mode% --args="fatal_linker_warnings=false is_cfi=false is_component_build=false is_debug=%isdebug% target_cpu=\"arm64\" use_custom_libcxx=false use_thin_lto=false v8_embedder_string=\"-ClearScript\" v8_enable_fuzztest=false v8_enable_pointer_compression=false v8_enable_31bit_smis_on_64bit_arch=false v8_monolithic=true v8_target_cpu=\"arm64\" v8_use_external_startup_data=false" >gn-arm64-%mode%.log 2>&1 +if errorlevel 1 goto BuildArm64BitError +call gn args out\arm64\%mode% --list >out\arm64\%mode%\allArgs.txt if errorlevel 1 goto BuildArm64BitError call ninja -C out\arm64\%mode% obj\v8_monolith.lib >build-arm64-%mode%.log if errorlevel 1 goto BuildArm64BitError diff --git a/Version.tt b/Version.tt index d85570936..06f264ffc 100644 --- a/Version.tt +++ b/Version.tt @@ -1,5 +1,5 @@ <# - var version = new Version(7, 4, 5); + var version = new Version(7, 5, 0); var versionSuffix = string.Empty; new Random(versionSuffix.Length); // suppress "versionSuffix not used" warning #> diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 45d982510..2f9eb805d 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,29 +1,35 @@ GEM remote: https://rubygems.org/ specs: - activesupport (7.1.3.2) + activesupport (7.1.5.1) base64 + benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) mutex_m + securerandom (>= 0.3) tzinfo (~> 2.0) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) base64 (0.2.0) - bigdecimal (3.1.7) + benchmark (0.4.0) + bigdecimal (3.1.9) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.12.2) colorator (1.1.0) - commonmarker (0.23.10) - concurrent-ruby (1.2.3) - connection_pool (2.4.1) - dnsruby (1.71.0) + commonmarker (0.23.11) + concurrent-ruby (1.3.5) + connection_pool (2.5.0) + dnsruby (1.72.4) + base64 (~> 0.2.0) + logger (~> 1.6.5) simpleidn (~> 0.2.1) drb (2.2.1) em-websocket (0.5.3) @@ -32,13 +38,13 @@ GEM ethon (0.16.0) ffi (>= 1.15.0) eventmachine (1.2.7) - execjs (2.9.1) + execjs (2.10.0) faraday (2.8.1) base64 faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) - ffi (1.16.3) + ffi (1.17.1) forwardable-extended (2.6.0) gemoji (4.1.0) github-pages (231) @@ -96,7 +102,7 @@ GEM activesupport (>= 2) nokogiri (>= 1.4) http_parser.rb (0.8.0) - i18n (1.14.4) + i18n (1.14.7) concurrent-ruby (~> 1.0) jekyll (3.9.5) addressable (~> 2.4) @@ -214,29 +220,30 @@ GEM listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) + logger (1.6.6) mercenary (0.3.6) minima (2.5.1) jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) - minitest (5.22.3) - mutex_m (0.2.0) - nokogiri (1.15.6-x86_64-linux) + minitest (5.25.4) + mutex_m (0.3.0) + nokogiri (1.18.8-x86_64-linux-gnu) racc (~> 1.4) octokit (4.25.1) faraday (>= 1, < 3) sawyer (~> 0.9) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (5.0.4) - racc (1.7.3) + public_suffix (5.1.1) + racc (1.8.1) rb-fsevent (0.11.2) - rb-inotify (0.10.1) + rb-inotify (0.11.1) ffi (~> 1.0) - rexml (3.2.6) + rexml (3.4.1) rouge (3.30.0) ruby2_keywords (0.0.5) - rubyzip (2.3.2) + rubyzip (2.4.1) safe_yaml (1.0.5) sass (3.7.4) sass-listen (~> 4.0.0) @@ -246,17 +253,14 @@ GEM sawyer (0.9.2) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) - simpleidn (0.2.1) - unf (~> 0.1.4) + securerandom (0.3.2) + simpleidn (0.2.3) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) typhoeus (1.4.1) ethon (>= 0.9.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.9.1) unicode-display_width (1.8.0) PLATFORMS diff --git a/docs/Reference/SearchHelp.aspx b/docs/Reference/SearchHelp.aspx index c37a5d84f..88fb664cb 100644 --- a/docs/Reference/SearchHelp.aspx +++ b/docs/Reference/SearchHelp.aspx @@ -5,8 +5,8 @@ // System : Sandcastle Help File Builder // File : SearchHelp.aspx // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 08/13/2022 -// Note : Copyright 2007-2022, Eric Woodruff, All rights reserved +// Updated : 08/02/2024 +// Note : Copyright 2007-2024, Eric Woodruff, All rights reserved // // This file contains the code used to search for keywords within the help topics using the full-text index // files created by the help file builder. @@ -119,7 +119,7 @@ private List ParseKeywords(string keywords) { checkWord = word.ToLower(CultureInfo.InvariantCulture); - if(checkWord.Length >= 2 && !Char.IsDigit(checkWord[0]) && !keywordList.Contains(checkWord)) + if(checkWord.Length >= 2 && !keywordList.Contains(checkWord)) keywordList.Add(checkWord); } diff --git a/docs/Reference/SearchHelp.inc.php b/docs/Reference/SearchHelp.inc.php index e5a3163a0..f2760fa97 100644 --- a/docs/Reference/SearchHelp.inc.php +++ b/docs/Reference/SearchHelp.inc.php @@ -29,8 +29,8 @@ function ParseKeywords($keywords) foreach($words as $word) { $checkWord = strtolower($word); - $first = substr($checkWord, 0, 1); - if(strlen($checkWord) >= 2 && !ctype_digit($first) && !in_array($checkWord, $keywordList)) + + if(strlen($checkWord) >= 2 && !in_array($checkWord, $keywordList)) { array_push($keywordList, $checkWord); } diff --git a/docs/Reference/fti/FTI_100.json b/docs/Reference/fti/FTI_100.json index 69546eda1..4c2a15b7d 100644 --- a/docs/Reference/fti/FTI_100.json +++ b/docs/Reference/fti/FTI_100.json @@ -1 +1 @@ -{"documentflags":[38010881,50593796,51118087],"documentname":[13631493,14548997,16187397,16908293,23068678,23789574,23920646,24641542,24969221,25362437,28966917,29949957,30146565,31391749,36569093,37879813],"dictionary":[8323074,9437189,12255236],"differ":[61145089],"dump":[12910593],"donotenablevtablepatching":[61669377],"describing":[37617665,53608449,55115777],"data":[327681,3080193,4980754,5111809,7208978,18415619,19857410,21692418,23658499,24444932,24969222,25362437,25493510,25559044,25821188,26017796,26083334,26411013,26542086,26607622,26935302,27066373,27525124,27983877,28049413,28311558,28377093,28573701,28704772,28966916,29294597,29491206,29556740,29949958,30343173,30736390,30998532,31391748,31981573,32178182,32571393,33095684,34013189,34799617,34930692,35192841,35848198,36372489,37879813,38666249,39059457,39321602,39714825,40632321,42074113,42205185,43909121,44761089,44957697,45088769,45744129,46071809,46268417,47775745,48496642,49283074,50528257,51838977,58195969,58261522,58327041,58392577,58654724,58851329,58982402,60096513,60555265,60620806,60686343,60817427,60882945,61407233,61538305,61603841],"documentcategory":[1835009,2031618,2359298,3735556,4587524,4980744,6029318,6291460,6356996,6488070,6553604,6815749,7208972,7274501,7405573,7536644,8716292,8978436,13762565,13893637,14680069,14745605,21102599,21233671,21823495,22085639,24444933,24772613,25493509,26083333,26411013,27394053,27525125,27721733,28311557,28377093,28573701,29556741,29753349,30670850,30736389,31981573,33030146,33095685,33882114,34668546,35586050,36372488,38010881,39714824,39780354,44498951,45023233,45547527,46661639,47448070,48037894,53870594,58195972,58261512,58327044,58392580,58523649,59899910,60096516,60817420,60882948,61407236,61538308,61603844],"discarded":[14548993,15466497,15532033,16908289,22216705,22806529,23920641,24641537,50593793],"deleteproperty":[2621442,2686978,2818050,3145730,3211266,3670018,4128770,4521986,5177346,14811141,15335429,23527430,24117254,35913730,35979266,58916866,59375618,59834370,60162050,60227586,60293122,60424194,60751874,61014018],"detailed":[44236801,45744129,46202881,48103425,48365569,48693249,58458113,58654721,58982401],"debugport":[25231365,26214405,27590661,27656197,28835845,29163525,29425669,29622277,29884421,30015493],"dimensions":[7602177],"defined":[2621441,2686977,2818049,3145729,3211265,3670017,3735553,4128769,4521985,4587521,4980737,5046273,5177345,5242881,6291457,6356993,6553601,7077889,7143425,7208961,7536641,8060929,8716289,8978433,13631489,17367041,20316161,23789569,24576001,24707073,28246017,30212097,36110337,36831233,40763393,43778049,45744129,54067201,58195969,58261505,58327041,58392577,58654721,58785793,58916865,59375617,59834369,60096513,60162049,60227585,60293121,60424193,60751873,60817409,60882945,61014017,61407233,61538305,61603841],"defines":[8257537,8912897,38010889,38535174,39321608,39976961,50593793,52428801,54198273,56950785,57147393,57802753,58458113,59047937,59179009,59441153,59572225,59637761,59834369,59965441,60030977,60424193,60620801,60686337,61079553,61145089,61210625,61276161,61341697,61669377],"delay":[54853633],"directaccess":[59965441],"decrement":[3014657,4521985,55705601,60227585],"debugging":[26804226,27656194,28901378,29622274,43778049,47710209,48234497,50593793,52559873,59179010,61145090,61669378],"decimal":[3407873,5046273,12058631,58785793,59768833,61669377],"defaultarg":[7077889,7602177,8323073,8650753,12255233,12910593,31326209],"dummy":[47054849,51642369,56492033],"demand":[51511298],"downloaded":[59572225],"dispatches":[3014657,4521985,55705601,60227585],"distinct":[45023233,61145089],"debug":[4980738,25231361,26214401,27590657,27656193,28835841,29163521,29425665,29622273,29884417,30015489,33816580,38338564,40370178,58261510,60817412],"disablesourcemanagement":[61669377],"dataview":[38535169,60162049,61210625,61341698],"disabled":[19791873,47382529,50200577,53936129,57147394,60686338,61145089,61669377],"debugger":[65538,720898,917506,3932161,7208961,13631490,14548994,15466497,15532033,16187394,16908290,22151169,22216705,22740993,22806529,23068674,23789570,23920642,24641538,24969217,25231361,25362433,26214401,26279938,26673153,26738689,26804225,27459585,27590658,27656194,28180481,28508161,28639233,28835841,28901378,28966913,29097985,29163522,29425666,29622275,29884418,29949953,30015489,30146561,31129601,31391745,31850497,33161217,33554433,33685505,34275329,34734081,35127297,36044801,36306945,36569089,37224449,37486593,37879809,38207489,38469633,39190529,39321601,39387138,45613057,50593795,54657025,55181314,58261506,58851331,60817409,61145089],"depends":[43450369,49414145],"downloadstring":[12910593],"documen":[6815745,7405569,7864321,8847361,21954561,36634626,39256065,40304643,44761089,46661633,51445761,51576835,51707905,52363265,52625409,59310081,60489730],"disposing":[18874376,38273032,43122696],"delegat":[15794178,16580610,31260674,33947650],"dispose":[2621441,2686977,2818049,3145729,3211265,3670017,3735553,4063233,4128769,4521985,4587522,4980737,5177345,6291458,6356994,6553602,7208963,7536642,8257538,8716291,8978434,12910593,18874379,24576008,24707078,30212103,30539785,36110339,36831235,38273035,40763395,43122699,58195970,58261505,58327041,58392578,58916865,59375617,59703297,59834369,60096514,60162049,60227585,60293121,60424193,60751873,60817411,60882947,61014017,61407234,61538306,61603842],"documentloadcallback":[38010881,42926087,52166660],"disablebackgroundwork":[57147393],"delimited":[22740993,34734081,35127297,36044801,38207489,39190529,41222146,42270721,43843585,45416449,45613057,46071809,53870594,60030977],"distinction":[13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16187393,16908289,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537],"disconnected":[917505],"delegates":[38010881,39059457,40632321,41353218,42074113,42205185,43909121,44957697,45088769,45219842,46268417,47775745,58195969,58327041,58392577,60096513,60817410,60882945,61407234,61538306,61603842],"disableextensionmethods":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47775745,48300036,54525958,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"destinationindex":[16056325,16711685,17432581],"del":[3407873,5046273,8126465,9830406,58785793,59768833],"dimension":[9502721,10354689],"direct":[2621442,2686978,2818050,3211266,3670018,15728642,15794178,16580610,19202050,37421059,37945347,59375618,59834370,59965441,60162050,60424194,60751874],"documentinfo":[1703938,1835009,3735554,4587522,4980740,5767174,5832710,6029318,6291458,6356994,6488070,6553602,7208966,7274501,7536642,8716290,8978434,15073290,15204362,18939917,19464205,21954565,23461898,25821195,26607626,28049419,28442634,30343179,30998539,32178186,32374785,33488897,34078721,35061761,35192836,37355521,37748737,38010881,38666244,40304642,40435713,41877509,45285382,46661633,47251457,50003973,51118081,51576842,51707905,51970055,52166661,52232193,52625409,53739530,54132740,57278469,58195970,58261508,58327042,58392578,58523649,59703297,60096514,60817414,60882946,61407234,61538306,61603842],"dynamically":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47775745,49676290,49938434,51183618,52297730,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"description":[65537,131073,196609,262145,327681,393217,458753,524289,655361,786433,851969,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4980737,5046273,5111809,5177345,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,12255233,30670849,30932993,31064065,31457281,31719425,31784961,32047105,32374785,32440321,32505857,32571393,32899073,33030145,33292289,33357825,33423361,33488897,33619969,33751041,33816577,33882113,34078721,34209793,34340865,34406401,34471937,34537473,34603009,34668545,34799617,34865153,34996225,35061761,35192833,35258369,35323905,35389441,35586049,35651585,35717121,35782657,35913729,35979265,36110337,36175873,36241409,36372481,36438017,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37289985,37355521,37421057,37552129,37617665,37683201,37748737,37814273,37945345,38010885,38076417,38141953,38338561,38404097,38535171,38600705,38666241,38797313,38862849,38928385,38993921,39059457,39124993,39256065,39321603,39387137,39518209,39649281,39714817,39780353,39911425,39976963,40173569,40239105,40304641,40370177,40435713,40566786,40632321,40697857,40763393,41091073,41156609,41222145,41287681,41418753,41484289,41811969,41877505,42008577,42074113,42205185,42532865,42598401,43188225,43909121,44957697,45088769,45416449,45744129,45809665,46137345,46202881,46268417,46596097,46858241,46923777,47120385,47644673,47775745,47972353,48365569,48824321,50593793,51576835,52428801,53084163,53477379,53673986,53870595,54067204,54198273,54722563,55115778,55246849,55312387,55377921,55705602,55836674,55902210,56229889,56426500,56492034,56754178,56950785,57016321,57147393,57212929,57540610,57671681,57802753,57933825,57999364,58130435,58195971,58261508,58327042,58392579,58458113,58523651,58589187,58654724,58720258,58785794,58851330,58916866,58982403,59047937,59113475,59179009,59244546,59310083,59375618,59441153,59506691,59572225,59637761,59703298,59768834,59834370,59899906,59965441,60030977,60096515,60162050,60227586,60293122,60358659,60424194,60489731,60555266,60620801,60686337,60751874,60817411,60882947,60948482,61014018,61079553,61145089,61210625,61276161,61341697,61407235,61472770,61538307,61603843,61669377],"disposes":[8257537],"dialogs":[4718593,30605314,39059457,39976961,40632321,42205185,43909121,44957697,46268417,46596097,50397185,57344001,58392577,60096513,60882945,60948483,61407233,61538305,61603841],"drives":[8650754],"demonstrates":[9306113,9568257,9830401,10616833,12255233,12910593],"declared":[40042497,44171265,59637761,61669377],"dynamic":[3014670,3407883,4521997,5046283,6946817,7340033,8519683,9109507,9371651,9633795,9961474,10027011,10158082,10551299,10747906,10944513,11534339,11730948,13631489,13828097,19398657,23789569,33357826,34865153,35323906,35782658,39059457,40632321,42074113,42205185,43646977,43909121,44957697,45088769,45744129,46202881,46268417,46727169,47775745,47906819,48168961,48365569,48758785,49348609,50135041,54001667,55705615,56819713,57540609,58195969,58327041,58392577,58458113,58654721,58785803,58982401,59179009,59768843,59965441,60096513,60227598,60817409,60882945,61145089,61407233,61538305,61603841],"date":[61145090,61669378],"deeply":[52494337],"desktop":[39976964,55377921,58392577,60096513,60882945,61407234,61538306,61603842],"disableglobalmembers":[61145089],"dynamichostobject":[3014658,6946817,7340037,38010881,55705608],"degrade":[61145089],"documentloader":[1835013,1966082,5963777,6225921,6422529,6488065,7274497,7667717,35389441,38010882,39583745,40697858,43319303,53018631,53084168,58523660],"dict":[8323076,9437186,12255236],"disconnect":[1900545,2162689,7733253,56229889,57212929],"directly":[3014657,4521985,9437185,55705601,60227585],"details":[13828097,19398657,23134209,23724033,44236801,48103425,48693249],"disconnects":[65537,917505,1900545,2162689,7733249,56229889,57212929,58261505],"defaultscriptusageattribute":[2555906,5570566,5636102,38010881,38928386,41418757,42008577,43974657,47316993,53411841,53477382,59113482],"declare":[44433409,50659329],"document":[1638403,1703937,1835014,1966085,2031623,2359297,3473409,3735566,4587534,4980756,5308417,5505035,5767171,5832707,5963777,6029331,6094874,6225946,6291470,6357006,6422539,6488083,6553614,6619142,6684673,6815753,7208994,7274514,7405579,7536654,7667713,7864327,8192001,8716302,8847381,8978446,12910593,13172740,13238276,13631494,13762566,13893638,14548996,14680072,14745608,15073283,15204355,15466498,15532034,16187398,16908292,18939907,19464195,20250628,20447236,21102598,21233670,21823496,21954562,22085640,22216706,22806530,23068678,23461891,23789574,23920644,24051715,24444935,24641540,24772613,24969218,25362434,25493511,25559043,25821187,26017795,26083333,26411013,26542083,26607619,26935299,27066371,27394055,27525125,27721735,28049411,28311557,28377095,28442627,28573703,28966914,29032451,29294595,29556743,29753349,29949954,30146562,30343171,30670856,30736391,30998531,31391746,31981573,32178179,32374788,33030148,33095685,33488900,33882116,34078724,34668548,35061764,35192840,35389442,35586052,36372493,36569090,36634630,37355524,37617666,37748740,37879810,38010893,38404097,38535169,38666248,39059457,39256069,39583748,39714829,39780356,40108034,40304644,40435714,40697859,40632321,40828930,40894466,41222150,41484290,41549826,41877507,42074113,42205185,42270721,42926082,43319298,43384836,43843585,43909121,44302339,44498946,44630018,44761091,44957697,45023236,45088769,45285379,45547522,46268417,46661633,47251458,47448065,47775745,48037889,50003972,50593796,50921474,51118082,51380226,51445761,51576839,51707907,51970050,52166660,52232194,52363265,52428803,52625409,53018626,53084168,53739522,53870606,54132737,55115778,57278469,57737217,57868289,58195983,58261525,58327055,58392591,58523655,59310092,59572228,59703298,59899909,60096527,60489741,60817443,60882959,61407247,61538319,61603855,61669377],"dictt":[8323074,9437186],"datetime":[55312385,61145090,61669377],"debuggerconnected":[65537,720900,58261505],"delivered":[52035585,56098817],"discarding":[3735554,4587522,6291458,6356994,6553602,7208962,7536642,8716290,8978434,13631490,16187394,23068674,23789570,32374785,33488897,34078721,35061761,37355521,37748737,58195970,58327042,58392578,60096514,60817410,60882946,61407234,61538306,61603842],"delegating":[9306113,9568257,9830401],"delete":[3014658,4521986,14811137,15335425,23527425,24117249,35913729,35979265,55705602,60227586],"delegate":[2621442,2686978,2818050,3014657,3211266,3407876,3670018,4521985,4784130,5046275,6881282,8388613,9306117,9568261,9830405,15728645,15794181,16580613,19202053,30474242,31260674,32899074,33226754,33947650,37421058,37945346,38010881,38600706,39649282,45154305,50003973,51314689,52166661,55705601,57016322,57212929,57278469,57933825,58064901,58720258,58785795,59375618,59768836,59834370,60162050,60227585,60424194,60751874],"debuggerdisconnected":[65537,917508,58261505],"destination":[16056326,16711686,17432582,18415617,19857409,21692417,23658497],"disablelistindextyperestriction":[39059457,40632321,42074113,42205185,43450374,43909121,44957697,45088769,46268417,47775745,49414148,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"dynamicobject":[3014679,4522007,38010881,55705629,60227612],"disabledynamicbinding":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,46333953,47775745,47906820,51052545,54001670,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"documentcontextcallback":[1835009,2031617,3735554,4587522,4980740,6029318,6291458,6356994,6488070,6553602,7208966,7274501,7405573,7536642,8716290,8978434,14680069,14745605,21823495,22085639,24444933,25493509,27394053,27721733,28377093,28573701,29556741,30670849,30736389,33030145,33882113,34668545,35586049,36372484,38010881,39714820,41549831,47251463,50003972,53870593,58195970,58261508,58327042,58392578,58523649,60096514,60817414,60882946,61407234,61538306,61603842],"download":[12910593],"datetimeoffset":[55312385],"displaying":[46596097,50397185,60948481],"disablefloatnarrowing":[39059457,40632321,42074113,42205185,42795014,43909121,44957697,45088769,46268417,47775745,48889860,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"different":[6094849,6225921,26804225,27656193,28901377,29622273,54591489,61407233,61538305,61603841],"disables":[4718593,30605313,38404098,39059466,40042497,40632330,41353217,42074125,42205194,42336257,42532865,42795009,43057153,43450369,43909130,44171265,44957706,45088778,45219841,45416449,45875201,46268426,46333953,46465025,47382529,47710209,47775754,47906817,48234497,48300033,48889857,49414145,51052545,52035585,52559873,52822017,53280769,54001665,54525953,54853633,56098817,58195978,58261506,58327050,58392586,60030977,60096522,60817421,60882954,60948481,61276161,61407242,61538314,61603850],"describes":[45744129,58654721],"disposable":[8257539],"disabletyperestriction":[39059457,40042500,40632321,42074113,42205185,43450369,43909121,44171270,44957697,45088769,46268417,47775745,49414145,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"double":[3407873,5046273,9699335,13631489,23789569,51511302,58785793,59768833,60751873],"derived":[2490371,2555907,2883587,3014665,3342339,3538947,4521993,4849667,5111809,38928385,42008577,42598401,46137345,46923777,47972353,53477380,54722564,55312388,55705609,58654721,59113476,59506692,60227593,60358660],"dispatcher":[39059458,40632322,42205186,54788108,61407235,61538307,61603843],"dimensional":[13828097,19398657],"discards":[1835009,1966081,5963777,6684673,53084161,58523649],"determines":[1572865,1638401,1769474,1835009,1900545,1966081,2031617,2097153,2359297,2752514,2162689,2228225,3014658,3276802,3407877,3473409,3604481,3866625,3932161,3997697,4063233,4259842,4325377,4390913,4456449,4521985,4587521,4653057,4784129,4980737,5046277,5111809,5439489,6291458,6356994,6553602,6881282,6946817,7208961,7536642,7798785,8716290,8912898,8978434,9175041,9764865,10223617,17039361,32636929,33751042,35520513,41746433,53084161,53673985,53870593,54067202,55115777,55705602,55836673,56229889,56426498,56492033,56754177,57016321,57212929,57540610,57671681,57933825,57999362,58130433,58195969,58261505,58392578,58523649,58589185,58654721,58720258,58785797,58851329,59244545,59310081,59703297,59768837,59899905,60096514,60227585,60489729,60555265,60817409,60882946,61407234,61472769,61538306,61603842],"disablejitcompilation":[57147393],"discard":[5963777,6684673,13631495,16187399,23068680,23789576],"disable":[26804225,27656193,28901377,29622273,40042497,42795009,43450369,44171265,47906817,48300033,48889857,49414145,54001665,54525953,59441153],"defaultdocumentloader":[1835010,5308421,5505025,6094849,6029313,6684673,35389442,38010881,43384833,53084161,58523656],"determine":[45678593,51904513],"documents":[1835009,1966081,5963778,6684674,6815746,7405570,7864322,8847362,39583745,39780353,41222145,43384833,43843585,44498945,45023233,53084161,53870593,58523649,59572227,59899905],"dynamicmetaobject":[3014658,4521986,55705602,60227586],"default":[1,1572865,1638401,1769473,1835010,1900545,1966081,2031617,2097153,2359297,2490369,2555906,2162689,2228225,2883585,3014657,3276801,3342338,3407873,3473409,3538945,3604481,3735554,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587523,4653057,4849665,4915201,4980737,5046273,5111809,5308417,5373953,5439489,5505025,5570563,5636097,5898241,6029313,6094849,6160385,6291459,6356995,6553603,6684673,6881281,7208963,7536643,7798785,8716291,8978435,15138817,15269889,16318465,16973825,17629185,20185089,20578305,21037057,21430273,31719426,33292290,34996226,35258370,35389441,38010883,38928386,39059457,39583746,40042498,40632321,40697858,41091074,41418754,41680898,42008578,42074113,42205185,42401794,42795009,42860550,43057153,43384835,43909121,43974658,44171266,44957697,45088769,45154305,46268417,46333953,46465025,46530561,46792705,47054849,47316994,47382529,47775745,47906817,48889857,49152002,49610753,50200577,50528257,50724865,50790401,50987009,51052545,51314689,51642369,51707905,51838977,52035585,52101121,52822017,52953089,53018630,53084163,53280769,53411842,53477380,53673985,53870593,53936129,54001665,54067201,54460417,54591489,54722561,55115777,55312385,55443457,55574529,55705601,55771138,55836673,56098817,56229889,56360962,56426500,56492033,56754177,56950785,57147393,57212929,57671681,57933825,57999363,58130435,58195972,58261505,58327043,58392580,58523651,58589185,58654721,58720257,58785793,58851329,59113476,59244545,59310081,59441153,59506689,59572225,59703297,59768833,59899905,60096516,60227585,60358657,60489729,60555265,60817412,60882948,61145089,61407236,61472769,61538308,61603844],"dll":[589825,720897,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,4915201,5242881,5308417,5373953,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6422529,6488065,6619137,6684673,6750209,6815745,6946817,7012353,7077889,7143425,7274497,7340033,7405569,7471105,7602177,7667713,7733249,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8781825,8847361,8912897,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16515073,16449537,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30736385,30801921,30867457,30998529,31129601,31195137,31260673,31326209,31391745,31522817,31588353,31653889,31850497,31916033,31981569,32112641,32178177,32243713,32309249,32636929,32702465,32768001,32833537,32964609,33095681,33161217,33226753,33554433,33685505,33947649,34013185,34144257,34275329,34734081,34930689,35127297,35520513,35454977,35848193,36044801,36306945,36503553,36569089,37224449,37486593,37879809,38207489,38273025,38469633,38731777,39190529,39452673,39583745,39845889,40042497,40108033,40501249,40828929,40894465,40960001,41025537,41353217,41549825,41615361,41680897,41746433,42139649,42270721,42336257,42401793,42467329,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,45023233,45154305,45219841,45285377,45350913,45481985,45547521,45613057,45678593,45875201,45940737,46006273,46071809,46333953,46399489,46465025,46530561,46661633,46727169,46792705,46989313,47054849,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47710209,47841281,47906817,48037889,48103425,48168961,48234497,48300033,48431105,48496641,48562177,48627713,48693249,48758785,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"discardcacheddocuments":[1835010,1966081,5963781,6684677,53084161,58523650],"documentsettings":[1835009,2031618,6029318,6488070,6815745,7274501,7405569,7864321,8192005,8847361,30670849,38010881,38404097,39059457,40108033,40632321,40828939,40894465,41222146,41549825,42074113,42205185,42270721,42926081,43319297,43843585,43909121,44630030,44957697,45088769,46268417,47775745,51380235,53870600,58195969,58261505,58327041,58392577,58523649,60096513,60817409,60882945,61407233,61538305,61603841],"deprecated":[47382529],"directory":[41222145,43843585,45416449,46071809,53870593,60030977],"display":[39059457,39976961,40632321,42205185,43909121,44957697,46268417,57344001,58392577,60096513,60882945,60948481,61407233,61538305,61603841],"defaults":[7077889,7602177,8323073,8650753,12255233,12910593,31326209,38010881,59113473],"defaultaccess":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47316996,47775745,53411846,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"documentaccessflags":[38010881,40108039,59572228]} \ No newline at end of file +{"destinationindex":[16449541,16646149,16777221,18153477,18677765,18743301],"disposable":[8912899],"disablebackgroundwork":[72744961],"dimensions":[7733249],"dialogs":[9240577,41746434,52232193,57737217,62193665,63045633,64684033,65273857,69009409,69533697,70582273,73465857,75104257,79953921,80281601,81002497,81068033,81133571,81264641],"defaults":[7733249,7929857,8847361,9175041,13959169,15990785,25624577,26279937,26869761,27656193,27787265,27852801,28442625,28573697,29032449,29097985,29229057,29294593,29425665,29622273,29818881,29884417,30015489,30146561,30277633,30670849,30736385,30801921,30932993,30998529,31064065,31719425,32047105,32112641,32178177,32309249,32374785,32440321,32768001,32833537,34078721,34209793,34275329,35651585,45547521,54591489,75759617],"default":[196609,851969,1703937,1769474,1835009,1900545,1966081,2031617,2162689,2228226,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145730,3342337,3407873,3538945,3604481,3735554,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4849665,5046273,5111809,5177345,5242881,5308417,5373955,5439489,5636097,5701633,5832705,5963777,5767169,6094849,6160385,6291457,6422529,6488067,6553601,6881281,6946817,7077889,7143425,7536641,7864321,8257537,8716291,9306115,9437185,9502723,9830403,10682369,11010051,11206659,11403267,12189697,15335425,15466497,17367041,17694721,18481153,19660801,20971521,26017793,27983873,45547523,50855938,53936130,54722562,55640065,55771142,55967746,56295426,56688641,57278465,57344002,57671682,57737217,57868289,57933826,58130433,58523650,58916865,59572226,60162049,60293121,60686338,60817409,60882945,61079554,61407233,61669377,61997058,62128129,62193665,62259202,63045633,63963137,64159746,64290817,64552961,64684033,64815105,64880641,65077249,65273857,65536001,66387969,66650113,66781186,66912258,67305473,67764225,67895297,67960838,68943873,69140481,69468163,69533697,69926914,70254593,70909953,71041025,71237633,71172097,71368707,71499778,71565313,71761921,71827457,72155137,72220673,72286210,72417281,72548353,72613889,72744961,73400321,73531393,73924609,73990148,74055681,74121217,74448897,74514433,74711043,74842113,75038721,75104260,75169795,75235329,75366401,75431937,75563009,75628548,75759620,75956225,76021761,76087300,76152833,76480513,76546049,76742657,76873729,76939265,77070337,77266945,77332481,77398017,77791233,77856772,77987841,78249985,78512131,78577665,78708737,78970881,79167489,79626241,79691779,79888385,79953924,80019457,80084993,80216065,80281604,80347137,80478209,80543745,80674817,80805889,80871425,81002500,81068036,81264644,81330177],"date":[29294593,29556737,29818881,31588353,42008577,76939266,80412674],"derived":[1769475,2031619,2949123,3014657,3145731,3407873,3342345,4653059,5046275,5963785,34406401,45285377,53542913,56492033,57671681,65863681,66781185,68157441,72548353,73990148,74842116,75038724,75759620,77266946,78577666,78970881,79167492,80085001,80216068,80543753],"directory":[52756481,54657025,55508993,63635457,69992449,79888385],"disposeasync":[4063233,80936961],"documentsettings":[1835010,2228225,6619137,6684673,6815745,7274501,7405574,8650753,9043973,10682374,45547521,45678593,52756482,55508993,57737217,58130433,59768833,59834369,59899915,60293121,61341697,61407233,61931521,62193665,63045633,63504385,64225281,64684033,64749569,65273857,65994766,69533697,72876043,75104257,75169793,75366401,76087297,77856769,78512129,79888392,79953921,80281601,81002497,81068033,81264641],"documentname":[15269893,16384005,18219013,19464197,26542086,26804230,28639238,29360134,36372485,39387141,41287685,42401797,44040197,44302341,45875205,49217541],"defaultdocumentloader":[2228226,5832709,6291457,7536641,8257537,10682369,45547521,55640066,69468161,75169800,79691777],"dispatches":[3342337,5963777,80084993,80543745],"distinct":[54198273,76939265],"disablesourcemanagement":[80412673],"documentflags":[45547521,63766535,78118916],"disablelistindextyperestriction":[56360964,57737217,58130433,60293121,61407233,62193665,62849030,63045633,64684033,65273857,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"demand":[70975490],"dynamicmetaobject":[3342338,5963778,80084994,80543746],"double":[3538945,4521985,4915202,7340035,9895939,10551303,18219009,26279943,26542081,29949959,32440327,32702471,46137351,51052546,51445762,54067202,70975494,75956225,76349443,77529091,77987841,78184449,79364098],"disconnects":[983041,1310721,2293761,2555905,7471105,68943873,70909953,75366401],"directaccess":[78446593],"dictt":[8847362,10354690],"documentinfo":[1638402,2228225,3735554,5373954,6225926,7077892,7405574,7667718,8716290,9043973,9306114,9502722,9830402,10682374,11010054,11206658,11403266,14942218,18022410,21561357,23330821,24313869,39518219,40173578,41418762,43515915,43909121,44105733,45547521,46858251,48365578,48496641,50003972,50987019,52822017,53018625,53870593,54460426,54853636,56426497,57409537,59441153,61538306,61734913,62914566,63766529,64880641,67174401,69337093,69599233,71172097,72482823,75104258,75169793,75366404,75825162,76087302,76218372,77725701,77856770,78512130,78839818,79298565,79953922,80281602,81002498,81068034,81264642],"drives":[9175042],"details":[16711681,23199745,41549825,43188225,56950785,69664769,73334785],"dispatcher":[57737218,62193666,64684034,74579980,75104259,79953923,81264643],"debugport":[38731781,39649285,40304645,40828933,42336261,44498949,44892165,45481989,49086469,50921477],"dummy":[57868289,69140481,78708737],"dynamically":[57737217,58130433,60293121,61407233,62193665,62390274,63045633,64684033,65273857,66519042,69533697,70713346,74907650,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"direct":[2818052,3276804,3473412,3997700,4390916,14876674,16318466,16973826,18874370,19070978,19136514,20905986,22020098,46202885,49938437,73138180,74645508,75497476,77135876,78184452,78446593],"downloadstring":[15990785],"download":[15990785],"dimension":[10158081,11337729],"decrement":[3342337,5963777,80084993,80543745],"destination":[16449542,16646150,16777222,17563649,18153478,18677766,18743302,19726337,23724033,24707073],"describing":[56819713,74186753,80347137],"dimensional":[16711681,23199745],"discardcacheddocuments":[2162689,2228226,6029317,8257541,75169794,79691777],"document":[1638401,1835015,1900545,2162693,2228230,2621443,3604481,3735566,5373966,5505025,5832705,6029313,6225923,6291482,6619143,6684681,6750214,6815765,7077908,7208986,7274497,7405587,7536651,7602187,7667715,8257537,8650763,8716302,9043986,9306126,9502734,9830414,10682387,11010082,11206670,11403278,14155784,14483464,14548996,14942211,15269894,15728642,15990785,16187394,16384004,16515078,18022403,18219014,19464196,19857412,21037064,21364742,21561347,21626888,22872066,23330818,23855106,24313859,24641540,25427972,26542086,26607622,26738694,26804230,28639236,29360132,36044803,36175877,36372482,37552131,37748739,37945347,38207493,39387138,39518211,40173571,40239107,40435715,40894471,41025539,41287682,41418755,42074119,42401794,42598403,43057157,43515907,43581447,43909124,44040194,44105731,44302338,44433415,44695556,45023237,45547533,45678600,45744135,45875202,46858243,47513607,47841284,48037895,48103425,48365571,48496644,49217538,49741829,49807367,50003976,50987011,51314692,51642381,51970053,52625413,52756486,52822020,53018628,53870596,54001670,54198276,54460419,54853640,54984709,55115780,55508993,55640066,55771138,56426498,56819714,57212941,57344004,57409540,57475074,57737217,58130433,58261509,58392579,59375620,59441153,59768834,59834369,59899906,60096515,60293121,61341698,61407233,61538308,61734914,61931522,61997059,62193665,62914563,63045633,63504385,63766530,64028673,64225282,64684033,64749570,64880643,65273857,65470466,65798146,65994754,67174402,68616193,69337093,69468164,69533697,69599233,70057985,70123521,71172098,71958531,72482818,72876034,73007105,73072641,75104271,75169799,75366421,75825154,76087331,76218369,76480524,76873732,77332485,77725700,77856783,78118916,78315522,78512143,78839815,79298564,79691784,79888398,79953935,80281615,80347138,80412673,80674829,81002511,81068047,81264655],"documentloadcallback":[45547521,64225287,79298564],"dump":[15990785],"delegat":[14876675,16973826,18874369,19136515,20905985,22020098,42139650,44630018],"deletable":[26673153,27590657,77660161],"displaying":[70582273,73465857,81133569],"defaultarg":[7733249,7929857,8847361,9175041,13959169,15990785,25624577,26279937,26869761,27656193,27787265,27852801,28442625,28573697,29032449,29097985,29229057,29294593,29425665,29622273,29818881,29884417,30015489,30146561,30277633,30670849,30736385,30801921,30932993,30998529,31064065,31719425,32047105,32112641,32178177,32309249,32374785,32440321,32768001,32833537,34078721,34209793,34275329,35651585,54591489],"debugger":[655362,983042,1310722,4849665,11010049,15269890,15728641,16187393,16384002,18219010,19464194,22085633,22740993,22872065,23855105,26542082,26804226,28639234,29360130,35258369,36372481,36700162,36896769,37027841,38731778,39256065,39387137,39649282,39714817,40304641,40828930,41287681,41680897,41943041,42205185,42270721,42336257,42401793,42532865,42991617,43778050,44040193,44302337,44498946,44761089,44892161,45219841,45481987,45875201,46530561,47316993,48234497,49086466,49217537,49545217,50331649,50528257,50593793,50921473,52101121,52297729,52953089,53149697,54132737,61800450,70516737,71696386,75366402,76087297,76546051,76939265,78118915],"depends":[56360961,62849025],"disabletyperestriction":[56360961,57737217,58130433,58523652,60293121,61407233,62193665,62849025,63045633,64159750,64684033,65273857,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"delegates":[45547521,51707905,57737217,58130433,60293121,61407233,62062594,62193665,63045633,64684033,65273857,67567618,69533697,75104258,76087298,77856769,78512129,79953922,80281601,81002497,81068033,81264642],"distinction":[14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,18022401,18219009,19464193,19857409,21037057,21364737,21561345,21626881,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129],"declared":[58523649,64159745,79429633,80412673],"documentcategory":[1835010,1900546,2228225,3735556,5373956,6684677,7077896,7405574,8650757,8716292,9043973,9306116,9502724,9830404,10682374,11010060,11206660,11403268,14155781,14483461,16515077,21037063,21364741,21626887,26607623,26738695,36175877,38207493,40894469,42074117,43057157,43581445,44433413,44695554,45023237,45547521,45678594,45744133,47513605,47841282,48037893,49741829,49807365,51314690,51642376,51970053,52625413,54198273,54984709,55115778,57212936,57475079,59375618,59441159,68616198,70123526,75104260,75169793,75366408,76087308,77332486,77856772,78315527,78512132,79888386,79953924,80281604,81002500,81068036,81264644],"del":[3538945,4521985,8585222,8978433,75956225,77987841],"detailed":[56950785,60358657,62455809,62980097,69664769,72548353,73334785,78905345,78970881],"delay":[76611585],"desktop":[52232196,74776577,75104258,79953922,80281601,81002497,81068033,81264642],"debugging":[39256066,40828930,43778050,45481986,48955393,56229889,66453505,67698689,76939266,77004802,78118913,80412674],"dynamicpropertynames":[55574529,60030980,61210625,67371014,71303169,78577665],"disconnect":[2293761,2555905,7471109,68943873,70909953],"debug":[7077890,38731777,39649281,40304641,40828929,42336257,44498945,44892161,45481985,47972356,49086465,50921473,55836676,58720258,75366406,76087300],"data":[1245185,1507329,3014657,3407873,7077906,11010066,17563650,19726339,23724034,24707075,36044804,36175878,36241413,36372485,37552134,37748740,37945349,38076420,38207494,38273029,39387141,39518213,40042500,40108038,40239109,40435718,42401796,43122694,43515909,43581445,44040198,44433413,45744132,45875204,46006273,46858244,47513604,48037894,48365574,49217542,49545218,49741829,49807366,50003977,50987012,51642377,51970052,52625413,54460422,54788097,54853641,54984708,57212937,57737217,57999362,58130433,60096513,60293121,60358657,61407233,62193665,62980097,63045633,63635457,64684033,64815105,65273857,67305473,68288514,69533697,72548356,75104257,75366418,76087315,76546049,77856769,78512129,78970884,79560710,79757319,79953921,80281601,80871425,81002497,81068033,81264641],"defaultaccess":[57737217,58130433,60293121,61407233,62193665,62259204,63045633,64684033,65273857,69533697,72286214,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"documents":[2162689,2228225,6029314,6619138,6684674,6815746,8257538,8650754,52756481,54198273,55508993,57344001,59375617,69468161,75169793,76873731,77332481,78315521,79691777,79888385],"dynamicobject":[3342359,5963799,45547521,80085020,80543773],"deleteproperty":[2097154,2752514,2818050,3276802,3473410,3997698,4390914,4456450,4784130,4980738,5570562,5963778,17629189,19333125,21954566,22675462,26673157,27590661,45940738,56098818,58064898,73138178,73269250,74645506,74973186,75497474,75694082,76283906,77135874,78184450,79495170,80084994,81199106],"documen":[6619137,6684673,6815745,8650753,23330817,54001666,58261505,59441153,60096513,61538307,64880641,69599233,70057985,73072641,76480513,78839811,80674818],"declare":[56033281,62717953],"dictionary":[8847362,10354693,13959172],"disablefloatnarrowing":[57737217,58130433,60293121,61407233,61669382,62193665,63045633,64684033,65273857,67764228,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"directly":[3342337,5963777,10354689,80084993,80543745],"debuggerdisconnected":[983044,1310721,75366401],"documentloader":[2162690,2228229,5505029,6029313,7208961,7405569,7602177,9043969,45547522,55640065,55771143,57344001,61997058,64749575,75169804,79691784],"discarded":[15728641,16187393,16384001,19464193,22872065,23855105,28639233,29360129,78118913],"discard":[6029313,8257537,15269895,18219015,26542088,26804232],"disconnected":[983041],"dynamichostobject":[3342338,7012357,8519681,45547521,80543752],"disableglobalmembers":[76939265],"deprecated":[67895297],"disableextensionmethods":[57737217,58130433,60293121,60620806,61407233,62193665,63045633,64684033,65273857,65667076,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"degrade":[76939265],"debuggerconnected":[655364,1310721,75366401],"defined":[2097153,2752513,2818049,3276801,3473409,3735553,3997697,4063233,4259841,4390913,4521985,5373953,5570561,5963777,6356993,7077889,7929857,7995393,8716289,9109505,9306113,9502721,9830401,11010049,11206657,11403265,15663105,18219009,23658497,24510465,25296897,26542081,46465025,48955393,51904513,52428801,56164353,56623105,60358657,62980097,70320129,72548353,73138177,74121217,74645505,75104257,75366401,75497473,75956225,76087297,76283905,77135873,77856769,78184449,78512129,78970881,79495169,79953921,80084993,80281601,80936961,81002497,81068033,81199105,81264641],"defines":[8912897,9961473,45547529,48103430,49545224,51707905,52232193,69861377,69992449,71958529,72744961,74645505,76021761,76677121,76808193,76873729,76939265,77004801,77135873,77201409,77660161,77791233,78118913,78446593,78774273,78905345,79233025,79429633,79560705,79757313,80150529,80412673],"discarding":[3735554,5373954,8716290,9306114,9502722,9830402,11010050,11206658,11403266,15269890,18219010,26542082,26804226,43909121,48496641,52822017,53018625,53870593,57409537,75104258,76087298,77856770,78512130,79953922,80281602,81002498,81068034,81264642],"delegate":[2818052,3276804,3342337,3473412,3538948,3997700,4390916,4521987,5963777,5898242,6553602,8388613,8585221,10944517,11075589,14876678,16318469,16973829,18874374,19070981,19136518,20905990,22020101,40632322,42139650,42860546,44630018,45547521,46202884,48758786,49938436,51707905,52887554,53477378,57278465,63963137,69337093,70909953,72679429,73138180,73531393,74645508,75497476,75890693,75956227,77135876,77725701,77987844,78053381,78184452,78643205,79036421,79101954,79298565,79822853,80084993,80543745,80609285,80805890],"delegating":[8585217,10944513,11075585],"disabledynamicbinding":[56688641,57737217,58130433,58916870,60293121,61407233,62193665,63045633,64290820,64684033,65273857,66650113,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"dynamic":[3342350,3538955,3801097,4521995,5242889,5963789,5767169,7012353,8519681,9633795,9699331,10027010,10289155,10485762,10813443,11141123,11272196,11993091,12582913,12779523,13041666,16711681,18219009,23199745,23265285,23461892,24969221,25034756,26411013,26542081,27131908,27459589,29687812,30539781,31522820,32636933,33226757,33685508,34406401,34996225,35454980,36634629,38010884,39321603,46727172,46923777,47579138,48300034,48693252,49676292,51707906,53411844,54329346,55050244,55181316,55574531,57147393,57737217,57802756,58130433,58851332,58916867,60030979,60293121,60358657,60555265,60948481,61210627,61407233,62193665,62455809,62980097,63045633,64290819,64684033,65273857,66322435,67371011,67502081,69206017,69533697,70647809,71303180,72548353,73728003,75104257,75431937,75956235,76087297,76414977,76939265,77004801,77856769,77987851,78381057,78446593,78512129,78577676,78905345,78970881,79953921,80085006,80281601,80543759,81002497,81068033,81264641],"display":[52232193,57737217,62193665,63045633,64684033,65273857,69009409,69533697,75104257,79953921,80281601,81002497,81068033,81133569,81264641],"delete":[3342338,5963778,17629185,19333121,21954561,22675457,26673155,27131906,27590659,29687810,35454978,38010882,45940737,48693249,55181313,56098817,58064897,80084994,80543746],"documentcontextcallback":[1835009,2228225,3735554,5373954,7077892,7405574,8650757,8716290,9043973,9306114,9502722,9830402,10682374,11010054,11206658,11403266,14155781,14483461,21037063,21626887,40894469,42074117,43581445,44433413,44695553,45547521,45678593,45744133,47513605,47841281,48037893,49807365,51314689,51642372,55115777,57212932,61734919,61931527,75104258,75169793,75366404,76087302,77725700,77856770,78512130,79888385,79953922,80281602,81002498,81068034,81264642],"delivered":[73924609,74448897],"different":[6291457,7208961,39256065,40828929,43778049,45481985,65077249,75104257,79953921,81264641],"delimited":[22740993,42270721,45219841,50593793,52756482,52953089,53149697,54132737,54657025,55508993,63504385,63635457,69992449,79888386],"deeply":[68419585],"differ":[76939265],"disabled":[21757953,67895297,71041025,72220673,72744962,76939265,79757314,80412673],"description":[131073,589825,262145,720897,851969,1048577,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5570561,5636097,5701633,5767169,5963777,5898241,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9240577,9306113,9502721,9830401,9895937,11010049,11206657,11403265,12320769,13959169,43646977,43909121,43974657,44105729,44695553,44826625,45154305,45350913,45547525,45678593,45940737,46006273,46071809,46202881,46268417,46399489,46596097,46661633,46727169,46923777,47382529,47448065,47579137,47710209,47775745,47841281,47906817,47972353,48103427,48168961,48300033,48431105,48496641,48562177,48627713,48693249,48758785,48824321,49020929,49152001,49348609,49479681,49545219,49610753,49676289,49938433,50003969,50069505,50200577,50266113,50397185,50462721,50855937,51052545,51183617,51249153,51314689,51445761,51576833,51642369,51707909,51773441,51838977,51904513,52035585,52166657,52232195,52363265,52494337,52690945,52756481,52822017,52887553,53018625,53084161,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673986,53739521,53805057,53870593,53936129,54001665,54067201,54263809,54329345,54394881,54525953,54657025,54722561,54788097,54853633,55050241,55115777,55181313,55246849,55312385,55377921,55443457,55574529,55640065,55705601,55836673,55902209,55967745,56098817,56164353,56295425,56426497,56492033,56557569,56623105,56754177,56819713,56885249,57081857,57212929,57409537,57540609,57606145,57671681,57737217,57802753,57933825,58064897,58130433,58261505,58589185,58654721,58720257,58851329,59047937,59113473,59244545,59375617,59834369,60227585,60293121,60358657,60424193,60751873,61014017,61210625,61276161,61407233,61538305,61800449,61997057,62193665,62455809,62652417,62783489,62980097,63045633,63897601,64356353,64618497,64684033,65273857,65470465,65863681,66781185,67633153,68157441,68943873,69533697,69861377,69992449,70320129,70582273,70909953,71172098,71303170,71368708,71761922,71958529,72024065,72417282,72548356,72613889,72744961,73138178,73269249,73531393,73990147,74121220,74317825,74514434,74645506,74711043,74776577,74842115,74973185,75038723,75104259,75169795,75300865,75366404,75431939,75497474,75628548,75694081,75759619,75956226,76021761,76087299,76152835,76283906,76349442,76414978,76480515,76546050,76677121,76742658,76808193,76873729,76939265,77004801,77135874,77201409,77266946,77332482,77398018,77529090,77594625,77660161,77791233,77856771,77987842,78118913,78184450,78249986,78446593,78512130,78577667,78708738,78774273,78839811,78905345,78970884,79101953,79167491,79233025,79364098,79429633,79495170,79560705,79626242,79691779,79757313,79888387,79953923,80019458,80084994,80150529,80216067,80281603,80347138,80412673,80478210,80543746,80674819,80740354,80805890,80871426,80936961,81002499,81068035,81133570,81199106,81264643,81330178],"disable":[39256065,40828929,43778049,45481985,56360961,58523649,58916865,60620801,61669377,62849025,64159745,64290817,65667073,67764225,77791233],"deletedynamicproperty":[3801090,5242882,27131909,29687813,35454983,38010887,48693250,55181314,71303170,78577666],"disposing":[21430280,41353224,46989320],"dynamicpropertyindices":[55574529,61210625,66322438,71303169,73728004,78577665],"downloaded":[76873729],"disablejitcompilation":[72744961],"disposes":[8912897],"describes":[60358657,62980097,72548353,78970881],"determine":[58982401,65601537],"dispose":[2097153,2752513,2818049,3276801,3473409,3735553,3997697,4259841,4390913,4587521,5373954,5570561,5963777,7077889,8716291,8912898,9306114,9502722,9830402,11010051,11206658,11403266,15990785,21430283,24510470,25296904,41353227,46465031,46989323,51511305,51904515,56164355,56623107,70320129,71172097,73138177,74645505,75104258,75366401,75497473,76087299,76283905,77135873,77856770,78184449,78512129,79495169,79953922,80084993,80281602,81002498,81068035,81199105,81264642],"determines":[851969,1703937,1835009,1900545,1966082,2162689,2228225,2293761,2555905,2621441,2686977,2883586,3014657,3080194,3211266,3342338,3407873,3538949,3604481,3801090,3866625,3932161,4128769,4194305,4325377,4521989,4587521,4849665,5111809,5177345,5242883,5308417,5373953,5439489,5636097,5701633,5963777,5767169,5898241,6094849,6160385,6553602,6946817,7077889,7864321,8519681,8716290,9306114,9502722,9568257,9830402,9895940,9961474,10616833,11010049,11206658,11403266,11665409,18939905,26411009,27328513,27459585,28901377,31391745,33226753,33488897,36634625,41156609,42926081,43646978,46333953,53280769,53411842,58851330,59113476,63438849,66060289,68026369,68681729,68943873,70385665,70909953,71172097,71303170,71368706,71761921,72417281,72548353,72613889,73531393,74121218,74514433,74711041,75104258,75169793,75366401,75431937,75628546,75956229,76087297,76152833,76349444,76414978,76480513,76546049,76742657,77266945,77332481,77398017,77529092,77856769,77987845,78249985,78577667,78708737,78970881,79101953,79364097,79626241,79691777,79888385,79953922,80019457,80084993,80281602,80347137,80478209,80543746,80674817,80805890,80871425,81002498,81068034,81264642,81330177],"documentaccessflags":[45547521,59768839,76873732],"discards":[2162689,2228225,6029313,8257537,75169793,79691777],"defaultscriptusageattribute":[1769474,6488070,6881286,45547521,57671682,57933829,62259201,66781185,71499777,72286209,73990150,75759626],"datetimeoffset":[75038721],"datetime":[4915202,7340035,9895939,29294599,29556743,29818887,31588359,42008583,51052546,51445762,54067202,75038721,76349443,76939266,77529091,79364098,80412673],"donotenablevtablepatching":[80412673],"decimal":[3538945,4521985,4915202,7340035,9895939,13893639,30736392,31195144,31719432,33947656,45416456,51052546,51445762,54067202,75956225,76349443,77529091,77987841,79364098,80412673],"dataview":[48103425,69861378,75497473,79233025],"disables":[9240577,41746433,54657025,56229889,56360961,56688641,57737226,58130442,58523649,58916865,59834370,60293133,60620801,60817409,61276161,61407242,61669377,62062593,62193674,62849025,63045642,64159745,64290817,64421889,64684042,65273866,65667073,66387969,66453505,66650113,67567617,67698689,67764225,67895297,68878337,69533706,69992449,73924609,74448897,75104266,75235329,75366402,75563009,76087309,76611585,77201409,77856778,78512138,79953930,80281610,81002506,81068042,81133569,81264650],"demonstrates":[8585217,10747905,10944513,11075585,13959169,15990785],"dll":[1,393217,524289,655361,327681,786433,917505,983041,1114113,2359297,5505025,5832705,6029313,6225921,6291457,6356993,6422529,6488065,6619137,6684673,6750209,6815745,6881281,7012353,7143425,7208961,7274497,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9371649,9437185,9568257,9633793,9699329,9764865,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11075585,11141121,11272193,11337729,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,26935297,27000833,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28246017,28180481,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36306945,36372481,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38404097,38469633,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40632321,40697857,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,41943041,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43712513,43778049,43843585,44040193,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44761089,44892161,44957697,45023233,45088769,45219841,45285377,45416449,45481985,45613057,45744129,45809665,45875201,46137345,46333953,46465025,46530561,46792705,46858241,46989313,47054849,47120385,47185921,47251457,47316993,47513601,47644673,48037889,48234497,48365569,48889857,48955393,49086465,49217537,49283073,49414145,49741825,49807361,49872897,50135041,50331649,50528257,50593793,50659329,50724865,50790401,50921473,50987009,51118081,51380225,51511297,51970049,52101121,52297729,52428801,52559873,52625409,52953089,53149697,54132737,54198273,54460417,54591489,54919169,54984705,55508993,55771137,56033281,56229889,56360961,56688641,56950785,57016321,57147393,57278465,57344001,57475073,57868289,57999361,58195969,58327041,58392577,58458113,58523649,58785793,58916865,58982401,59179009,59310081,59441153,59506689,59572225,59637761,59703297,59768833,59899905,59965441,60030977,60096513,60162049,60489729,60555265,60620801,60686337,60817409,60882945,60948481,61079553,61145089,61341697,61472769,61669377,61734913,61865985,61931521,62062593,62128129,62259201,62324737,62390273,62521345,62586881,62717953,62849025,62914561,63111169,63176705,63242241,63307777,63373313,63438849,63504385,63569921,63635457,63700993,63766529,63832065,63963137,64028673,64094209,64159745,64225281,64290817,64421889,64487425,64552961,64749569,64815105,64880641,64946177,65011713,65077249,65142785,65208321,65339393,65404929,65536001,65601537,65732609,65667073,65798145,65929217,65994753,66060289,66125825,66191361,66256897,66322433,66387969,66453505,66519041,66584577,66650113,66715649,66846721,66912257,66977793,67043329,67108865,67174401,67239937,67305473,67371009,67436545,67502081,67567617,67698689,67764225,67829761,67895297,67960833,68026369,68091905,68222977,68288513,68354049,68419585,68485121,68550657,68616193,68681729,68747265,68812801,68878337,68943873,69009409,69074945,69140481,69206017,69271553,69337089,69402625,69468161,69599233,69664769,69730305,69795841,69861377,69926913,69992449,70057985,70123521,70189057,70254593,70320129,70385665,70451201,70516737,70647809,70713345,70778881,70844417,70909953,70975489,71041025,71106561,71172097,71237633,71303169,71368705,71434241,71499777,71565313,71630849,71696385,71761921,71827457,71892993,71958529,72024065,72089601,72155137,72220673,72286209,72351745,72417281,72482817,72548353,72613889,72679425,72744961,72810497,72876033,72941569,73007105,73072641,73138177,73203713,73269249,73334785,73400321,73465857,73531393,73596929,73662465,73728001,73793537,73859073,73924609,73990145,74055681,74121217,74186753,74252289,74317825,74383361,74448897,74514433,74579969,74645505,74711041,74842113,74907649,74973185,75038721,75104257,75169793,75235329,75300865,75366401,75431937,75497473,75563009,75628545,75694081,75759617,75825153,75890689,75956225,76021761,76087297,76152833,76218369,76283905,76349441,76414977,76480513,76546049,76611585,76677121,76742657,76808193,76873729,76939265,77004801,77070337,77135873,77201409,77266945,77332481,77398017,77463553,77529089,77594625,77660161,77725697,77791233,77856769,77922305,77987841,78053377,78118913,78184449,78249985,78315521,78381057,78446593,78512129,78577665,78643201,78708737,78774273,78839809,78905345,78970881,79036417,79101953,79167489,79233025,79298561,79364097,79429633,79495169,79560705,79626241,79691777,79757313,79822849,79888385,79953921,80019457,80084993,80150529,80216065,80281601,80347137,80412673,80478209,80543745,80609281,80674817,80740353,80805889,80871425,80936961,81002497,81068033,81133569,81199105,81264641,81330177],"deletes":[3801090,4456450,4784130,4980738,5242882,26673153,27131905,27590657,29687809,35454977,38010881,48693250,55181314,58064898,71303170,73269250,74973186,75694082,78577666],"dict":[8847364,10354690,13959172],"deleted":[26673153,27590657,33882113,34668545,35323905,37158913,38666241,38928385,39911425,41615361,43712513,46792705,49872897,51118081,77660161]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_101.json b/docs/Reference/fti/FTI_101.json index cc1482d34..419aea151 100644 --- a/docs/Reference/fti/FTI_101.json +++ b/docs/Reference/fti/FTI_101.json @@ -1 +1 @@ -{"examples":[9764865,13565953],"exact":[13631489,23789569],"external":[9109505,10092545,10944513,11141121,39911425,43057153,46465025,50200577,53936129,56557570,59244545],"enumerates":[37027842,37814274,38797314,39518210,40239106,41156610,42991617,43515905,47120386,47644674,48824322,56885249,57409537,58916866,59375618,59834370,60162050,60227586,60293122,60424194,60751874,61014018],"exception":[327685,3080194,3735553,4587521,5111815,6291457,6356993,6553601,7208961,7536641,8716289,8978433,9043969,10616833,10878977,12910599,13565953,16384010,17956865,18415617,18677763,19267585,19857409,20381697,20840449,20971521,21692417,22020097,22675466,23658497,24379395,26476545,28770305,32571395,34799619,38010883,39845890,40501249,41025546,41615362,42139649,42729476,43646980,43712513,44236801,44367873,44892162,45154307,45481986,45678593,45744150,46006276,46202887,46727172,47513601,47841281,48103425,48365577,48627714,48693249,49020930,49545220,50135044,51314691,51904513,52035585,56098817,58195969,58327041,58392577,58458122,58654756,58982411,59441155,60096513,60817409,60882945,61145090,61407234,61538306,61603842],"event":[589828,720900,917508,1900546,2097154,2162690,2228226,3932161,6750211,7012355,7733250,13828097,19398657,38010884,39387137,54657025,54722564,55181313,56229891,57212932,57671683,57933828,58851329,59506692,60358660,60817409,61407233,61538305,61603841],"enablevaluetaskpromiseconversion":[61145089],"eventconnection":[1900546,2162691,6750214,7012358,7733249,38010882,56229895,57212940],"export":[39059458,40632322,42074114,42205186,43909122,44957698,45088770,46268418,47054849,47775746,49610754,50790402,51642369,58195970,58327042,58392578,60096514,60817410,60882946,61407234,61538306,61603842],"executionstarted":[39845892,44892166,45744129,46202881,48365569,48627718,58458113,58654721,58982401],"eventsource":[2097154,2228226,6750209,7012353,13828097,19398657,38010882,57671687,57933835],"expensive":[13434881,60620802],"exposeruntimetype":[40042497,44171265,59637761],"efficiency":[61145089],"enabletaskpromiseconversion":[61145091],"eval":[31588353,32964609],"enum":[50593794,53477380,54198274,54722564,56950786,57147394,59113476,59179010,59441154,59572226,59637762,59965442,60358660,60620802,60686338,61145090,61210626,61341698,61669378],"exposehostobjectstaticmembers":[39059457,40632321,42074113,42205185,43581444,43909121,44957697,45088769,46268417,47185926,47775745,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"engin":[4784130,6881282,10878977,13565953,30474242,31260674,33226754,33947650,38600706,39059462,39649282,40632326,40828929,41549825,42074118,42205190,43909126,44105729,44630017,44957702,45088774,46268422,46530561,47054849,47251457,47579137,47775750,48168961,48758785,49348609,49610753,49676289,49938433,50528257,50790401,51183617,51642369,51838977,52297729,52953089,53805057,54329345,55967745,56295425,56623105,56819713,57016322,58195974,58327046,58392582,58720258,59965441,60096518,60817414,60882950,61145089,61407238,61538310,61603846],"engaging":[43646977,45744129,46202881,46727169,47906817,48365569,50135041,54001665,58458113,58654721,58982401],"enablenullresultwrapping":[9175042,39059457,40632321,42074113,42205185,42336260,43909121,44957697,45088769,45875206,46268417,47775745,49610753,50790401,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"exceeds":[50200577,53936129],"enhancements":[61145090],"earlier":[43057153,43450369,46465025,49414145],"expansion":[38993921,51511300,58589185],"exceptions":[3407873,5046273,5111809,12910594,58654721,58785793,59768833,61145089],"enableremotedebugging":[59179009,61145089],"extensionattribute":[7471107,7929859,7995395,8585219,9240579,9895939,16252931,17104899,17825795,18153475,18546691,19005443,19333123,19726339,20054019,20512771,21299203,59047939,61079555],"enumerations":[5046273,7077891,38010881,38535169,39321601,39976961,58785793],"exempt":[43450369,49414145],"exceeded":[59441154],"effect":[9175041,13631489,16187393,23068673,23789569,46333953,47316993,47382529,50987009,51052545,52822017,53411841,53477377,54591489,54722561,54853633,55443457,55574529,56950785,61669377],"events":[65538,131074,196610,262146,327682,13828097,19398657,39321601,54067201,54722561,56426497,57999361,58261505,58654721,58851329,59506689,60358657],"execution":[3735555,4587523,6291459,6356995,6553603,7208965,7536643,8716291,8978435,13631490,14548993,15466497,15532033,15859713,16187394,16908289,17956865,19529729,20971521,22216705,22806529,23068674,23789570,23920641,24641537,26279937,26869761,27197441,28770305,30867457,31588353,32112641,32374785,32964609,33488897,34078721,35061761,37355521,37748737,38010883,38404097,39059457,39845890,40632321,42074114,42205185,43909121,44367873,44892162,44957697,45088769,45678595,45744129,46202881,46268417,47775745,48365569,48627714,50200577,50724865,51904515,52035585,53936129,54460417,56098817,58064898,58195972,58261505,58327044,58392580,58458113,58654722,58982402,59441154,60096516,60817416,60882948,61407236,61538308,61603844],"enabled":[26804225,27656193,28901377,29622273,43778049,50593793,51249153,52887553,54198273,54853637,55312385,57147393,59179011,61145093,61669380],"enforces":[4784129,6291457,6356993,6553601,6881281,7536641,8716289,8978433,30277633,31522817,31916033,32309249,33161217,33685505,34144257,34734081,35454977,36306945,37224449,38207489,40566785,44695553,45613057,57016322,58392577,58720257,60096513,60882945,61407233,61538305,61603841],"enables":[4718593,30605313,38404098,39059466,40042497,40632330,41353217,42074125,42205194,42336257,42532865,42795009,43057153,43450369,43909130,44171265,44957706,45088778,45219841,45416449,45875201,46268426,46333953,46465025,47382529,47710209,47775754,47906817,48234497,48300033,48889857,49414145,50200577,51052545,51511297,52035585,52559873,52822017,53280769,53936129,54001665,54525953,54853634,56098817,58195978,58261506,58327050,58392586,59572225,60030977,60096522,60817421,60882954,60948481,61276161,61407242,61538314,61603850],"enableruntimeinterruptpropagation":[42074113,56098820,60817409],"extendedhostfunctions":[5046274,7077889,7143426,7602177,8060930,8126466,8257537,8323074,8454145,8650754,8781829,8912897,9043969,9306113,9437186,9568257,9699329,9830401,10289153,10354689,10420225,10485761,10616833,10682369,10878977,11075585,11141121,11206657,11337729,11665409,12058625,12189697,12255233,12582913,12910593,13565953,30932993,31457281,38010881,58785800,59768833],"enablefileloading":[59572225],"exceeding":[50200577,51511297,53936129],"encapsulated":[3014657,4521985,55705601,60227585],"expect":[47054849,51642369,56492033],"enumerablet":[8126466,9306113,9830402],"enablejitdebugging":[61669377],"extension":[7471106,7929858,7995394,8585218,9240578,9895938,13828098,16252930,17104898,17825794,18153474,18546690,19005442,19333122,19398658,19726338,20054018,20512770,21299202,38010881,38535169,39059458,40632322,42074115,42205186,43909122,44105730,44957698,45088770,46268418,47579138,47775746,48300034,52822021,53805058,54329346,54525954,55967746,56295426,56623106,58195970,58327042,58392578,59047937,60096514,60817411,60882946,61079553,61407234,61538306,61603842],"errors":[50200577,50724865,53936129,54460417],"execute":[3735556,4587524,6291460,6356996,6553604,7208965,7536644,8716292,8978436,13238273,13762561,14680065,15204359,15466503,15859714,16187399,16908295,18939913,19529730,20250625,21102593,21823489,22216713,23068681,23920649,26476551,27197442,30867458,31588354,32112642,32964610,33488901,33882113,35061765,35586049,37748742,58195972,58327044,58392580,60096516,60817413,60882948,61407237,61538309,61603845],"enforceanonymoustypeaccess":[39059457,40632321,42074113,42205185,43057156,43909121,44957697,45088769,46268417,46465030,47775745,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"effective":[50200577,50593793,51249153,52887553,53936129,59441154,60620802],"enginename":[28180485,28901381,29622277,43712518,45744129,46202881,47513606,47841284,48365569,58458113,58654721,58982401],"exposed":[2424833,7143425,8060929,8126465,8257537,8323073,8650753,8912897,9043969,9306113,9437185,9568257,9699329,9830401,10289153,10354689,10420225,10485761,10616833,10682369,10878977,10944513,11075585,11141121,11206657,11337729,11665409,12058625,12189697,12255233,12582913,12713985,12910593,13041665,13434884,13500417,13565953,13697025,13828100,14286849,14483457,15007745,15138817,15269889,16515073,18284545,18808833,19136513,19398660,19922945,20709377,21037057,21430273,21889025,23199745,24248321,25100289,38010884,39059458,40042497,40632322,42074114,42205186,43581441,43909122,44171265,44433409,44957698,45088770,46268418,47185921,47316993,47775746,50659329,52822018,53280770,53411841,54591489,55312385,57802754,58195970,58327042,58392578,59113473,59506689,59768833,59965445,60096514,60358657,60817410,60882946,61407234,61538306,61603842],"exposes":[65537,131073,196609,262145,327681,393217,458753,524289,655361,786433,851969,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735582,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587550,4653057,4718593,4784129,4849665,4980737,5046273,5111809,5177345,5439489,6291486,6357022,6553630,6881281,7208990,7536670,7798785,8716318,8978462,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13303809,13369345,13500417,13697025,13828097,13959169,14024705,14090241,14155777,14286849,14417921,14483457,14876673,14942209,15007745,15138817,15269889,15597569,15925249,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19136513,19398657,19660801,19922945,19988481,20119553,20643841,20709377,20774913,21037057,21364737,21430273,21495809,21889025,22413313,22478849,22609921,23199745,23265281,23396353,24248321,25100289,31064072,32047112,32440322,33292296,33423368,33619970,34209800,34537473,34603010,34996225,35258376,35389441,35717122,36634625,37027841,37093377,37617665,37814273,38141953,38404097,38797313,38928385,38993921,39059457,39256065,39387137,39518209,39780353,39911425,40239105,40304641,40435713,40632321,40697857,41156609,41222145,41484289,42008577,42074113,42205185,42532865,42598401,43188225,43909121,44957697,45088769,45416449,45744129,45809665,46137345,46202881,46268417,46596097,46858241,46923777,47120385,47644673,47775745,47972353,48365569,48824321,51576833,52428801,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55246849,55312386,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57016321,57212929,57540609,57671681,57802753,57933825,57999361,58130433,58195998,58261505,58327070,58392606,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59244545,59310081,59375617,59506689,59703297,59768833,59834369,59899905,60030977,60096542,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60751873,60817438,60882974,60948481,61014017,61079553,61276161,61407262,61472769,61538334,61603870],"enablestandardsmode":[61669378],"explicitly":[46792705,47054849,51642369,56492033,59572225],"exits":[12910593],"excessive":[50200577,50724865,53936129,54460417],"extract":[10616833],"exemption":[43450369,49414145],"evaluation":[54853633],"executes":[3735560,4587528,6291464,6357000,6553608,7208969,7536648,8716296,8978440,13238273,13762561,14680065,15204353,15466497,15859713,16187393,16908289,18939905,19529729,20250625,21102593,21823489,22216705,23068673,23920641,26476545,27197441,30867457,31588355,32112641,32964611,33488900,33882115,35061764,35586051,37748741,58195976,58327048,58392584,60096520,60817417,60882952,61407240,61538312,61603848],"exposing":[38010882,59637761,59965441],"equivalent":[42795009,48889857,49610753,50790401],"enforced":[50724865,54460417],"equality":[42336257,45875201,55312386,59637761],"enforce":[43057154,46465026,52101121,58392577,58720257,60096513,60882945],"enablemodeless":[4718593,30605316,60948481],"encoding":[27000833,29229057,36634627,39256066,44761103,51445774,59310082,60489731],"experimental":[59179009,61145089],"enabletoplevelawait":[42532865,54853636,57147393,61276161],"enableinterruptpropagation":[38404097,52035588,58261505],"enablestringifyenhancements":[61145089],"extensions":[2293763,2949121,7471106,7929858,7995394,8585218,9240578,9306113,9895938,16252929,17104897,17825793,18153473,18546689,19005441,19333121,19726337,20054017,20512769,21299201,22740994,31784962,32505858,34471937,34734082,35127298,36044802,38010881,38207490,38862849,39124993,39190530,40173569,41222145,41287681,41811969,42270722,45613058,53870593,58195969,58392577,59047943,60096513,60882945,61079553,61407233,61538305,61603841,61669377],"enableautohostvariables":[39059457,40632321,41353220,42074113,42205185,43909121,44957697,45088769,45219846,46268417,47775745,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"element":[2752515,3407877,5046277,7602178,9502722,9699330,9961477,10158085,10289154,10354691,10420226,10485762,10682370,10747910,11075586,11206658,11337730,11665410,12058626,12189698,12582914,16056322,17301506,17891330,24903682,34406402,46858241,57540612,58785797,59768837,60751873],"ending":[37093377,52756481,53673985],"enhanced":[38010881,55705601],"equals":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490370,2555906,2162689,2228225,2883586,3014657,3276801,3342338,3407873,3473409,3538946,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849666,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,42336257,45875201,51576833,53084161,53477378,53673985,53870593,54067201,54722562,55115777,55312386,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113474,59244545,59310081,59506690,59637761,59703297,59768833,59899905,60096513,60227585,60358658,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"enabledynamicmoduleimports":[59179009,61145089],"enabledatetimeconversion":[61145089],"elements":[2752513,3670018,13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16056324,16187393,16908289,17301508,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537,39059457,40632321,42074113,42205185,43450370,43909121,44957697,45088769,46268417,46858241,47775745,49414146,57540610,58195969,58327041,58392577,60096513,60751874,60817409,60882945,61407233,61538305,61603841],"externally":[24444929,24969217,25493505,25559041,25821185,26017793,26083329,26542081,26607617,26935297,27525121,28311553,28704769,28966913,29491201,29556737,29949953,30736385,30998529,31391745,32178177,33095681,34930689,35848193],"engine":[327681,2293763,2949124,3735554,4587524,4784130,4980742,5111809,5242881,6291462,6356998,6553606,6881282,7208965,7536646,7995400,8585224,8716294,8978438,9699329,9895944,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,11927553,12058625,12189697,12320769,12582913,12648449,12713985,12845057,13041665,13107201,13172737,13238273,13303809,13369345,13434887,13500417,13631491,13697025,13762561,13828098,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14680065,14745601,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15466497,15532033,15597569,15859713,15925249,16187394,16252936,16384001,16777217,16842753,16908289,17235969,17367043,17563649,17760257,17825800,17956866,18087937,18350081,18415617,18612225,18677761,18743297,18874370,18939905,19070977,19136513,19267585,19333128,19398658,19464193,19529729,19660801,19791874,19857409,19922945,19988481,20119553,20250625,20316163,20381697,20447233,20512776,20643841,20709377,20774913,20971522,21037057,21102593,21233665,21364737,21430273,21495809,21757953,21823489,21889025,22085633,22151170,22216705,22413313,22478849,22609921,22740994,22806529,23068674,23199745,23265281,23396353,23461889,23789571,23920641,23986177,24051713,24248321,24444929,24576001,24641537,24772609,24969217,25100289,25362433,25493505,25559041,25755650,25821185,25952260,26017794,26083330,26279938,26411009,26476545,26542081,26607617,26673156,26804230,26869761,26935298,27066370,27131905,27197441,27262977,27394049,27525121,27590660,27656198,27721730,27787265,27918337,27983873,28049409,28114948,28180484,28246019,28311553,28377089,28442625,28573698,28704769,28770306,28835844,28901382,28966913,29032450,29097988,29229057,29294593,29360132,29491201,29556738,29622278,29753346,29818883,29884420,29949953,30015492,30081026,30146561,30277633,30343169,30408707,30736386,30867457,30998529,31064065,31129603,31391745,31522818,31588354,31784961,31850499,31916033,31981570,32047105,32112641,32178177,32243714,32309251,32374785,32440321,32505858,32571393,32636930,32702466,32768001,32833539,32964610,33030145,33095682,33161218,33292289,33423361,33488897,33554434,33619969,33685507,33882113,34013185,34078721,34144258,34209793,34275331,34340865,34471939,34603009,34668545,34734084,34930689,35061761,35127300,35192833,35258369,35454979,35520514,35586049,35717121,35848193,36044803,36110338,36306946,36372481,36503555,36569089,36831234,37027842,37224451,37355521,37486594,37748737,37814274,37879809,38010883,38207492,38273026,38338573,38469635,38731777,38797314,38862852,39059461,39124998,39190532,39321603,39452673,39518210,39845889,39976963,40042498,40173574,40239106,40370183,40501249,40566787,40632325,40763394,40828929,40960006,41025537,41156610,41287686,41353218,41615361,41746435,41811974,42074115,42139649,42205189,42336257,42467329,42729473,42795010,43057153,43122690,43450369,43581441,43646977,43712515,43778051,43909124,44105729,44171266,44236801,44367874,44433410,44630017,44695554,44892161,44957700,45023233,45088772,45154306,45219842,45481985,45613059,45678595,45744130,45875201,46006273,46202881,46268420,46333954,46465025,46530561,46727169,47054850,47120386,47185921,47316993,47513602,47579137,47644674,47710210,47775747,47841283,47906818,48168961,48234498,48300033,48365570,48496642,48693249,48758785,48824322,48889858,48955394,49283074,49348609,49414145,49610754,49676289,49741826,49938433,50069506,50200577,50528258,50593794,50659330,50724865,50790402,51052546,51183617,51249153,51314690,51511297,51642370,51773441,51838978,51904515,52297729,52494338,52822018,52953089,53280770,53411841,53805057,54001666,54329345,54525953,54788098,55050247,55377921,55574529,55967745,56098817,56295425,56623105,56819713,57016323,57344001,57540609,58064897,58195977,58261510,58327045,58392591,58458115,58654722,58720258,58916866,58982401,59047939,59375618,59768833,59834370,59965441,60096527,60162050,60227586,60293122,60424194,60751874,60817429,60882954,61014018,61079556,61145095,61407249,61472769,61538321,61603852,61669378],"enable":[26804225,27656193,28901377,29622273,30605319,41353217,42336257,43057153,45219841,45875201,46465025,52035585,54853634,56098817],"endcpuprofile":[4980737,7208961,25165828,38731780,58261505,60817409],"enumerator":[2752513,57540609],"expected":[6029313,6488065,7274497],"existing":[5046273,6094849,6225921,7143425,30932993,58785793],"extends":[38010881,55705601],"error":[983042,12910593,16384002,20381698,22020098,22675458,32571394,34799618,38010881,40501249,41615361,42139649,44236802,45481985,45744131,46202882,48103426,48365572,48693250,49020929,58458116,58654726,58982404,59441153,61145090],"environment":[38010881,39976964,55377921,55705601,61407234,61538306,61603842],"expressions":[13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16187393,16908289,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537,31588353,32964609],"empty":[3407873,5046273,10944515,13631489,17367041,20316161,23789569,25165825,28246017,34865153,38731777,39976961,43778050,58785793,59768833,60686338,61472770],"ecmascript":[41484289,48037889,52428801,54853633],"evaluated":[13172737,13893633,14745601,20447233,21233665,22085633],"endtimestamp":[37093377,52756484,53673985],"evaluates":[3735559,4587527,6291463,6356999,6553607,7208968,7536647,8716295,8978439,13172737,13631489,13893633,14548993,14745601,15073281,15532033,19464193,20447233,21233665,22085633,22806529,23789569,24641537,32374788,33030147,34078724,34668547,37355525,39452673,58195975,58327047,58392583,60096519,60817416,60882951,61407239,61538311,61603847],"extended":[5046273,7077889,7143425,7602177,8060929,8126465,8323073,8454145,8650753,8781825,9437185,30932993,31457281,38010882,53870593,58785794,59506689],"enableallloading":[59572225],"enablewebloading":[59572225],"example":[7143426,8060930,8126465,8257537,8323073,8650753,8912897,9043969,9306113,9437185,9568257,9699329,9830401,10289153,10354689,10420225,10485761,10616834,10682369,10878977,10944513,11075585,11141121,11206657,11337729,11665409,12058625,12189697,12255233,12582913,12910593,13565953,52690945,53149697,53542913,54067201,54263809],"efficient":[13434881,47382529,60620801],"enforcerelativeprefix":[59572225],"evaluate":[3735556,4587524,6291460,6356996,6553604,7208965,7536644,8388609,8716292,8978436,13172738,13631495,13893634,14549000,14745602,15073288,15532040,15859713,19464202,19529729,20447234,21233666,22085634,22806538,23789577,24641546,26476545,27197441,30867457,31588353,32112641,32374789,32964609,33030145,34078725,34668545,37355526,39452680,58195972,58327044,58392580,60096516,60817413,60882948,61407236,61538308,61603844],"eventhandler":[720903,917511],"elementt":[9699330,10289154,10420226,10485762,10682370,11075586,11206658,11337730,11665410,12058626,12189698,12582914],"environments":[58392577,60096513,60882945],"enumerable":[7143426,8060930,8126466,9306113,9830401,18153473,19005441,52822017,53280769],"evaluatedocument":[3735555,4587523,6291459,6356995,6553603,7208963,7536643,8716291,8978435,13172741,13893637,14745605,20447239,21233671,22085639,33030147,34668547,58195971,58327043,58392579,60096515,60817411,60882947,61407235,61538307,61603843],"easy":[55377921],"entered":[41943041],"entry":[12255233],"executing":[15728641,15794177,16580609,17367041,19202049,20316161,28246017,43778049,47710209,48234497,50593793,52559873,61145089],"enablesamplecollection":[54198273],"expression":[13172737,13631489,13893633,14548993,14745601,15073281,15532033,15859713,19464193,19529729,20447233,21233665,22085633,22806529,23789569,24641537,27197441,30867457,31588354,32112641,32964610],"executecommand":[3735553,4587521,6291458,6356994,6553602,7208962,7536642,8716289,8978433,15859716,19529734,27197447,30867463,31588358,32112647,32964614,58195969,58327041,58392578,60096514,60817410,60882945,61407234,61538306,61603841],"end":[25165825,38731777,51576833,52428801,52756481,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55246849,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57016321,57212929,57540609,57671681,57802753,57933825,57999361,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59244545,59310081,59375617,59506689,59703297,59768833,59834369,59899905,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60751873,60817409,60882945,60948481,61014017,61079553,61276161,61407233,61472769,61538305,61603841],"executable":[38993921,39911425,49479682,52690950,58589185,59244545],"eventargs":[58851333],"enabledebugging":[59179010,61145091,61669379],"engines":[13434881,13631489,15859713,16187393,19529729,23068673,23789569,24969217,25493505,26083329,26542081,26607617,26935297,27197441,28311553,28966913,29491201,29949953,30736385,30867457,30998529,31588353,32112641,32178177,32964609,34930689,35848193,38010883,38535169,39976963,40566786,45023233,46530561,50593794,52494338,52953089,55377923,58195969,58720257,59047937,59965441,60882945,60948481,61079553,61603841],"executedocument":[3735555,4587523,6291459,6356995,6553603,7208963,7536643,8716291,8978435,13238277,13762565,14680069,20250631,21102599,21823495,33882115,35586051,58195971,58327043,58392579,60096515,60817411,60882947,61407235,61538307,61603843],"exhaustive":[14352390,22937606,23986182,27918343,42467335],"enhance":[61669377],"eligible":[59572225],"encounter":[57147393],"exists":[25362433,26411009,27066369,27983873,28049409,28377089,28573697,29294593,30343169,31981569,34013185,37879809,47316993,53411841,53477377,54591489,54722561,56950785],"exhausting":[51511297],"executed":[13238273,13762561,14680065,20250625,21102593,21823489,23461889,24051713,24444929,24772609,24969217,25362433,25493505,25559041,25821185,26017793,26083329,26411009,26542081,26607617,26935297,27066369,27131905,27394049,27525121,27721729,27983873,28049409,28311553,28377089,28442625,28573697,28704769,28966913,29032449,29294593,29491201,29556737,29753345,29949953,30146561,30343169,30736385,30998529,31391745,31981569,32178177,32768001,33095681,34013185,34930689,35848193,36569089,37879809,39321601,54853633,59703297],"explicit":[13828098,19398658],"enumeration":[3014657,4521985,38010881,38535169,39321601,39976961,42074114,50593794,52822019,53280771,54198274,55705601,56950786,57147394,59179010,59441154,59572226,59637762,59965442,60227585,60620802,60686338,60817410,61145090,61210626,61341698,61669378],"equal":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61407233,61472771,61538305,61603841],"expose":[12713985,13041666,13303809,13500418,13697025,13828099,13959169,14286849,14417921,14483457,15007745,15138817,15269889,19136514,19398659,19922945,20119553,20709377,21037057,21430273,21889025,22609921,23199746,23396353,24248321,25100289,41549825,43057153,43581441,44433409,46465025,47185921,47251457,50659329,54067201,59768833],"enabling":[50200577,53936129],"enums":[7077889,13631489,23789569,53477377,55312385,59113473],"excluded":[52822017,53280769],"errordetails":[44236806,45744129,46202881,48103430,48365569,48693252,58458113,58654721,58982401]} \ No newline at end of file +{"enablevaluetaskpromiseconversion":[76939265],"enabledatetimeconversion":[76939265],"external":[9633793,10878977,11468801,12582913,55246849,60817409,66191362,66387969,71041025,72220673,77398017],"executed":[14483457,14548993,16515073,21626881,24641537,26607617,36044801,36175873,36241409,36372481,37552129,37748737,37945345,38076417,38207489,38273025,39387137,39518209,40042497,40108033,40173569,40239105,40435713,40894465,41025537,41287681,41418753,42074113,42401793,42598401,43057153,43122689,43515905,43581441,44040193,44302337,44433409,45023233,45744129,45875201,46858241,47513601,48037889,48365569,49217537,49545217,49741825,49807361,50659329,50987009,51970049,52625409,54460417,54984705,57016321,71172097,76611585],"enforceanonymoustypeaccess":[57737217,58130433,60293121,60817414,61407233,62193665,63045633,64684033,65273857,66387972,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"enhancements":[76939266],"enableautohostvariables":[57737217,58130433,60293121,61407233,62062596,62193665,63045633,64684033,65273857,67567622,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"empty":[3538945,4521985,12582915,15663105,18219009,23658497,26542081,35979265,42729473,46923777,48955394,52232193,52428801,60162049,64552961,75956225,77987841,79757314,81330178],"example":[7995394,8585217,8847361,8912897,8978433,9109506,9175041,9961473,10158081,10223617,10354689,10747906,10551297,10878977,10944513,11075585,11730945,11862017,11927553,12124161,12386305,12517377,12582913,12845057,12910593,13631489,13893633,13959169,14221313,15204353,15990785,19005441,64094209,66584577,67829761,69402625,74121217],"extensions":[2490371,3670017,8060930,8192002,8323074,8781826,10092546,10420226,11075585,17039361,17170433,17956865,18415617,18808833,19398657,19922945,20054017,21233665,22740994,25231361,26935297,42270722,45219842,45547521,50397186,50593794,51576833,52166658,52363265,52756481,52953090,53149698,54132738,54263809,55443457,59047937,60424193,63504386,75104257,76677127,77856769,78774273,79888385,79953921,80281601,80412673,81002497,81068033,81264641],"exhausting":[70975489],"evaluated":[14155777,19857409,21037057,21364737,25427969,26738689],"evaluates":[3735559,5373959,8716295,9306119,9502727,9830407,11010056,11206663,11403271,14155777,15728641,18022401,18219009,19464193,19857409,21037057,21364737,22872065,24313857,25427969,26542081,26738689,28639233,45088769,47841283,52822021,53018628,55115779,57409540,75104263,76087304,77856775,78512135,79953927,80281607,81002503,81068039,81264647],"engine":[1507329,2490371,3014657,3670020,3735554,5373956,5898242,6356993,6553602,7077894,8716294,8781832,9306118,9502726,9830406,10092552,10420232,10551297,11010053,11206662,11403270,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13172737,13238273,13303815,13434881,13500417,13631489,13697025,13828097,13893633,14024705,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14745601,14811137,14942209,15073281,15204353,15269890,15335425,15400961,15466497,15532033,15597569,15663107,15728641,15794177,15859713,15925249,16056321,16187393,16384001,16515073,16580609,16711682,17039368,17104898,17170440,17235969,17301505,17563649,17760257,17825793,17891329,17956872,18022401,18087937,18219011,18284545,18546689,19202049,19267585,19464193,19726337,19857409,19988481,20119553,20250625,20316161,20381697,20512769,20578305,20709377,20774913,21037057,21102593,21299201,21364737,21430274,21495809,21561345,21626881,21692417,21757954,22085634,22216705,22478849,22544385,22609921,22740994,22872065,22937601,23003137,23134209,23199746,23527425,23592961,23658499,23855105,24117249,24182785,24313857,24379393,24444929,24641537,24903681,25100289,25231368,25296897,25427969,25886722,26017793,26476545,26542083,26607617,26738689,26804226,27066369,27983873,28049409,28639233,29360129,35520514,36044801,36175873,36241409,36372481,36700162,37093380,37552129,37748738,37879810,37945345,38076417,38207490,38273025,38404097,38535172,39124993,39256070,39387137,39452673,39518209,39714818,40042497,40108033,40173569,40239106,40304644,40435714,40501249,40763395,40828934,40894465,41025537,41156610,41287681,41353218,41418753,41680899,41877507,41943043,42074114,42205188,42270724,42401793,42467330,42532868,42598402,42729473,42926083,42991619,43122689,43057153,43319297,43515905,43581441,43778054,43843586,43909121,44040193,44171265,44236802,44302337,44433410,44498948,44564482,44695553,44761092,45023234,45088769,45219844,45350913,45481990,45613057,45547523,45744129,45809667,45875201,46006273,46333954,46530562,46858241,46989314,47054852,47120385,47185922,47251458,47513602,47644673,47710209,47841281,48037889,48168961,48234499,48365569,48431105,48496641,48889859,48955395,49086468,49152001,49217537,49283073,49414147,49545219,49741825,49807362,50003969,50135042,50331650,50397185,50528258,50593796,50659329,50724865,50790402,50855937,50921476,50987009,51183617,51314689,51380225,51576838,51642369,51707905,51773441,51904514,51970049,52035585,52101123,52166658,52232195,52297731,52363267,52428803,52559874,52625410,52822017,52953091,53018625,53149699,53608450,53673987,53870593,54132740,54198273,54263812,54460417,54525954,54722561,54919171,54984706,55115777,55377921,55443462,55836685,56033282,56164354,56229890,56360961,56623106,56688642,56885250,56950785,57016321,57147393,57278466,57409537,57737221,57868290,57999362,58130436,58327041,58458113,58523650,58720263,58785798,58916866,58982403,59047942,59244546,59637762,59703297,59899905,60162050,60293123,60358658,60424198,60555265,60620801,60751874,60817409,60882945,61407235,61669378,62062594,62128130,62193669,62259201,62324737,62390273,62455810,62717954,62783490,62849025,62980097,63045636,63176705,63569921,63897602,63963138,64159746,64290818,64356354,64421889,64552962,64684037,64815106,65273860,65404929,65601539,65667073,65994753,66125831,66387969,66453506,66519041,66650114,67043329,67108865,67239939,67305474,67502081,67567618,67633154,67764226,68091905,68222979,68288514,68419586,68485121,68812801,68878337,69009409,69140482,69206017,69533700,69664769,69795842,70254593,70647809,70713345,70975489,71041025,71106561,71237634,71630850,71827457,72089601,72286209,72351746,72548353,72679425,72810497,73138178,73662465,74055681,74252289,74383361,74448897,74579970,74645506,74776578,74907649,75104273,75235330,75366406,75497474,75563010,76087317,76283906,76414977,76677123,76939272,77135874,77463553,77856777,77922305,77987841,78118914,78184450,78381057,78446593,78512133,78774276,78905347,78970882,79101955,79495170,79953932,80084994,80281615,80412674,80805890,81002511,81068042,81199106,81264657,81330177],"exceeding":[70975489,71041025,72220673],"executecommand":[3735553,5373953,8716289,9306114,9502721,9830402,11010050,11206658,11403266,16580612,23003142,43843590,44564486,45613063,49283079,51380231,75104258,76087298,77856769,78512129,79953921,80281602,81002498,81068033,81264642],"expansion":[61014017,70975492,76152833],"extends":[45547521,80543745],"enableallloading":[76873729],"enablestandardsmode":[80412674],"enumerablet":[8585218,8978434,11075585],"extendedhostfunctions":[4521986,7733249,7929857,7995394,8454145,8585217,8847362,8912897,8978434,9109506,9175042,9371653,9961473,10158081,10223617,10354690,10747905,10551297,10878977,10944513,11075585,11730945,11862017,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,13959169,14221313,15204353,15990785,19005441,45547521,46596097,48562177,75956232,77987841],"expressions":[14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,18022401,18219009,19464193,19857409,21037057,21364737,21561345,21626881,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129,43843585,44564481],"expose":[14024705,14286849,14352385,14417921,15335425,15466497,15794177,15925250,16711683,17760258,17891329,20250625,20381697,20512769,21102593,21692418,22544386,22609921,23199747,24117249,24379393,24903681,26017793,26476545,27066369,27983873,56033281,60817409,61734913,61931521,62324737,62717953,66387969,67043329,74121217,77987841],"elementt":[10551298,11730946,11927554,12124162,12386306,12517378,12845058,12910594,13631490,13893634,14221314,15204354],"enums":[7929857,18219009,26542081,73990145,75038721,75759617],"enablearrayconversion":[76939265],"explicitly":[57868289,65536001,69140481,76873729,78708737],"enumerations":[4521985,7929859,45547521,48103425,49545217,51707905,52232193,75956225],"enabling":[71041025,72220673],"element":[3211267,3538949,4521989,7733250,10027013,10158083,10485766,10551298,11337730,11730946,11927554,12124162,12386306,12517378,12845058,12910594,13041669,13631490,13893634,14221314,15204354,16777218,16908290,18743298,20447234,22282242,25821186,45154306,58589185,75956229,76414980,76939265,77987845,78184449],"exact":[18219009,26542081],"event":[655364,983044,1114116,1703938,2293762,2555906,2686978,4849665,7471106,7798787,9764867,16711681,23199745,45547524,61800449,68943875,70516737,70909956,71696385,72613891,73531396,74842116,75104257,76087297,76546049,79167492,79953921,80216068,81264641],"eventargs":[76546053],"enableinterruptpropagation":[59834369,73924612,75366401],"enablemodeless":[9240577,41746436,81133569],"execute":[3735556,5373956,8716292,9306116,9502724,9830404,11010053,11206660,11403268,14483457,14548993,14942215,15269895,16187399,16384007,16515073,16580610,21561353,21626881,23003138,23855113,24641537,26607617,26804233,29360137,43843586,43909125,44564482,44695553,45613058,47120391,48496645,49283074,51314689,51380226,53870598,75104261,76087301,77856772,78512132,79953925,80281604,81002500,81068036,81264645],"executedocument":[3735555,5373955,8716291,9306115,9502723,9830403,11010051,11206659,11403267,14483461,14548997,16515077,21626887,24641543,26607623,44695555,51314691,75104259,76087299,77856771,78512131,79953923,80281603,81002499,81068035,81264643],"ending":[53805057,71434241,80019457],"exceeds":[71041025,72220673],"exits":[15990785],"equivalent":[61669377,62128129,67764225,71237633,76939266],"enumerates":[4456450,4784130,4980738,28180481,32243713,53608450,54525954,55574530,56885250,59244546,60030977,60489729,60751874,61210626,62521345,62783490,63111169,63897602,64356354,65339393,66322433,67371009,67633154,71303170,73138178,73269250,73728001,74645506,74973186,75497474,75694082,76283906,77135874,78184450,78577666,79495170,80084994,81199106],"externally":[36044801,36175873,37552129,37748737,38076417,38207489,40042497,40108033,40435713,42401793,43122689,44040193,45744129,45875201,46858241,47513601,48037889,48365569,49217537,49807361,50987009,51970049,54460417,54984705],"efficient":[13303809,67895297,79560705],"enablefileloading":[76873729],"eventhandler":[655367,983047],"effect":[10616833,15269889,18219009,26542081,26804225,56688641,62259201,65077249,66650113,67895297,71565313,72286209,73990145,74055681,74842113,75235329,76021761,76611585,77070337,80412673],"enabledynamicmoduleimports":[76939265,77004801],"enforcerelativeprefix":[76873729],"entry":[13959169],"earlier":[56360961,60817409,62849025,66387969],"encounter":[72744961],"executes":[3735560,5373960,8716296,9306120,9502728,9830408,11010057,11206664,11403272,14483457,14548993,14942209,15269889,16187393,16384001,16515073,16580609,21561345,21626881,23003137,23855105,24641537,26607617,26804225,29360129,43843587,43909124,44564483,44695555,45613057,47120385,48496644,49283073,51314691,51380225,53870597,75104264,76087305,77856776,78512136,79953928,80281608,81002504,81068040,81264648],"equal":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330179],"endtimestamp":[53805057,71434244,80019457],"enabletoplevelawait":[61276161,72744961,76611588,77201409],"experimental":[76939265,77004801],"exempt":[56360961,62849025],"enabletaskpromiseconversion":[76939267],"ecmascript":[65470465,70123521,71958529,76611585],"enumerator":[3211265,4063234,4259842,4456450,4784130,4980738,5767173,23068673,24772612,24838147,25493508,26148865,28377091,33423364,35913731,36503556,37617667,37814276,47775747,49610756,51707906,70320131,73269250,74973186,75431941,75694082,76414977,80936963],"engaging":[58916865,60358657,60555265,60948481,62455809,62980097,64290817,70647809,72548353,78905345,78970881],"evaluatedocument":[3735555,5373955,8716291,9306115,9502723,9830403,11010051,11206659,11403267,14155781,19857413,21037063,21364741,25427975,26738695,47841283,55115779,75104259,76087299,77856771,78512131,79953923,80281603,81002499,81068035,81264643],"encapsulated":[3342337,5963777,80084993,80543745],"execution":[3735555,5373955,8716291,9306115,9502723,9830403,11010053,11206659,11403267,15269890,15728641,16187393,16384001,16580609,17104897,18219010,19464193,22872065,23003137,23855105,25886721,26542082,26804226,28639233,29360129,36700161,37879809,38404097,43843585,43909121,44564481,45547523,45613057,48496641,49283073,50135041,51380225,52822017,53018625,53870593,57409537,57737217,58130433,58327042,58982403,59834369,60293122,60358657,61407233,62193665,62455809,62980097,63045633,64684033,65273857,65601539,69533697,71041025,71106562,71827457,72220673,72548354,72679426,73400321,73793538,73924609,74448897,75104260,75366401,76087304,77791234,77856772,78512132,78905345,78970882,79953924,80281604,81002500,81068036,81264644],"enforced":[71827457,73400321],"enumeration":[3342337,5963777,45547521,48103425,49545217,51707905,52232193,60293122,69861378,72744962,75235331,75563011,76021762,76087298,76873730,76939266,77004802,77660162,77791234,78118914,78446594,79233026,79429634,79560706,79757314,80084993,80150530,80412674,80543745],"explicit":[16711682,23199746],"enforce":[60817410,66387970,72155137,80281601,80805889,81002497,81068033],"excessive":[71041025,71827457,72220673,73400321,76939265],"enginename":[42205189,43778053,45481989,60358657,62455809,62980097,67239942,68222980,72351750,72548353,78905345,78970881],"exceptions":[3014657,3407873,3538945,4521985,15990786,72548353,75956225,76939265,77987841,78970881],"expression":[14155777,15728641,16580609,18022401,18219009,19464193,19857409,21037057,21364737,22872065,23003137,24313857,25427969,26542081,26738689,28639233,43843586,44564482,45613057,49283073,51380225],"extension":[8060930,8192002,8323074,8781826,10092546,10420226,16711682,17039362,17170434,17956866,18415618,18808834,19398658,19922946,20054018,21233666,23199746,25231362,26935298,45547521,48103425,57737218,58130434,60293123,60620802,61407234,62193666,63045634,63569922,64684034,65273858,65667074,68091906,68485122,69533698,73662466,74252290,75104258,75235333,76087299,76677121,77463554,77856770,77922306,78512130,78774273,79953922,80281602,81002498,81068034,81264642],"exposed":[2424833,7995393,8585217,8847361,8912897,8978433,9109505,9175041,9961473,10158081,10223617,10354689,10747905,10551297,10878977,10944513,11075585,11730945,11862017,11927553,12124161,12386305,12517377,12582913,12845057,12910593,13303812,13631489,13893633,13959169,14221313,14286849,14352385,14417921,15204353,15335425,15466497,15794177,15925249,15990785,16711684,17760257,19005441,20381697,20512769,20840449,21692417,21889025,22347777,22544385,23199748,24117249,24903681,26017793,26476545,27066369,27983873,45547524,56033281,57737218,58130434,58523649,60293122,61407234,62193666,62259201,62324737,62717953,63045634,64159745,64684034,65077249,65273858,67043329,69533698,72286209,75038721,75104258,75235330,75563010,75759617,76087298,76808194,77856770,77987841,78446597,78512130,79167489,79953922,80216065,80281602,81002498,81068034,81264642],"exposes":[131073,589825,262145,720897,851969,1048577,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735582,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373982,5439489,5570561,5636097,5701633,5767169,5963777,5898241,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716318,9240577,9306142,9502750,9830430,9895937,11010078,11206686,11403294,12320769,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14286849,14352385,14417921,14745601,14811137,15073281,15335425,15400961,15466497,15597569,15794177,15859713,15925249,16711681,17235969,17301505,17760257,17825793,17891329,18087937,18284545,18546689,19202049,19988481,20119553,20250625,20316161,20381697,20512769,20578305,20774913,21102593,21495809,21692417,22216705,22478849,22544385,22609921,22937601,23199745,23527425,23592961,24117249,24182785,24379393,24903681,25100289,26017793,26476545,27066369,27983873,45350920,47710216,48168968,49152002,50855944,51183624,51773442,52035586,52690945,52756481,53084161,53280769,53542913,53608449,53805057,53936129,54001665,54394881,54525953,54657025,54722568,55246849,55377922,55574529,55640065,55705601,55902209,56426497,56492033,56557569,56819713,56885249,57540609,57606145,57671681,57737217,58130433,58261505,58589185,59113473,59244545,59375617,59834369,60227585,60293121,60358657,60751873,61014017,61210625,61276161,61407233,61538305,61800449,61997057,62193665,62455809,62783489,62980097,63045633,63897601,64356353,64684033,65273857,65470465,65863681,66781185,67633153,68157441,68943873,69533697,69992449,70320129,70582273,70909953,71172097,71303169,71368705,71761921,71958529,72024065,72417281,72548353,72613889,73138177,73269249,73531393,73990145,74121217,74317825,74514433,74645505,74711041,74842113,74973185,75038722,75104286,75169793,75300865,75366401,75431937,75497473,75628545,75694081,75759617,75956225,76087326,76152833,76283905,76349441,76414977,76480513,76546049,76677121,76742657,76808193,77135873,77201409,77266945,77332481,77398017,77529089,77594625,77856798,77987841,78184449,78249985,78512158,78577665,78708737,78774273,78839809,78905345,78970881,79101953,79167489,79364097,79495169,79626241,79691777,79888385,79953950,80019457,80084993,80216065,80281630,80347137,80478209,80543745,80674817,80740353,80805889,80871425,80936961,81002526,81068062,81133569,81199105,81264670,81330177],"evaluation":[76611585],"exists":[3801090,5242882,26411010,26673153,27459586,27590657,33226754,36241409,36372481,36634626,37945345,38273025,39387137,39518209,40239105,43515905,43581441,44433409,49741825,52625409,53411842,58851330,62259201,65077249,71303170,72286209,73990145,74842113,76021761,77660161,78577666],"efficiency":[76939265],"endcpuprofile":[7077889,11010049,35979268,42729476,75366401,76087297],"eval":[43843585,44564481],"enable":[39256065,40828929,41746439,43778049,45481985,60817409,62062593,64421889,66387969,67567617,68878337,73924609,74448897,76611586],"executing":[14876673,15663105,16318465,16973825,18874369,19070977,19136513,20905985,22020097,23658497,48955393,52428801,56229889,66453505,67698689,76939265,78118913],"enablejitdebugging":[80412673],"eventsource":[1703938,2686978,7798785,9764865,16711681,23199745,45547522,72613895,73531403],"effective":[33882113,39911425,43712513,49872897,68354049,71041025,72220673,72810497,77791234,78118913,79560706],"entered":[61603841],"exposeruntimetype":[58523649,64159745,79429633],"expensive":[13303809,79560706],"expect":[57868289,69140481,78708737],"enableruntimeinterruptpropagation":[60293121,74448900,76087297],"exist":[26673153,27590657],"enumerable":[7995394,8585217,8978434,9109506,11075585,18808833,19922945,33882113,34668545,35323905,37158913,38666241,38928385,39911425,41615361,43712513,46792705,49872897,51118081,52690945,69074945,75235329,75431937,75563009,77660162],"exposing":[45547522,78446593,79429633],"enablewebloading":[76873729],"environments":[80281601,81002497,81068033],"events":[589826,720898,1245186,1310722,1376258,1507330,16711681,23199745,49545217,71368705,72548353,74121217,74842113,75366401,75628545,76546049,78970881,79167489,80216065],"expected":[7405569,9043969,10682369],"errordetails":[56950788,60358657,62455809,62980097,69664774,72548353,73334790,78905345,78970881],"engines":[13303809,15269889,16580609,18219009,23003137,26542081,26804225,36175873,37552129,38207489,40042497,40108033,40435713,43122689,43843585,44040193,44564481,45547523,45613057,45875201,48037889,48103425,48365569,49217537,49283073,49807361,50987009,51380225,52232195,53673986,54198273,54460417,60882945,68419586,70254593,74776579,76677121,77856769,78118914,78446593,78774273,79953921,80805889,81068033,81133569],"enhance":[80412673],"extract":[10747905],"enablesamplecollection":[80150529],"extended":[4521985,7733249,7929857,7995393,8454145,8847361,8978433,9109505,9175041,9371649,10354689,45547522,46596097,48562177,75956226,79167489,79888385],"equals":[851969,1638401,1703937,1769474,1835009,1900545,1966081,2031618,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949122,3014657,3080193,3145730,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653058,4587521,4718593,4849665,4915201,5046274,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,64421889,68878337,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990146,74121217,74514433,74711041,74842114,75038722,75104257,75169793,75366401,75431937,75628545,75759618,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167490,79364097,79429633,79626241,79691777,79888385,79953921,80019457,80084993,80216066,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"easy":[74776577],"eligible":[76873729],"end":[24838145,28377089,35979265,42729473,68943873,69992449,70320129,70909953,71172097,71303169,71368705,71434241,71761921,71958529,72024065,72417281,72548353,72613889,73138177,73269249,73531393,73990145,74121217,74317825,74514433,74645505,74711041,74842113,74973185,75038721,75104257,75169793,75300865,75366401,75431937,75497473,75628545,75694081,75759617,75956225,76087297,76152833,76283905,76349441,76414977,76480513,76546049,76677121,76742657,76808193,77135873,77201409,77266945,77332481,77398017,77529089,77594625,77856769,77987841,78184449,78249985,78512129,78577665,78708737,78774273,78839809,78905345,78970881,79101953,79167489,79364097,79495169,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,80936961,81002497,81068033,81133569,81199105,81264641,81330177],"existing":[4456450,4521985,4784130,4980738,6291457,7208961,7995393,28180482,32243714,46596097,55574530,60030977,61210626,66322433,67371009,71303170,73269250,73728001,74973186,75694082,75956225,78577666],"engin":[5898242,6553602,11862017,19005441,40632322,42139650,42860546,44630018,48758786,53477378,57147393,57737223,57868289,58130439,59899905,60162049,60293127,60882945,61407239,61734913,61931521,62128129,62193671,62390273,63045639,63569921,64552961,64684039,64815105,65273863,65994753,66519041,67305473,67502081,68091905,68485121,69140481,69206017,69533703,70254593,70713345,71237633,73662465,74252289,74907649,75104263,76087303,76939265,77463553,77856775,77922305,78381057,78446593,78512135,79101954,79953927,80281607,80805890,81002503,81068039,81264647],"executable":[55246849,61014017,64094214,68747266,76152833,77398017],"environment":[45547521,52232196,74776577,75104258,79953922,80543745,81264642],"executionstarted":[58327044,60358657,62455809,62980097,71106566,72548353,73793542,78905345,78970881],"enumerateindexedproperties":[52690945,69074948,75431937],"enforces":[5898241,6553601,8716289,9306113,9502721,9830401,11206657,11403265,39714817,41943041,42270721,43319297,45219841,47251457,47644673,48889857,50331649,50790401,52297729,52559873,53149697,53673985,54919169,75104257,79101954,79953921,80281601,80805889,81002497,81068033,81264641],"enum":[69861378,72744962,73990148,74842116,75759620,76021762,76873730,76939266,77004802,77660162,77791234,78118914,78446594,79233026,79429634,79560706,79757314,80150530,80216068,80412674],"enumerate":[69074945],"enumerato":[37617665,37814273],"equality":[64421889,68878337,75038722,79429633],"enablenullresultwrapping":[10616834,57737217,58130433,60293121,61407233,62128129,62193665,63045633,64421892,64684033,65273857,68878342,69533697,71237633,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"enabledebugging":[76939267,77004802,80412675],"export":[57737218,57868289,58130434,60293122,61407234,62128130,62193666,63045634,64684034,65273858,69140481,69533698,71237634,75104258,76087298,77856770,78512130,79953922,80281602,81002498,81068034,81264642],"exception":[1245189,1507333,3014663,3407879,3735553,5373953,8716289,9306113,9502721,9830401,10223617,10747905,11010049,11206657,11403265,11862017,15990791,17104897,17563649,19005441,19267585,19726337,20709386,21299203,21823489,23134209,23724033,24707073,25624577,25755649,25886721,26083331,26279937,26869761,27262986,27656193,27787265,27852801,28442625,28573697,29032449,29097985,29229057,29294593,29425665,29622273,29818881,29884417,30015489,30146561,30277633,30670849,30736385,30801921,30932993,30998529,31064065,31719425,31981569,32047105,32112641,32178177,32309249,32374785,32440321,32768001,32833537,34209793,34078721,34275329,35651585,37879809,39780353,45547523,46006275,47120385,50135041,54788099,56950785,57278467,58327042,58458116,58982401,59179010,59703297,59965444,60358678,60555268,60948484,62455817,62980118,63176714,63963139,65404930,65601537,67108865,67239937,68222977,68812804,69664769,70647812,71106562,72089602,72351745,72548388,73334785,73793538,73924609,74448897,75104258,76087297,76939266,77791235,77856769,78512129,78905354,78970916,79953922,80281601,81002497,81068033,81264642],"extensionattribute":[8060931,8192003,8323075,8781827,10092547,10420227,17039363,17170435,17956867,18415619,18808835,19398659,19922947,20054019,21233667,25231363,26935299,76677123,78774275],"exemption":[56360961,62849025],"exceeded":[77791234],"enableremotedebugging":[76939265,77004801],"error":[458754,15990785,19267586,20709378,25755650,27262978,45547521,46006274,54788098,56950786,59179009,59703297,60358659,62455812,62980099,65404929,67108865,69664770,72089601,72548357,73334786,76939266,77791233,78905348,78970886],"enhanced":[45547521,80543745],"elements":[3211265,4390916,14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,16777220,16908292,18022401,18219009,18743300,19464193,19857409,21037057,21364737,21561345,21626881,22282244,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129,50266114,51249154,56360962,57737217,58130433,58589185,60293121,61407233,62193665,62849026,63045633,64684033,65273857,69533697,75104257,76087297,76414978,77856769,78184452,78512129,79953921,80281601,81002497,81068033,81264641],"enablestringifyenhancements":[76939265],"encoding":[39059457,39452673,54001667,58261506,60096527,70057998,76480514,80674819],"examples":[9568257,19005441],"extensively":[75431937],"errors":[71041025,71827457,72220673,73400321],"evaluate":[3735556,5373956,8388609,8716292,9306116,9502724,9830404,11010053,11206660,11403268,14155778,15728648,16580609,18022408,18219015,19464200,19857410,21037058,21364738,22872074,23003137,24313866,25427970,26542089,26738690,28639242,43843585,44564481,45088776,45613057,47120385,47841281,49283073,51380225,52822022,53018629,55115777,57409541,75104260,76087301,77856772,78512132,79953924,80281604,81002500,81068036,81264644],"exhaustive":[15532038,24444934,39190534,40501255,44171271],"exposehostobjectstaticmembers":[57737217,58130433,60293121,61407233,62193665,62324742,63045633,64684033,65273857,67043332,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"enabled":[39256065,40828929,43778049,45481985,48955393,68354049,72744961,72810497,75038721,76611589,76939269,77004803,78118913,80150529,80412676],"enables":[9240577,41746433,54657025,56229889,56360961,56688641,57737226,58130442,58523649,58916865,59834370,60293133,60620801,60817409,61276161,61407242,61669377,62062593,62193674,62849025,63045642,64159745,64290817,64421889,64684042,65273866,65667073,66387969,66453505,66650113,67567617,67698689,67764225,67895297,68878337,69533706,69992449,70975489,71041025,72220673,73924609,74448897,75104266,75235329,75366402,75563009,76087309,76611586,76873729,77201409,77856778,78512138,79953930,80281610,81002506,81068042,81133569,81264650],"excluded":[75235329,75563009],"eventconnection":[2293762,2555907,7471105,7798790,9764870,45547522,68943879,70909964]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_102.json b/docs/Reference/fti/FTI_102.json index e76feba9a..596f702ce 100644 --- a/docs/Reference/fti/FTI_102.json +++ b/docs/Reference/fti/FTI_102.json @@ -1 +1 @@ -{"final":[12910593],"feature":[47382532,54853637,59179009,61145089],"filter":[11272198,11468806,12451846,12779526],"format":[8126465,8323073,8650753,11927553,12320769,12845057,14024705,14942209,15597569,15925249,16842753,17367041,18350081,18612225,19070977,19660801,19988481,20316161,20643841,22478849,23134209,23265281,27000833,28246017,29229057,34734081,35127297,36044801,38207489,39190529,43778049,45613057,47710210,48234498,52559874],"floating":[9043969,39059457,40632321,42074113,42205185,42795010,43909121,44957697,45088769,46268417,47775745,48889858,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"friendly":[59441153],"finalize":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587522,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,18874370,19791880,38273026,43122690,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195970,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"finallyfunc":[12910600],"funcname":[14221317,21757958],"function":[1572865,1638401,1769473,1900546,1835009,1966081,2031617,2097154,2359297,2621441,2686977,2818049,2162690,2228226,3014657,3145729,3211265,3276801,3407877,3473409,3604481,3670017,3735553,3866625,3932161,3997697,4063233,4128769,4259841,4325377,4390913,4456449,4521986,4587522,4653057,4980737,5046276,5111809,5177345,5242881,5439489,5505025,6094849,6029313,6225921,6291458,6356994,6422529,6488065,6553602,6750211,6881281,6946817,7012355,7077889,7143425,7208962,7274497,7471105,7536642,7602177,7733249,7798785,7929857,8060929,7995393,8126466,8257540,8323073,8388614,8454145,8519682,8585217,8650753,8716290,8912900,8978434,9043970,9109506,9175042,9240577,9306120,9371650,9437185,9502721,9568264,9633794,9699330,9764866,9830408,9895937,9961474,10027010,10092546,10158082,10223618,10289154,10354689,10420226,10485762,10551298,10616834,10682370,10747906,10878979,10944514,11075586,11141122,11206658,11337730,11534338,11599873,11665410,11730946,12058626,12189698,12255233,12582914,12910601,13172737,13565955,13631489,13893633,14221316,14548993,14614529,14745601,14811137,15073281,15335425,15400961,15532033,15663105,15794177,15859713,15990787,16056321,16252929,16449537,16580609,16646145,16711681,17039361,17104897,17301505,17367041,17432577,17498113,17694721,17825793,18022401,18153473,18219009,18284545,18481153,18546689,18677761,19005441,19333121,19464193,19529729,19595265,19726337,20054017,20316161,20447233,20512769,21233665,21299201,21626881,21757956,22085633,22282241,22544385,22806529,23003139,23134209,23461889,23527425,23592961,23789569,24051713,24117249,24379393,24444929,24641537,24772609,24838145,24969217,25165825,25296897,25362433,25493505,25559041,25624577,25755649,25821185,25952257,26017793,26083329,26345473,26411009,26542081,26607617,26804225,26935297,27066369,27131905,27197441,27394049,27525121,27656193,27721729,27787265,27983873,28049409,28180481,28246017,28311553,28377089,28442625,28573697,28704769,28901377,28966913,29032449,29294593,29491201,29556737,29622273,29753345,29949953,30081025,30146561,30343169,30736385,30801921,30867457,30998529,31195137,31260673,31326209,31391745,31588353,31653889,31981569,32112641,32178177,32636929,32768001,32899074,32964609,33095681,33947649,34013185,34930689,35520513,35848193,36569089,37617670,37879809,38010882,38731777,39452673,41746433,43778049,50003969,53084161,53608449,53673985,53870593,54067201,54853633,54919169,55115783,55508994,55705601,55836673,56033281,56229891,56426497,56492033,56754177,57081857,57212931,57278465,57671682,57737217,57868289,57933826,57999361,58064897,58130433,58195970,58261505,58327041,58392578,58523649,58589185,58654721,58720257,58785796,58851329,58916865,59244545,59310081,59375617,59703297,59768837,59834369,59899905,60096514,60162049,60227586,60293121,60424193,60489729,60555265,60751873,60817410,60882946,61014017,61210627,61341698,61407234,61472769,61538306,61603842],"fields":[393218,458754,524290,655362,786434,851970,54722561,55836673,55902209,56492033,56950785,58720257,59506689,60358657,60555265,61472769],"formatting":[38404097,39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47710210,47775745,48234498,52559874,58195969,58261505,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"functional":[13828097,19398657],"free":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4653057,4849665,4980737,5046273,5111809,5439489,6881281,7798785,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58261505,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60227585,60358657,60489729,60555265,61472769],"fatal":[41615362,45481986,45744129,46202881,48365569,49020930,58458113,58654721,58982401],"fail":[42336257,45875201,51511297,59637761],"functionality":[5242881,47382529,61669377],"functions":[3407873,5046273,7077889,7143425,7602177,8060929,8126465,8257537,8323073,8388609,8454145,8519681,8650753,8781825,8912897,9043969,9109505,9175041,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10878977,10944513,11075585,11141121,11206657,11337729,11403265,11534337,11665409,11730945,12058625,12189697,12255233,12582913,12910593,13565953,30932993,31457281,32899073,33357825,33751041,34406401,34865153,35323905,35782657,36175873,38010882,39059457,40632321,41353218,42074113,42205185,43909121,44957697,45088769,45219842,46268417,47775745,49676289,49938433,51183617,52297729,58195969,58327041,58392577,58785794,59768834,60096513,60817409,60882945,61407233,61538305,61603841],"functionname":[37617665,55115777,55508996],"fails":[3407873,5046273,8257537,9043969,46333953,51052545,58785793,59768833],"finished":[30539777],"follow":[1],"file":[10616833,22740994,34471937,34734082,35127298,36044802,38207490,39059457,39124993,39190530,40173569,40632321,41222145,41287681,41811969,42074113,42205185,42270722,43909121,44105730,44957697,45088769,45613058,45744129,46268417,47579138,47775745,53805058,53870593,54329346,55967746,56295426,56623106,58195970,58327041,58392578,58654721,59572225,60096514,60817409,60882946,61407234,61538306,61603842],"following":[65537,131073,196609,262145,327681,393217,458753,524289,655361,786433,851969,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4980737,5046273,5111809,5177345,5439489,6291457,6356993,6553601,6881281,7143425,7208961,7536641,7798785,8060929,8126465,8257537,8323073,8650753,8716289,8912897,8978433,9043969,9306113,9437185,9568257,9699329,9830401,10289153,10354689,10420225,10485761,10616833,10682369,10878977,10944513,11075585,11141121,11206657,11337729,11665409,12058625,12189697,12255234,12582913,12910593,13565953,13631489,13828097,19398657,23789569,34537473,34996225,35389441,36634625,37027841,37093377,37617665,37814273,38141953,38404097,38797313,38928385,38993921,39059457,39256065,39387137,39518209,39780353,39911425,40239105,40304641,40435713,40632321,40697857,41156609,41222145,41484289,42008577,42074113,42205185,42532865,42598401,43188225,43909121,44957697,45088769,45416449,45744129,45809665,46137345,46202881,46268417,46596097,46858241,46923777,47120385,47644673,47775745,47972353,48365569,48824321,51576833,52428801,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55246849,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57016321,57212929,57540609,57671681,57802753,57933825,57999361,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59244545,59310081,59375617,59506689,59703297,59768833,59834369,59899905,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60751874,60817409,60882945,60948481,61014017,61079553,61276161,61407233,61472769,61538305,61603841],"first":[2752513,7471105,7929857,7995393,8585217,9240577,9306113,9568257,9895937,16056322,16252929,16711682,17104897,17301506,17432578,17498114,17825793,18153473,18219010,18546689,19005441,19333121,19726337,20054017,20512769,21299201,41549825,47251457,50593793,54853633,55443457,57540609,61145089],"frames":[45744129,58654721],"fso":[8650754],"framework":[16252929,18546689,19333121,21299201,47382529],"forwards":[13631489,23789569],"foo":[8323073,12255233],"files":[39059457,40632321,42074113,42205185,43909121,44105729,44957697,45088769,45416449,46071810,46268417,47579137,47775745,53805057,54329345,55967745,56295425,56623105,58195969,58327041,58392577,60030977,60096513,60817409,60882945,61407233,61538305,61603841],"formatted":[17367041,20316161,28246017,43778049],"frame":[52035586,56098818],"false":[5242881,5373953,5898241,6094850,6225922,6946818,8912897,9175041,9371649,9764865,10027009,10158081,10878977,12910594,13565953,13631489,14352385,14811137,15335425,15400961,16187393,16318465,16973825,17039361,17694721,18284545,18874370,19595265,22282241,22937601,23068673,23527425,23789569,23986177,24117249,24838145,25362434,25624577,25755649,26411010,27066370,27918337,27983874,28049410,28377090,28573698,29294594,30081025,30343170,30605313,31981570,32636929,34013186,35520513,37879810,38273026,41746433,42467329,43122690,45678593,51904513,58064897],"future":[59179009,61145089],"fully":[1703937,3801089,8126465,9437185,12124161,12517377,13041665,13500417,13697025,14286849,19136513,19922945,23199745,24248321,51576833,55902209],"factory":[38010881,55246849],"favor":[14352385,22937601,23986177,27918337,42467329],"features":[38535169,43778049,47906817,50593793,54001665,55377921,59179009,61145089,61669378],"float":[42795009,48889857,51511297,60751873],"filesystemobject":[8650754],"fallback":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,46333954,47775745,51052546,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"form":[8126465,8454145,9437185,11730945,12713985,13041665,13500417,13697025,13631489,14286849,14483457,15007745,15138817,15269889,19136513,19922945,20709377,21037057,21430273,21889025,23199745,23789569,24248321,25100289],"filenameextensions":[22151172,22740997,34734085,35127301,36044805,38207493,39190533,41222145,42270724,45613061,53870593],"finally":[12910593],"flagsattribute":[50593796,54198276,57147396,59179012,59572228,59637764,59965444,61145092,61210628,61669380],"facilities":[61145089],"field":[1048578,1114114,1179650,1245186,1376258,1441794,1507330,9175041,13828097,19398657,39059458,40042497,40632322,42074114,42205186,42336258,43909122,44171265,44957698,45088770,45875202,46268418,47775746,54722564,58195970,58327042,58392578,59506692,59637762,60096514,60358660,60817410,60882946,61407234,61538306,61603842,61669377],"foreach":[9568258,9830403],"formatcode":[38404097,39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47710212,47775745,48234502,52559876,58195969,58261505,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"finalization":[19791873],"freeing":[2621441,2686977,2818049,3145729,3211265,3670017,3735553,4128769,4521985,4587521,4980737,5177345,6291457,6356993,6553601,7208961,7536641,8716289,8978433,24576001,24707073,30212097,36110337,36831233,40763393,58195969,58261505,58327041,58392577,58916865,59375617,59834369,60096513,60162049,60227585,60293121,60424193,60751873,60817409,60882945,61014017,61407233,61538305,61603841],"flags":[3407873,5046273,10616840,11927558,13107206,13303814,13500422,13828102,14090246,14155782,14286854,14876678,14942214,15007750,15269894,15597574,15925254,17235975,17760263,18087943,18743303,19070983,19398663,19660807,19988487,20643847,21037063,22347782,22609927,22872070,23199751,24248327,24510470,25034758,25100295,25231366,25624582,25690118,25755654,26214406,26673158,26804230,27590662,27656198,28114950,28508166,28639238,28835846,28901382,29097990,29163526,29360134,29425670,29622278,29687814,29884422,30015494,32309254,32833542,33685510,34275334,34734086,35127302,35454982,36044805,36503558,37027841,37224454,37814273,38207494,38469638,38797313,39190534,39518209,40108033,40239105,40304641,41156609,45613061,45940741,46923777,50462725,50593793,51118085,51576833,54198273,55443457,57147393,58785793,59179009,59375617,59506689,59572225,59637761,59768833,59834369,59965441,60162049,60293121,60424193,60751873,61145089,61210625,61669377],"facilitate":[47710209,48234497,52559873],"filenameextension":[39059458,40632322,42074114,42205185,43909122,44105732,44957698,45088769,46268417,47579141,47775745,53805063,54329350,55967751,56295430,56623111,58195969,58327041,58392578,60096514,60817410,60882945,61407234,61538306,61603841],"func":[2621441,2686977,2818049,3211265,3407874,3670017,4784129,5046273,6881281,8126465,8388615,9306120,15794187,16580619,31260687,32899075,33947659,37421057,37945345,38600705,39649281,57016321,58720257,58785793,59375617,59768834,59834369,60162049,60424193,60751873],"flag":[3407873,5046273,10616838,58785793,59768833]} \ No newline at end of file +{"fail":[64421889,68878337,70975489,79429633],"fully":[1638401,4718593,4915201,7340033,8978433,9895937,10354689,11599873,12713985,14352385,15925249,17760257,20512769,21692417,22544385,24117249,24903681,76349441,77529089,78839809,79364097,80740353],"frame":[73924610,74448898],"fields":[131074,262146,1048578,1179650,1441794,1572866,74842113,76021761,78249985,78708737,79167489,80216065,80740353,80805889,80871425,81330177],"filesystemobject":[9175042],"finallyfunc":[15990792],"fso":[9175042],"floating":[10223617,57737217,58130433,60293121,61407233,61669378,62193665,63045633,64684033,65273857,67764226,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"float64array":[78184449],"format":[8847361,8978433,9175041,13238273,13697025,13828097,15400961,15597569,15663105,15859713,17301505,18546689,19202049,20119553,20316161,20578305,20774913,21495809,23527425,23658497,25100289,39059457,39452673,41549825,42270721,45219841,48955393,50593793,52428801,52953089,53149697,54132737,56229890,66453506,67698690],"files":[54657025,57737217,58130433,60293121,61407233,62193665,63045633,63569921,63635458,64684033,65273857,68091905,68485121,69533697,69992449,73662465,74252289,75104257,76087297,77463553,77856769,77922305,78512129,79953921,80281601,81002497,81068033,81264641],"finished":[51511297],"file":[10747905,22740994,42270722,45219842,50593794,51576833,52363265,52756481,52953090,53149698,54132738,55443457,57737217,58130433,59047937,60293121,60358657,60424193,61407233,62193665,62980097,63045633,63504386,63569922,64684033,65273857,68091906,68485122,69533697,72548353,73662466,74252290,75104258,76087297,76873729,77463554,77856770,77922306,78512129,78970881,79888385,79953922,80281602,81002498,81068034,81264642],"f093":[8847361,9175041,13238273,13697025,13828097,15400961,15597569,15859713,17301505,18546689,19202049,20119553,20316161,20578305,20774913,21495809,23527425,25100289],"finally":[15990785],"filenameextension":[57737218,58130433,60293122,61407233,62193666,63045634,63569925,64684033,65273858,68091911,68485124,69533697,73662471,74252294,75104258,76087298,77463559,77856769,77922310,78512129,79953921,80281602,81002498,81068033,81264642],"free":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,9895937,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75169793,75366401,75431937,75628545,75759617,75956225,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,80019457,80084993,80216065,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81330177],"features":[48103425,48955393,58916865,64290817,74776577,76939265,77004801,78118913,80412674],"formatting":[56229890,57737217,58130433,59834369,60293121,61407233,62193665,63045633,64684033,65273857,66453506,67698690,69533697,75104257,75366401,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"fastproxy":[3801089,3866625,4063233,4259841,4325377,4456449,4784129,4915201,4980737,5111809,5242881,5439489,5701633,5767169,6946817,7340033,9895937,23068674,23265282,23461890,24248322,24772610,24838146,24969218,25034754,25493506,25559042,25624578,26148866,26214402,26279938,26345474,26411010,26673154,26869762,27000834,27131906,27328514,27459586,27525122,27590658,27656194,27721730,27787266,27852802,27918338,28246018,28180482,28377090,28442626,28508162,28573698,28704770,28770306,28835842,28901378,29032450,29097986,29163522,29229058,29294594,29425666,29491202,29556738,29622274,29687810,29753346,29818882,29884418,29949954,30015490,30081026,30146562,30212098,30277634,30343170,30408706,30474242,30539778,30605314,30670850,30736386,30801922,30867458,30932994,30998530,31064066,31129602,31195138,31260674,31326210,31391746,31457282,31522818,31588354,31653890,31719426,31784962,31850498,31916034,31981570,32047106,32112642,32178178,32243714,32309250,32374786,32440322,32505858,32571394,32636930,32702466,32768002,32833538,32899074,32964610,33030146,33095682,33161218,33226754,33292290,33357826,33423362,33488898,33554434,33619970,33685506,33751042,33816578,33882114,33947650,34013186,34078722,34209794,34275330,34340866,34406402,34471938,34537474,34603010,34668546,34734082,34799618,34865154,34930690,34996226,35061762,35127298,35323906,35454978,35586050,35651586,35717122,35782658,35848194,35913730,36110338,36306946,36438018,36503554,36569090,36634626,36765698,36831234,36962306,37158914,37224450,37355522,37421058,37617666,37683202,37814274,38010882,38141954,38469634,38600706,38666242,38797314,38862850,38928386,38993922,39321602,39583746,39780354,39845890,39911426,39976962,40370178,40566786,41091074,41222146,41615362,42008578,42795010,43384834,43450370,43712514,44367874,44957698,45285378,45416450,46137346,46661633,46727169,46792706,47775745,48693249,48824321,49348609,49610753,49676289,49872898,50069505,50200577,51052545,51118082,51445761,51707905,52494337,52690945,53280769,53411841,53739521,54067201,55050241,55181313,55574529,55902209,56557569,56754177,57606145,57802753,58064897,58654721,58851329,59113473,60030978,60227585,61210625,61472770,61865986,62652417,63438850,63832066,64618497,65011714,66060290,66322434,67371010,68026370,68681730,69074946,70320130,70385666,71303170,72024066,72417285,73269250,73728002,74317826,74514437,74776578,74973186,75300866,75431939,75694082,75890690,76349443,76742661,77266948,77529091,77660162,78053378,78577668,78643202,79036418,79364099,79626245,79822850,80478213,80609282,80936962],"float32":[27918337,29097985,31064065,31129601,44367873],"functionality":[6356993,67895297,80412673],"float32array":[78184449],"feature":[67895300,76611589,76939265,77004801],"favor":[15532033,24444929,39190529,40501249,44171265],"fatal":[59179010,60358657,62455809,62980097,65404930,72089602,72548353,78905345,78970881],"flags":[3538945,4521985,10747912,13500422,13697030,14352390,14745606,14811142,15400966,15466502,15794182,15925254,16711686,17235974,17301510,17891334,18284551,19202054,19988487,20119559,20316167,21102599,21495815,22478855,22544391,22937607,23199751,23527431,24903687,25165830,25952262,26017799,27066375,27394054,28311558,33882118,35520518,36896774,37027846,37289990,38535174,38731782,39256070,39649286,39911430,40304646,40828934,40960006,41943046,42270726,42336262,42532870,43253766,43712518,43778054,44498950,44761094,44892166,45219846,45481990,45809670,47054854,48234502,48889862,49086470,49414150,49872902,50593798,50921478,52101126,52297734,52953093,53149701,53608449,54132742,54919174,56885249,59244545,59768833,60751873,61538305,62783489,63307781,63700997,63766533,64356353,65863681,72744961,73138177,74645505,75497473,75956225,76283905,76873729,76939265,77004801,77070337,77135873,77660161,77987841,78118913,78184449,78446593,78839809,79167489,79233025,79429633,80150529,80412673],"float":[26279937,27918338,29097986,29949953,31064066,31129602,32440321,32702465,44367874,46137345,61669377,67764225,70975489,78184449],"fallback":[56688642,57737217,58130433,60293121,61407233,62193665,63045633,64684033,65273857,66650114,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"facilities":[76939265],"filenameextensions":[22085636,22740997,42270725,45219845,50593797,52756481,52953093,53149701,54132741,63504388,79888385],"func":[2818050,3276802,3473410,3538946,3997698,4390914,4521985,5898241,5767173,6553601,8388615,8978433,11075592,14876683,16973835,19136523,22020107,33423366,35913734,36503558,37617670,37814278,39321605,42139663,44630027,46202882,47775746,48758785,49610755,49938434,52887555,53477377,73138178,74645506,75431941,75497474,75956225,77135874,77987842,78184450,79101953,80805889],"functional":[16711681,23199745],"flag":[3538945,4521985,10747910,75956225,77987841],"final":[15990785],"field":[2,393218,524290,327682,786434,917506,2359298,5767172,10616833,16711681,23199745,33882116,41615364,43712516,51118084,51707905,57737218,58130434,58523649,60293122,61407234,62193666,62652418,63045634,64159745,64421890,64618498,64684034,65273858,68878338,69533698,74842116,75104258,75431940,76087298,77856770,78512130,79036421,79167492,79429634,79953922,80216068,80281602,80412673,81002498,81068034,81264642],"following":[131073,589825,262145,720897,851969,1048577,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5570561,5636097,5701633,5767169,5963777,5898241,6094849,6160385,6553601,6946817,7077889,7340033,7864321,7995393,8585217,8716289,8847361,8912897,8978433,9109505,9175041,9240577,9306113,9502721,9830401,9895937,9961473,10158081,10223617,10354689,10747905,10551297,10878977,10944513,11010049,11075585,11206657,11403265,11730945,11862017,11927553,12124161,12320769,12386305,12517377,12582913,12845057,12910593,13631489,13893633,13959170,14221313,15204353,15990785,16711681,18219009,19005441,23199745,26542081,52690945,52756481,53084161,53280769,53542913,53608449,53805057,53936129,54001665,54394881,54525953,54657025,55246849,55574529,55640065,55705601,55902209,56426497,56492033,56557569,56819713,56885249,57540609,57606145,57671681,57737217,58130433,58261505,58589185,59113473,59244545,59375617,59834369,60227585,60293121,60358657,60751873,61014017,61210625,61276161,61407233,61538305,61800449,61997057,62193665,62455809,62783489,62980097,63045633,63897601,64356353,64684033,65273857,65470465,65863681,66781185,67633153,68157441,68943873,69533697,69992449,70320129,70582273,70909953,71172097,71303169,71368705,71761921,71958529,72024065,72417281,72548353,72613889,73138177,73269249,73531393,73990145,74121217,74317825,74514433,74645505,74711041,74842113,74973185,75038721,75104257,75169793,75300865,75366401,75431937,75497473,75628545,75694081,75759617,75956225,76087297,76152833,76283905,76349441,76414977,76480513,76546049,76677121,76742657,76808193,77135873,77201409,77266945,77332481,77398017,77529089,77594625,77856769,77987841,78184450,78249985,78512129,78577665,78708737,78774273,78839809,78905345,78970881,79101953,79167489,79364097,79495169,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,80936961,81002497,81068033,81133569,81199105,81264641,81330177],"facilitate":[56229889,66453505,67698689],"f414c260":[42270721,45219841,50593793,52953089,53149697,54132737],"foreach":[8585219,10944514],"follow":[196609],"false":[6291458,6356993,6422529,7143425,7208962,8519682,9568257,9961473,10289153,10616833,11862017,11993089,13041665,15269889,15532033,15990786,16121857,17498113,17629185,18219009,18939905,19005441,19333121,19660801,19791873,20840449,20971521,21430274,21954561,22675457,23789569,24444929,24838145,25559041,26411009,26542081,26673153,26804225,27000833,27328513,27459585,27525121,27590657,27918337,28246017,28377089,28508161,28704769,28770305,28835841,28901377,29491201,29556737,29949953,30081025,30212097,30343169,30408705,30474241,30605313,30867457,31129601,31195137,31260673,31326209,31391745,31588353,31784961,31850497,31916033,31981569,32571393,32702465,32964609,33030145,33095681,33226753,33357825,33488897,33816577,33947649,34340865,34537473,34603009,35389441,35520513,35586049,35848193,36241410,36372482,36634625,37289985,37945346,38273026,39190529,39387138,39518210,39780354,40239106,40501249,41156609,41353218,41746433,42467329,42926081,43515906,43581442,44171265,44433410,46333953,46989314,49741826,52625410,58982401,65601537,72679425,79822849],"falsy":[9895937,27328515,59113473,66060290,76349441,77529089],"funcname":[16056325,28049414],"framework":[67895297],"forwards":[18219009,26542081],"formatcode":[56229892,57737217,58130433,59834369,60293121,61407233,62193665,63045633,64684033,65273857,66453510,67698692,69533697,75104257,75366401,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"functionname":[56819713,64946180,80347137],"functio":[27000833,55902209,61472769,72024065,79822849],"flagsattribute":[72744964,76873732,76939268,77004804,77660164,78118916,78446596,79233028,79429636,80150532,80412676],"friendly":[24248321,77791233],"finalize":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373954,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,21430274,21757960,41353218,46989314,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856770,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"faster":[77660161],"fast":[4456450,4784130,4980738,6946818,24772611,25493507,31981570,34406401,39780354,39976961,45285377,51707924,70320129,72024065,72417282,73269251,74317825,74514433,74973187,75300865,75431941,75694083,75890690,76349441,76742657,77266946,77529089,77660161,78053378,78577666,78643202,79036418,79364097,79626242,79822849,80478209,80609282,80936961],"function":[851969,1703938,1835009,1900545,1966081,2097153,2162689,2228225,2293762,2555906,2621441,2686978,2752513,2818049,2883585,3014657,3080193,3276801,3342337,3407873,3473409,3538949,3604481,3735553,3866625,3932161,3997697,4128769,4194305,4325377,4456450,4390913,4521988,4587521,4849665,5111810,5177345,5242881,5308417,5373954,5439489,5570561,5636097,5701633,5963778,5767169,6094849,6160385,6291457,6356993,6553601,6946822,7077889,7208961,7405569,7471105,7536641,7602177,7733249,7798787,7864321,7929857,7995393,8060929,8192001,8323073,8388614,8454145,8519681,8585224,8781825,8716290,8847361,8912900,8978434,9043969,9109505,9175041,9306114,9502722,9568258,9633794,9699330,9764867,9830402,9961476,10027010,10092545,10158081,10223618,10289154,10354689,10420225,10485762,10551298,10616834,10682369,10747906,10813442,10878978,10944520,11010050,11075592,11141122,11206658,11272194,11337729,11403266,11468802,11665410,11730946,11862019,11927554,11993090,12124162,12386306,12517378,12582914,12779522,12845058,12910594,13041666,13107201,13631490,13893634,13959169,14090241,14155777,14221314,14680067,14876673,15007745,15204354,15663105,15728641,15990793,16056324,16121857,16252929,16449537,16580609,16646145,16777217,16842753,16908289,16973825,17039361,17170433,17432577,17498113,17629185,17956865,18022401,18153473,18219009,18415617,18677761,18743297,18808833,18939905,19005443,19136513,19333121,19398657,19464193,19595265,19791873,19857409,19922945,20054017,20185089,20643841,20840449,21037057,21168129,21233665,21299201,21364737,21954561,22020097,22282241,22413313,22675457,22872065,23003137,23658497,23789569,23986177,24248321,24313857,24576001,24772609,24838145,25231361,25362435,25427969,25493505,25624577,25690113,26083329,26279937,26411009,26542081,26673153,26738689,26869761,26935297,27000836,27328513,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,28049412,28114945,28246017,28180481,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,29032449,29097985,29229057,29294593,29425665,29491201,29556737,29622273,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457283,31588353,31719425,31784961,31850497,31916033,31981574,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505861,32571393,32702465,32768001,32833537,32899076,32964609,33030145,33095681,33226753,33357825,33488897,33554435,33816577,33947649,34013188,34078721,34209793,34275329,34340865,34537473,34603009,34734084,34799621,35061764,35389441,35520513,35586049,35651585,35782660,35848193,35979265,36044801,36110341,36175873,36241409,36438021,36372481,36634625,36765699,36962308,37093377,37289985,37355524,37486593,37552129,37748737,37945345,38076417,38141958,38207489,38273025,38469637,39256065,39387137,39518209,39780357,40042497,40108033,40173569,40239105,40435713,40697857,40828929,40894465,41025537,41156609,41287681,41418753,41484289,41549825,42074113,42139649,42205185,42401793,42467329,42598401,42663937,42729473,42926081,43057153,43122689,43515905,43581441,43778049,43843585,44040193,44302337,44433409,44564481,44630017,45023233,45088769,45481985,45547522,45613057,45744129,45875201,46333953,46858241,47513601,48037889,48365569,48955393,49217537,49283073,49741825,49807361,50069505,50659329,50724865,50987009,51380225,51707908,51970049,52428801,52494337,52625409,52887554,54460417,54591489,54984705,55902209,56819718,57016321,61472769,64028673,64487425,64946178,66715649,68943875,69337089,69861378,70451201,70909955,71172097,71368705,71761921,72024066,72417281,72548353,72613890,72679425,73007105,73138177,73269251,73531394,74121217,74186753,74514433,74645505,74711041,75104258,75169793,75366401,75431937,75497473,75628545,75956228,76087298,76152833,76283905,76480513,76546049,76611585,76742657,77135873,77266945,77332481,77398017,77725697,77856770,77987845,78184449,78249985,78512129,78577665,78708737,78970881,79036417,79233027,79364097,79495169,79626246,79691777,79822852,79888385,79953922,80019457,80084994,80281602,80347143,80478211,80543745,80674817,80805889,80871425,81002498,81068034,81199105,81264642,81330177],"form":[5767173,8454145,8978433,10354689,11272193,14286849,14352385,14417921,15335425,15466497,15794177,15925249,17760257,18219009,20381697,20512769,21692417,22544385,24117249,24903681,26017793,26476545,26542081,27066369,27983873,33423362,35913730,36503554,37617666,37814274,47775746,49610755,75431941],"first":[3211265,8060929,8192001,8323073,8781825,10092545,10420225,10944513,11075585,16449538,16646146,16777218,16842754,16908290,17039361,17170433,17956865,18153474,18415617,18677762,18743298,18808833,19398657,19922945,20054017,20185090,21168130,21233665,22282242,23986178,25231361,26935297,61734913,61931521,76414977,76611585,76939265,77070337,78118913],"foo":[8847361,13959169],"finalization":[21757953],"freeing":[2097153,2752513,2818049,3276801,3473409,3735553,3997697,4063233,4259841,4390913,5373953,5570561,5963777,7077889,8716289,9306113,9502721,9830401,11010049,11206657,11403265,24510465,25296897,46465025,51904513,56164353,56623105,70320129,73138177,74645505,75104257,75366401,75497473,76087297,76283905,77135873,77856769,78184449,78512129,79495169,79953921,80084993,80281601,80936961,81002497,81068033,81199105,81264641],"factory":[33423366,35913734,36503558,37617670,37814278,45547521,47775745,49610753,77594625],"fulfilled":[79233025],"fails":[3538945,4521985,8912897,10223617,25624577,26279937,26869761,27656193,27787265,27852801,28442625,28573697,29032449,29097985,29229057,29294593,29425665,29622273,29818881,29884417,30015489,30146561,30277633,30670849,30736385,30801921,30932993,30998529,31064065,31719425,32047105,32112641,32178177,32309249,32374785,32440321,32768001,32833537,34209793,34078721,34275329,35651585,56688641,66650113,75956225,77987841],"functions":[3538945,4521985,7733249,7929857,7995393,8388609,8454145,8585217,8847361,8912897,8978433,9109505,9175041,9371649,9568257,9633793,9699329,9961473,10027009,10158081,10223617,10289153,10354689,10485761,10551297,10616833,10747905,10813441,10878977,10944513,11075585,11141121,11272193,11337729,11468801,11665409,11730945,11862017,11927553,11993089,12124161,12386305,12517377,12582913,12648449,12779521,12845057,12910593,13041665,13631489,13893633,13959169,14221313,15204353,15990785,19005441,43646977,45154305,45547522,46596097,46923777,47579137,48300033,48562177,49479681,52887553,54329345,57737217,58130433,60293121,61407233,62062594,62193665,62390273,63045633,64684033,65273857,66519041,67567618,69533697,70713345,74907649,75104257,75956226,76087297,77856769,77987842,78512129,79953921,80281601,81002497,81068033,81264641],"filter":[12451846,13369350,13565958,13762566],"formatted":[15663105,23658497,48955393,52428801],"future":[76939265,77004801],"frames":[60358657,62980097,72548353,78970881]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_103.json b/docs/Reference/fti/FTI_103.json index 26a5440d9..81e54056d 100644 --- a/docs/Reference/fti/FTI_103.json +++ b/docs/Reference/fti/FTI_103.json @@ -1 +1 @@ -{"globalflags":[42532865,55443460,61276161],"grow":[38404097,42074113,50724865,54460417,58261505,60817409],"gain":[11730945],"garbage":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3735553,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587522,4653057,4849665,4980738,5046273,5111809,5439489,6291458,6356994,6553602,6881281,7208962,7536642,7798785,8716290,8978434,14352387,19791875,22937603,23986179,27918339,30539777,42467331,51576833,52101121,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57147393,57212929,57671681,57933825,57999361,58130433,58195970,58261506,58327041,58392578,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096514,60227585,60358657,60489729,60555265,60817410,60882946,61407234,61472769,61538306,61603842],"generally":[12255233],"getcacheddocument":[1835010,1966081,5505029,6422533,53084161,58523650],"generated":[4980748,7208972,24444930,24969218,25362434,25493506,25559042,25821186,26017794,26083330,26411010,26542082,26607618,26935298,27066370,27525122,27983874,28049410,28311554,28377090,28573698,28704770,28966914,29294594,29491202,29556738,29949954,30343170,30736386,30998530,31391746,31981570,32178178,33095682,34013186,34930690,35192838,35848194,36372486,37879810,38666246,39714822,58261516,60620801,60686337,60817420],"generates":[27000833,29229057],"guid":[3735560,4587528,6291464,6357000,6553608,7208968,7536648,8323073,8650753,8716296,8978440,11927553,12320769,12648454,12845057,13107206,13369350,14024705,14090246,14155782,14876678,14942209,15597569,15925249,16777222,16842753,17235976,17563654,17760264,18087944,18350081,18612225,18743304,19070977,19660801,19988481,20643841,20774920,21364744,21495816,22413320,22478849,23265281,31064068,32047108,33423364,34209796,34734081,35127297,36044801,38207489,39190529,45613057,55312385,58195976,58327048,58392584,60096520,60817416,60882952,61407240,61538312,61603848],"gcnew":[31326209,55836673],"general":[983041,9961473,10158081,10747905,40042497,44171265],"getruntimeheapinfo":[7208961,27787268,60817409],"giving":[2621442,2686978,2818050,3211266,3670018,15728641,15794177,16580609,19202049,37421058,37945346,55312385,59375618,59834370,60162050,60424194,60751874],"gettype":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,45154306,51314690,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"gets":[524290,1048577,1179649,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2621442,2686978,2752513,2818050,2162689,2228225,2883585,3014657,3145730,3211266,3276801,3342337,3407878,3473409,3538945,3604481,3670018,3735553,3801089,3866625,3932161,3997697,4063233,4128770,4259841,4325377,4390913,4456449,4521987,4587522,4653057,4849665,4980737,5046278,5111809,5177346,5439489,6291458,6356994,6553602,6881281,7208962,7536642,7798785,8519681,8716290,8978434,9961473,10551297,10878977,13565953,14614529,15663105,17367041,20316161,21626881,25296897,28246017,33357826,34537476,34996225,35389441,36175874,36241410,36438018,36634628,36700162,36896770,37027846,37093381,37617674,37814280,38141954,38404103,38797320,38928386,38993926,39059468,39256067,39387138,39518213,39583745,39780355,39845889,39911431,40108033,40239113,40304646,40435714,40501249,40632332,40697858,40828929,40894465,40960001,41025537,41156617,41222151,41484290,41549825,41615361,41680897,42008578,42074126,42139649,42205196,42270721,42401793,42532865,42598402,42663937,42729473,42860545,42926081,43188228,43253761,43319297,43384833,43646977,43712513,43778049,43843585,43909131,43974657,44040193,44105729,44236801,44302337,44498945,44564481,44630017,44761089,44826625,44892161,44957707,45023233,45088778,45285377,45350913,45416450,45481985,45547521,45678593,45744142,45809668,45940737,46006273,46071809,46137345,46202886,46268427,46399489,46530561,46596097,46661633,46727169,46792705,46858245,46923780,46989313,47054849,47120387,47251457,47316993,47448065,47513601,47579137,47644675,47775753,47841281,47972354,48037889,48103425,48365577,48431105,48562177,48627713,48693249,48824323,48955393,49020929,49086465,49152001,49217537,49479681,49545217,49610753,49741825,49807361,49872897,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50724865,50790401,50855937,50921473,50987009,51118081,51249153,51380225,51445761,51511297,51576839,51642369,51707905,51773441,51838977,51904513,51970049,52101121,52232193,52363265,52428802,52494338,52625409,52690945,52756481,52887553,52953089,53018625,53084163,53149697,53215233,53346305,53411841,53477379,53542913,53608449,53673990,53739521,53805057,53870600,53936129,54067205,54132737,54263809,54329345,54394881,54460417,54591489,54657025,54722563,54788097,54919169,54984705,55050241,55115787,55181313,55312386,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55967745,55902211,56033281,56164353,56229889,56295425,56360961,56426501,56492033,56557569,56623105,56688641,56754179,57081857,57212929,57344001,57475073,57540614,57606145,57671681,57737217,57868289,57933825,57999365,58130434,58195980,58261512,58327050,58392589,58458121,58523650,58589191,58654735,58720257,58785798,58851331,58916869,58982406,59113475,59244552,59310084,59375624,59506693,59703299,59768838,59834378,59899908,60030978,60096525,60162058,60227590,60293127,60358659,60424203,60489733,60555265,60751883,60817424,60882957,60948481,61014021,61276161,61407246,61472769,61538318,61603854],"gadgets":[7143427,8060931,54067203],"getelement":[3407873,5046273,9961476,58785793,59768833],"generating":[4980742,7208966,24444929,25559041,25821185,26017793,27525121,28704769,28966913,29556737,30998529,31391745,33095681,34930689,35192835,36372483,38666243,39714819,58261510,60817414],"getunderlyingobject":[5177345,31195140,61014017],"generator":[61210627],"getmetaobject":[3014657,4521985,55705601,60227585],"getheapinfo":[4980737,26345476,58261505],"getobjectdata":[3080193,5111810,18415622,23658501,58654722,58982401],"generate":[9568257,60620802],"generic":[5242881,7077889,7602177,8126466,8257537,8454145,8912897,9043969,9240577,9306113,9437189,9699329,9764865,9830401,9895937,10223617,10289153,10354689,10420225,10485761,10616833,10682369,10878977,11075585,11141121,11206657,11337729,11665409,12058625,12124161,12189697,12255234,12517377,12582913,12713985,13041666,13303809,13500418,13565953,13697026,13828098,13959169,14286850,14483457,15007745,15138817,15269889,15794177,16580609,17104897,17825793,18546689,19136514,19333121,19398658,19922946,20709377,21037057,21430273,21889025,22609921,23199746,23396353,24248322,25100289,31260673,31326209,33947649,47906817,54001665,55836673,57212929,57933825,60751873,61341697],"getting":[3014657,4521985,55705601,60227585],"getbytes":[2621441,2686977,2818049,3211265,3670017,18022404,18481156,59375617,59834369,60162049,60424193,60751873],"getstacktrace":[3735553,4587521,6291457,6356993,6553601,7208962,7536641,8716290,8978433,17367044,20316165,28246023,43778054,58195969,58327041,58392577,60096513,60817410,60882946,61407233,61538305,61603841],"gethashcode":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"getcomponents":[10616833],"getdynamicmembernames":[3014657,4521985,55705601,60227585],"groups":[9764865,13565953],"guide":[7471105,7929857,7995393,8585217,9240577,9895937,16252929,17104897,17825793,18153473,18546689,19005441,19333121,19726337,20054017,20512769,21299201],"greater":[51511297,52690945,53149697,53542913,54263809,61145089],"getbaseexception":[5111809,12910593,58654721],"given":[1572865,3604481,4194305,4980737,5242881,7208961,13434881,23724033,27000833,29229057,31326210,53673985,55246849,58130433,58261505,59965441,60817410],"getvalue":[13828097,19398657],"getenumerator":[2752513,8650753,57540609],"global":[3735553,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13303809,13369345,13500417,13697025,13828097,13959169,14024705,14090241,14155777,14221314,14286849,14417921,14483457,14876673,14942209,15007745,15138817,15269889,15597569,15925249,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19136513,19398657,19660801,19922945,19988481,20119553,20643841,20709377,20774913,21037057,21364737,21430273,21495809,21757954,21889025,22413313,22478849,22609921,23199745,23265281,23396353,24248321,25100289,38010881,39059457,39321601,40632321,41549825,42074114,42205185,42532865,43909121,44957697,45088769,46268418,46530561,47251457,47710209,47775745,48168966,48234497,48758791,49348617,49676289,49938433,51183617,52297729,52559873,52953089,55443459,56819720,57147393,58195970,58327042,58392578,59965441,60030977,60096514,60817411,60882947,61145090,61276161,61407234,61538306,61603842,61669377],"globalmembers":[59965441,61145089],"getproperty":[2621442,2686978,2818050,3145730,3211266,3407874,3670018,4128770,4521986,5046274,5177346,8519685,10551301,14614533,15663109,21626886,25296902,33357826,36241410,36438018,58785794,58916866,59375618,59768834,59834370,60162050,60227586,60293122,60424194,60751874,61014018],"getnamespacenode":[4259841,11599876,54067201]} \ No newline at end of file +{"getuint32":[7340033,9895937,29622276,32309252,76349441,77529089],"grow":[59834369,60293121,71827457,73400321,75366401,76087297],"general":[458753,10027009,10485761,13041665,58523649,64159745],"globalmembers":[76939265,78446593],"getnamespacenode":[2883585,13107204,74121217],"generator":[79233027],"garbage":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3735553,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373954,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077890,7340033,7864321,8716290,9306114,9502722,9830402,9895937,11010050,11206658,11403266,15532035,21757955,24444931,39190531,40501251,44171267,51511297,68943873,70909953,71172097,71368705,71761921,72155137,72417281,72548353,72613889,72744961,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104258,75169793,75366402,75431937,75628545,75759617,75956225,76087298,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856770,77987841,78249985,78512129,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953922,80019457,80084993,80216065,80281602,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002498,81068034,81264642,81330177],"getuint64":[7340033,9895937,30277636,30998532,76349441,77529089],"getnullable":[7340033,9895937,27787268,30932996,76349441,77529089],"getruntimeheapinfo":[11010049,50724868,76087297],"guid":[3735560,5373960,8716296,8847361,9175041,9306120,9502728,9830408,11010056,11206664,11403272,13172742,13238273,13434886,13500422,13697025,13828097,14745606,14811142,15073286,15400961,15597569,15859713,17235974,17301505,17825798,18087944,18284552,18546689,19202049,19988488,20119553,20316161,20578305,20774913,21495809,22216712,22478856,22937608,23527425,23592968,24182792,25100289,42270721,45219841,45350916,47710212,48168964,50593793,51183620,52953089,53149697,54132737,75038721,75104264,76087304,77856776,78512136,79953928,80281608,81002504,81068040,81264648],"getunderlyingobject":[5570561,42663940,81199105],"getbiginteger":[7340033,9895937,28442628,34078724,76349441,77529089],"getheapinfo":[7077889,37486596,75366401],"given":[851969,4915202,6160385,6356993,7077889,7340036,9895940,11010049,12320769,13303809,27787265,30474241,30605313,30932993,31850497,32178177,32768001,34603009,38862849,39059457,39452673,40566785,43188225,51052546,51445762,54067202,54591490,74711041,75366401,76087298,76349444,77529092,77594625,78446593,79364098,80019457],"getchar":[7340033,9895937,25624580,34275332,76349441,77529089],"groups":[9568257,19005441],"generate":[10944513,79560706],"getelement":[3538945,4521985,10027012,75956225,77987841],"giving":[2818052,3276804,3473412,3997700,4390916,14876673,16318465,16973825,18874369,19070977,19136513,20905985,22020097,46202884,49938436,73138180,74645508,75038721,75497476,77135876,78184452],"generally":[13959169],"getfriendlyname":[4456449,4784129,4980737,24248324,73269249,74973185,75694081],"getint16":[7340033,9895937,27656196,34209796,76349441,77529089],"generated":[7077900,11010060,36044802,36175874,36241410,36372482,37552130,37748738,37945346,38076418,38207490,38273026,39387138,39518210,40042498,40108034,40239106,40435714,42401794,43122690,43515906,43581442,44040194,44433410,45744130,45875202,46858242,47513602,48037890,48365570,49217538,49741826,49807362,50003974,50987010,51642374,51970050,52625410,54460418,54853638,54984706,57212934,75366412,76087308,79560705,79757313],"generates":[39059457,39452673],"gets":[393217,327681,851969,1572866,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097154,2162689,2228225,2293761,2555905,2621441,2686977,2752514,2818050,2883585,2949121,3014657,3080193,3145729,3211265,3276802,3342337,3407873,3473410,3538950,3604481,3735553,3801090,3866625,3932161,3997698,4063233,4128769,4194305,4259841,4325377,4390914,4456453,4521990,4653057,4587521,4718593,4784133,4849665,4915201,4980741,5046273,5111809,5177345,5242883,5308417,5373954,5439489,5570562,5636097,5701633,5963779,5767170,6094849,6160385,6553601,6946817,7077889,7340071,7864321,8716290,9306114,9502722,9699329,9830402,9895975,10027009,11010050,11141121,11206658,11403266,11862017,15007745,15663105,19005441,20643841,22413313,23068673,23265281,23658497,24248321,24969217,25559041,25624577,25690113,26148865,26279937,26345473,26869761,27525121,27656193,27721729,27787265,27852801,27918337,28246017,28442625,28508161,28573697,28704769,28770305,28835841,29032449,29097985,29229057,29294593,29425665,29491201,29556737,29622273,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31588353,31719425,31784961,31850497,31916033,32047105,32112641,32178177,32309249,32374785,32440321,32571393,32636929,32702465,32768001,32833537,32964609,33030145,33095681,33357825,33816577,33947649,34078721,34209793,34275329,34340865,34537473,34603009,35586049,35651585,35848193,38666241,39321602,39911425,46071810,46268418,46661634,46792705,47382530,48824322,48955393,49479682,49676290,49872897,51052563,51707905,52428801,52756487,53084164,53542914,53608454,53805061,53936129,54001668,54067219,54198273,54329346,54394884,54525955,54657026,55246855,55508993,55640065,55705604,55771137,55902209,56426498,56492033,56557569,56819722,56885256,56950785,57081858,57344001,57475073,57540610,57606145,57671682,57737229,57802754,57868289,58130443,58195969,58261507,58327041,58392577,58458113,58589189,58785793,58982401,59179009,59244552,59310081,59375619,59441153,59506689,59572225,59637761,59703297,59768833,59834375,59899905,59965441,60096513,60162049,60227585,60293135,60358670,60555265,60686337,60751877,60882945,60948481,61014022,61079553,61145089,61276161,61341697,61407242,61472769,61538310,61734913,61800450,61865985,61931521,61997058,62128129,62193677,62259201,62455817,62586881,62783497,62914561,62980111,63045644,63176705,63242241,63307777,63373313,63504385,63569921,63635457,63700993,63766529,63832065,63897603,64028673,64094209,64225281,64356361,64487425,64552961,64684045,64749569,64815105,64880641,64946177,65011713,65077249,65142785,65208321,65273868,65404929,65470466,65536001,65601537,65732609,65798145,65863684,65929217,65994753,66125825,66191361,66256897,66584577,66715649,66781186,66846721,66912257,66977793,67108865,67174401,67239937,67305473,67436545,67633155,67829761,67960833,68091905,68157442,68222977,68354049,68419586,68485121,68550657,68616193,68747265,68812801,68943873,69009409,69140481,69271553,69402625,69468161,69533708,69599233,69664769,69730305,69795841,69926913,69992450,70057985,70123521,70189057,70254593,70320129,70451201,70516737,70582273,70647809,70778881,70844417,70909953,70975489,71041025,71106561,71237633,71172099,71303170,71368709,71434241,71499777,71565313,71630849,71696385,71761923,71827457,71892993,71958530,72024065,72089601,72155137,72220673,72286209,72351745,72417281,72482817,72548368,72613889,72810497,72876033,72941569,73007105,73072641,73138184,73203713,73269253,73334785,73400321,73465857,73596929,73531393,73662465,73793537,73859073,73990147,74055681,74121221,74186753,74252289,74317825,74383361,74514433,74579969,74645514,74711042,74842115,74973189,75038722,75104271,75169794,75300865,75366408,75431938,75497482,75628549,75694085,75759619,75825153,75956230,76087313,76152839,76218369,76283911,76349479,76414982,76480516,76546051,76742657,77070337,77135883,77201409,77266945,77332484,77398024,77463553,77529128,77856781,77922305,77987846,78053377,78184459,78249985,78315521,78512139,78577667,78708737,78839815,78905353,78970895,79167493,79364097,79495173,79626241,79691779,79888392,79953935,80019462,80084998,80216067,80281614,80347147,80478209,80543745,80674821,80740355,80805889,80871425,80936961,81002510,81068046,81133569,81199109,81264655,81330177],"getcurrent":[4063233,4259841,23068676,26148868,70320129,80936961],"getvalue":[16711681,23199745],"getstring":[7340033,9895937,29884420,32833540,76349441,77529089],"getboolean":[7340033,9895937,29032452,30015492,76349441,77529089],"guide":[8060929,8192001,8323073,8781825,10092545,10420225,17039361,17170433,17956865,18415617,18808833,19398657,19922945,20054017,21233665,25231361,26935297],"getbaseexception":[3014657,3407873,15990785,72548353,78970881],"gethashcode":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"getdynamicproperty":[3801090,5242882,23265285,24969221,30539781,32636933,49676290,57802754,71303170,78577666],"getcacheddocument":[2162689,2228226,7536645,7602181,75169794,79691777],"getsbyte":[7340033,9895937,29229060,32374788,76349441,77529089],"getting":[3342337,5963777,80084993,80543745],"gain":[11272193],"gadgets":[7995395,9109507,74121219],"getsingle":[7340033,9895937,29097988,31064068,76349441,77529089],"greater":[64094209,66584577,67829761,69402625,70975489,76939265],"getpropertyindices":[4456449,4784129,4980737,28180484,73269249,74973185,75694081],"getuint16":[7340033,9895937,27852804,30801924,76349441,77529089],"getdecimal":[7340033,9895937,30736388,31719428,76349441,77529089],"globalflags":[61276161,77070340,77201409],"getobjectdata":[3014658,3407874,19726342,24707078,72548354,78970882],"generating":[7077894,11010054,36044801,37748737,38076417,40042497,42401793,45744129,45875201,46858241,47513601,50003971,50987009,51642371,51970049,54853635,54984705,57212931,75366406,76087302],"getdatetime":[7340033,9895937,29294596,29818884,76349441,77529089],"getter":[5767176,33882114,34668546,35323906,37158914,38666246,38928386,39321606,39911430,46792712,49872904,51118082,51707905,58654725,64618501,75431944,78053377,79364097],"getstacktrace":[3735553,5373953,8716290,9306113,9502721,9830401,11010050,11206657,11403265,15663108,23658501,48955398,52428807,75104257,76087298,77856769,78512129,79953921,80281601,81002497,81068034,81264641],"getcharspan":[7340033,9895937,26869764,35651588,76349441,77529089],"getdouble":[7340033,9895937,26279940,32440324,76349441,77529089],"global":[3735553,5373953,8716289,9306113,9502721,9830401,11010049,11206657,11403265,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14286849,14352385,14417921,14745601,14811137,15073281,15335425,15400961,15466497,15597569,15794177,15859713,15925249,16056322,16711681,17235969,17301505,17760257,17825793,17891329,18087937,18284545,18546689,19202049,19988481,20119553,20250625,20316161,20381697,20512769,20578305,20774913,21102593,21495809,21692417,22216705,22478849,22544385,22609921,22937601,23199745,23527425,23592961,24117249,24182785,24379393,24903681,25100289,26017793,26476545,27066369,27983873,28049410,45547521,49545217,56229889,57147398,57737217,58130433,60293122,60882945,61276161,61407233,61734913,61931521,62193665,62390273,63045633,64684033,65273857,66453505,66519041,67502087,67698689,69206025,69533698,69992449,70254593,70713345,72744961,74907649,75104258,76087299,76939266,77070339,77201409,77856770,78381064,78446593,78512130,79953922,80281602,80412673,81002498,81068035,81264642],"getcomponents":[10747905],"gcnew":[27787265,30474241,30932993,34603009,38862849,54591489,78184449,78249985],"getint64":[7340033,9895937,30146564,32047108,76349441,77529089],"gettype":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,57278466,63963138,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"getint32":[7340033,9895937,28573700,29425668,76349441,77529089],"getproperty":[2097154,2752514,2818050,3276802,3473410,3538946,3997698,4390914,4456450,4521986,4784130,4980738,5570562,5963778,9699333,11141125,15007749,20643845,22413318,25559045,25690118,26345477,46268418,46661634,54329346,57081858,73138178,73269250,74645506,74973186,75497474,75694082,75956226,76283906,77135874,77987842,78184450,79495170,80084994,81199106],"getenumerator":[3211265,9175041,76414977],"generic":[6356993,7733249,7929857,8323073,8454145,8585217,8912897,8978434,9568257,9961473,10158081,10223617,10354693,10420225,10747905,10551297,10878977,11075585,11599873,11665409,11730945,11862017,11927553,12124161,12386305,12517377,12713985,12845057,12910593,13631489,13893633,13959170,14221313,14286849,14352386,14417921,14876673,15204353,15335425,15466497,15794177,15925250,16711682,16973825,17760258,17891329,17956865,18874369,19005441,19136513,19398657,20250625,20381697,20512770,20905985,21102593,21692418,22020097,22544386,22609921,23199746,24117250,24903682,25231361,26017793,26476545,26935297,27066369,27787265,27983873,30474241,30605313,30932993,31850497,32178177,32768001,33882113,34603009,37617665,37814273,38862849,40566785,41615361,42139649,43712513,44630017,51118081,54591489,58916865,64290817,69861377,70909953,72417281,73531393,74514433,75431937,75890689,76742657,77266946,78053377,78184449,78249985,78577666,78643201,79036417,80478209,80609281],"getmetaobject":[3342337,5963777,80084993,80543745],"getbytes":[2818049,3276801,3473409,3997697,4390913,14090244,17432580,73138177,74645505,75497473,77135873,78184449],"getdynamicmembernames":[3342337,5963777,80084993,80543745],"getbyte":[7340033,9895937,30670852,32112644,76349441,77529089],"getpropertynames":[4456449,4784129,4980737,32243716,73269249,74973185,75694081]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_104.json b/docs/Reference/fti/FTI_104.json index 9ad6937a5..7bc04574c 100644 --- a/docs/Reference/fti/FTI_104.json +++ b/docs/Reference/fti/FTI_104.json @@ -1 +1 @@ -{"heapexpansionmultiplier":[38993921,51511300,58589185],"hitline":[524290,1048577,1179649,3801090,39321601,55902214,56688646],"hasmember":[3014657,6946821,55705601],"helplink":[45744129,58654721],"heapsizeviolationpolicy":[38404097,53346308,53936129,58261505],"hash":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"highest":[61145089],"handled":[12910593,52035585,56098817],"handler":[1900545,2097153,2162689,2228225,6750209,7012353,7733249,38010882,56229890,57212931,57671681,57933826],"help":[45744129,51511297,58654721],"heapsizelimit":[39911425,55640068,59244545],"heap":[4456449,4980737,7208961,26345473,27000836,27787265,29229060,38010881,38404099,38993925,39911429,42074115,49086467,49479683,49872897,50200583,50331651,51249155,51511302,51773442,52101121,52690949,52887555,53149697,53346306,53542913,53936135,54263809,55640067,55836673,56164353,56557569,58261508,58589189,59244549,60817412],"held":[458753,1245185,55836673],"hosts":[52690945,53149697,53542913,54263809],"host":[262145,1900545,2097153,2293766,2424833,2162689,2228225,3014657,3407897,3735565,4259849,4587533,5046303,5373953,6291469,6357005,6553613,6750209,6946817,7012353,7077892,7143438,7208973,7340033,7471108,7536653,7602181,7733249,7929860,7995397,8060936,8126478,8257543,8323076,8388609,8454151,8519683,8585221,8650756,8716301,8781825,8912903,8978445,9043975,9109507,9175041,9240580,9306118,9371651,9437198,9502724,9568263,9633795,9699335,9764868,9830409,9895941,9961475,10027011,10092549,10158083,10223620,10289159,10354696,10420231,10485767,10551299,10616840,10682375,10747907,10813442,10878984,10944519,11010050,11075591,11141127,11206663,11272194,11337735,11403265,11468802,11534339,11599874,11665415,11730947,11796482,11862018,11927554,11993090,12058631,12124162,12189703,12255247,12320769,12386306,12451842,12517378,12582919,12648449,12713988,12779522,12845057,12910601,13041668,13107202,13303812,13369345,13434883,13500421,13565961,13697028,13631493,13828106,13959171,14024705,14090242,14155778,14286853,14417923,14483460,14876674,14942210,15007749,15138820,15269893,15597570,15925250,16318465,16777217,16842753,17235970,17563649,17760258,18087938,18350081,18612225,18743298,19070978,19136516,19398666,19660802,19922948,19988482,20119555,20643842,20709380,20774913,21037061,21364737,21430276,21495809,21889028,22413313,22478849,22609924,23199749,23265281,23396355,23789573,24248325,25100293,26476545,30932996,31457284,31784963,32440323,32505861,32899073,33292297,33357827,33619971,33751043,34406403,34603011,34865156,35258377,35323907,35717123,35782659,36175875,36765701,37158916,37683206,38010890,39059462,40042497,40632326,41025537,41353219,41549825,42074118,42205190,43581442,43909126,44171265,44433411,44957702,45088775,45219843,45416449,45809665,46071810,46268422,46792705,47054849,47185922,47251457,47382529,47775750,48168961,48365569,48496642,48758785,49283074,49348609,49676289,49938433,50528257,50659331,50724865,51183617,51642369,51838977,52035585,52297729,52494339,52822018,53280770,54067219,54460417,55705601,56098817,56229890,56492034,56819713,57212930,57344001,57671682,57802754,57933826,58195988,58327059,58392595,58458113,58785824,58982401,59047942,59441154,59768857,59965445,60030977,60096531,60817427,60882963,61145093,61407251,61538323,61603859,61669377],"handle":[3407873,5046273,6750209,7012353,12910593,46596097,50397186,58785793,59768833,60948481],"hidehostexceptions":[61145089],"high":[39321601,55377921],"hostdata":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47775745,48496644,49283078,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"htm":[10616833],"heapsizesampleinterval":[38404097,52887556,58261505],"hostitemflags":[3735566,4587534,6291470,6357006,6553614,7208974,7536654,8716302,8978446,11927558,12320769,12648449,12713985,12845057,13041665,13107206,13303814,13369345,13500422,13697025,13828101,13959169,14024705,14090246,14155782,14286854,14417921,14483457,14876678,14942214,15007750,15138817,15269894,15597574,15925254,16777217,16842753,17235976,17563649,17760264,18087944,18350081,18612225,18743304,19070984,19136513,19398663,19660808,19922945,19988488,20119553,20643848,20709377,20774913,21037064,21364737,21430273,21495809,21889025,22413313,22478849,22609928,23199752,23265281,23396353,24248328,25100296,31064068,32047108,32440321,33292292,33423364,33619969,34209796,34603009,35258372,35717121,38010881,58195982,58327054,58392590,59965444,60096526,60817422,60882958,61407246,61538318,61603854],"hostfunctions":[3407874,5046313,8257537,8388609,8519681,8912897,9043969,9109505,9175041,9306113,9371649,9502721,9568257,9633793,9699329,9764865,9830401,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10878977,10944514,11075585,11141121,11206657,11337729,11403269,11534337,11665409,11730945,12058625,12189697,12255233,12582913,12910593,13565953,13828097,19398657,32899073,33357825,33751041,34406401,34865153,35323905,35782657,36175873,38010881,58785838,59768841],"hitcount":[524289,1179652,37617665,55115777,55902209,56033284],"http":[10616833,12910593],"hidden":[61145089],"holding":[31326209],"holds":[12255233,19857409,21692417,38010881,55836673],"hit":[524290,1048577,1179651,3801089,37617666,55115778,55902210,56033282,56688643],"hitlines":[37617665,55115777,56688644],"hostsettings":[38010881,45416450,46071809,46792705,47382529,60030982],"hos":[4718593,30605314,39976961,59965441,60948482],"hresult":[40501254,45744130,48365570,58458114,58654722],"handling":[12910593],"hint":[61145089],"handlers":[60817409,61407233,61538305,61603841],"hosttypeargs":[8126469,9437189],"honor":[13631489,16187393,23068673,23789569,50593794],"hands":[59965441],"halt":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,45678593,46268417,47775745,51904513,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"hierarchy":[51576833,52428801,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55246849,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,58982401,59047937,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60030977,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61079553,61276161,61407233,61472769,61538305,61603841],"hostwindow":[39059457,40632321,42205185,43909121,44957697,46268417,57344004,58392577,60096513,60882945,60948481,61407233,61538305,61603841],"hidedynamicmembers":[59965441],"hostexception":[61145089],"hosttypecollection":[262146,4259842,5046273,7077898,7143434,8060933,10813441,11010049,11272197,11468801,11599873,11796485,11862017,11993093,12124161,12386309,12451841,12517377,12779525,30932993,36765697,37158913,37683206,38010881,45809666,54067211,56426497,58785793],"hierarchical":[7143425,8060929,54067201]} \ No newline at end of file +{"handled":[15990785,73924609,74448897],"hint":[76939265],"handler":[1703937,2293761,2555905,2686977,7471105,7798785,9764865,45547522,68943874,70909955,72613889,73531394],"hitlines":[56819713,69271556,80347137],"heapsizeviolationpolicy":[59834369,70778884,72220673,75366401],"hierarchical":[7995393,9109505,74121217],"handle":[3538945,4521985,7798785,9764865,15990785,70582273,73465858,75956225,77987841,81133569],"hidden":[76939265],"hosts":[64094209,66584577,67829761,69402625],"hresult":[59703302,60358658,62455810,62980098,72548354,78905346,78970882],"hasdynamicproperty":[3801090,5242882,26411013,27459589,33226759,36634631,53411842,58851330,71303170,78577666],"hierarchy":[68943873,69992449,70909953,71172097,71368705,71761921,71958529,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76677121,76742657,77201409,77266945,77332481,77398017,77529089,77594625,77856769,77987841,78249985,78577665,78708737,78774273,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"hostexception":[76939265],"human":[4456449,4784129,4980737,24248323,73269249,74973185,75694081],"hitline":[393217,327681,1572866,4718594,49545217,69271558,80740358],"hostsettings":[45547521,54657026,63635457,65536001,67895297,69992454],"hash":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"holding":[54591489],"handling":[15990785],"host":[1376257,1703937,2293761,2424833,2490374,2555905,2686977,2883593,3342337,3538969,3735565,3801089,3866625,4325377,4456449,4522015,4784129,4980737,5111809,5242881,5373965,5439489,5701633,5767169,6422529,6946819,7012353,7471105,7733253,7798785,7929860,7995406,8060932,8192004,8323076,8388609,8454151,8519681,8585225,8716301,8781829,8847364,8912903,8978446,9109512,9175044,9306125,9371649,9502733,9568260,9633795,9699331,9764865,9830413,9961479,10027011,10092549,10158088,10223623,10289155,10354702,10420229,10485763,10551303,10616833,10747912,10813443,10878983,10944519,11010061,11075590,11141123,11206669,11272195,11337732,11403277,11468805,11534338,11599874,11665412,11730951,11796482,11862024,11927559,11993091,12058626,12124167,12255234,12386311,12451842,12517383,12582919,12648449,12713986,12779523,12845063,12910599,12976130,13041667,13107202,13172737,13238273,13303811,13369346,13434881,13500418,13565954,13631495,13697026,13762562,13828097,13893639,13959183,14024707,14221319,14286852,14352389,14417924,14745602,14811138,15073281,15138818,15204359,15335428,15400962,15466501,15597569,15794181,15859713,15925253,15990793,16711690,17235970,17301506,17760260,17825793,17891332,18087937,18284546,18219013,18546689,19005449,19202050,19660801,19988482,20119554,20250627,20316162,20381700,20512772,20578305,20774913,21102596,21495810,21692420,22216705,22478850,22544389,22609923,22937602,23199754,23265281,23461889,23527426,23592961,24117252,24182785,24248321,24379395,24772609,24903685,24969217,25034753,25100289,25493505,25559042,26017797,26214402,26345474,26411009,26476548,26542085,26673154,27000833,27066373,27131905,27459585,27590658,27721730,27983876,28180481,29163521,29687809,29753346,30539777,31457283,31522817,31653890,31981571,32243713,32505860,32636929,32899074,33161217,33226753,33423361,33554434,33619972,33685505,33882115,34013186,34406402,34471939,34668548,34734083,34799620,34996225,35061764,35127298,35323906,35454977,35782659,35913729,36110338,36438018,36503553,36634625,36765698,36962306,37158916,37355522,37617665,37814273,38010881,38141956,38469635,38600708,38666243,38928386,38993921,39321601,39780355,39845890,39911428,39976962,40370178,41091073,41615362,43384834,43450371,43646979,43712515,43974662,44957698,45154307,45285378,45547530,46596100,46661633,46727169,46792706,46923780,47120385,47579139,47775745,48300035,48562180,48693249,48824321,49152003,49348609,49479683,49610753,49676289,49872899,50069505,50200577,50397187,50462725,50855945,51118082,51707922,51773443,51838980,52035587,52166661,52494337,52690945,52887553,53411841,53739521,54329347,54657025,54722569,55050241,55181313,55377923,55574529,55705601,55902209,56033283,56557569,56754177,57147393,57606145,57737222,57802753,57868289,57999362,58064897,58130439,58523649,58654721,58851329,60030977,60162049,60293126,61210625,61407238,61472769,61734913,61865985,61931521,62062595,62193670,62324738,62390273,62455809,62652417,62717955,63045638,63176705,63635458,63832065,64159745,64552961,64618497,64684038,64815105,65273862,65536001,66322433,66519041,67043330,67305473,67371009,67502081,67567619,67895297,68288514,68419587,68943874,69009409,69074945,69140481,69206017,69533702,69992449,70713345,70909954,71303169,71827457,72024066,72417283,72548353,72613890,73269250,73400321,73531394,73728001,73924609,74121235,74317826,74448897,74514434,74776577,74907649,74973186,75104275,75235330,75300866,75431942,75563010,75694082,75890691,75956256,76087315,76349441,76677126,76742658,76808194,76939269,77266947,77529089,77660162,77791234,77856788,77987865,78053379,78381057,78446597,78512147,78577667,78643203,78708738,78905345,79036419,79364097,79626243,79822850,79953939,80281619,80412673,80478210,80543745,80609283,81002515,81068051,81264659],"hidehostexceptions":[76939265],"hostwindow":[57737217,62193665,63045633,64684033,65273857,69009412,69533697,75104257,79953921,80281601,81002497,81068033,81133569,81264641],"hosttypecollection":[1376258,2883586,4521985,7929866,7995402,9109509,11534337,11599873,11796481,12058625,12255237,12451841,12713985,12976133,13107201,13369349,13565953,13762565,15138821,43974662,45547521,46596097,50462721,51838977,55705602,74121227,75628545,75956225],"hidedynamicmembers":[78446593],"heapsizelimit":[55246849,73203716,77398017],"holds":[13959169,17563649,23724033,45547521,78249985],"hasmember":[3342337,8519685,80543745],"heapsizesampleinterval":[59834369,68354052,75366401],"handlers":[75104257,76087297,79953921,81264641],"hostitemflags":[3735566,5373966,8716302,9306126,9502734,9830414,11010062,11206670,11403278,13172737,13238273,13434881,13500422,13697030,13828097,14024705,14286849,14352390,14417921,14745606,14811142,15073281,15335425,15400966,15466502,15597569,15794182,15859713,15925254,16711685,17235974,17301510,17760257,17825793,17891334,18087937,18284552,18546689,19202054,19988488,20119560,20250625,20316168,20381697,20512769,20578305,20774913,21102600,21495816,21692417,22216705,22478856,22544392,22609921,22937608,23199751,23527432,23592961,24117249,24182785,24379393,24903688,25100289,26017800,26476545,27066376,27983873,45350916,45547521,47710212,48168964,49152001,50855940,51183620,51773441,52035585,54722564,55377921,75104270,76087310,77856782,78446596,78512142,79953934,80281614,81002510,81068046,81264654],"hitcount":[393220,1572865,56819713,66715652,80347137,80740353],"hit":[393219,327681,1572866,4718593,56819714,66715650,69271555,80347138,80740354],"hostdata":[57737217,57999364,58130433,60293121,61407233,62193665,63045633,64684033,65273857,68288518,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"hosttypeargs":[8978437,10354693],"held":[524289,1441793,78249985],"hands":[78446593],"highest":[76939265],"helplink":[60358657,62980097,72548353,78970881],"htm":[10747905],"halt":[57737217,58130433,58982401,60293121,61407233,62193665,63045633,64684033,65273857,65601537,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"honor":[15269889,18219009,26542081,26804225,78118914],"hos":[9240577,41746434,52232193,78446593,81133570],"high":[49545217,74776577],"hostfunctions":[3538946,4522025,8388609,8585217,8912897,9568257,9633793,9699329,9961473,10027009,10158081,10223617,10289153,10485761,10616833,10747905,10813441,10551297,10878977,10944513,11075585,11141121,11272193,11337729,11468801,11665409,11730945,11862017,11927553,11993089,12124161,12386305,12517377,12582914,12648453,12779521,12845057,12910593,13041665,13631489,13893633,13959169,14221313,15204353,15990785,16711681,19005441,23199745,43646977,45154305,45547521,46923777,47579137,48300033,49479681,52887553,54329345,75956270,77987849],"help":[60358657,62980097,70975489,72548353,78970881],"heap":[6094849,7077889,11010049,37486593,39059460,39452676,45547521,50724865,55246853,59834371,60293123,61014021,64094213,66191361,66584577,66977795,67829761,68354051,68747267,69402625,69730305,70778882,70844419,70975494,71041031,72155137,72220679,72810499,73203715,73859073,74383362,75366404,76087300,76152837,77398021,78249985],"http":[10747905,15990785],"heapexpansionmultiplier":[61014017,70975492,76152833]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_105.json b/docs/Reference/fti/FTI_105.json index af5f313ea..0006d865a 100644 --- a/docs/Reference/fti/FTI_105.json +++ b/docs/Reference/fti/FTI_105.json @@ -1 +1 @@ -{"implementers":[3014657,4521985,13434881,55705601,60227585],"invocations":[13434881],"int":[7602179,8388612,9306116,9502724,9568259,10354692,10485761,11337729,12189697,14811140,15663108,15728641,15794177,16580609,17170436,19202049,23527428,24182788,25231364,25296900,26214404,27590660,27656196,28835844,29163524,29425668,29622276,29884420,30015492,39583747,40501252,41680901,42991620,43384835,45023235,50987011,52690949,53149701,53542917,54263813,55181316,55574531,55771141,56885252,60751873],"immediate":[45744129,58654721],"interchangeable":[12255233],"importers":[54853633],"intvalue":[9043969],"indentation":[47710209,48234497,52559873],"idynamicmetaobjectprovider":[3407882,5046282,8519686,9109509,9633798,9961478,10027014,10158086,10747910,11730950,33357826,34865153,35323906,35782658,58785802,59768842,59965441],"iarray":[2621441,3211265,15728641,15794177,16580609,16711681,17432577,17498113,18022401,18219009,18481153,19202049,37027841,37421057,37814273,37945345,44040193,44564481,44826625,45350913,59375617,59834369],"ijavascriptobject":[3145730,37027842,37814274,38535169,38797314,39518210,40239106,41156610,45940737,46399489,59375622,59834374,60162054,60293125,60424198,60751878],"iscriptengineexception":[38010881,39845889,40501249,41025537,41615361,42139649,42729473,43646977,43712513,44236801,44892161,45481985,46006273,46727169,47513601,47841281,48103425,48365570,48627713,48693249,49020929,49545217,50135041,58458117,58654724,58982404],"idictionary":[2752519,16121857,17039361,17694721,19595265,42663937,43253761,46858245,49152001,50003973,56426500,57540624],"ihost":[4718593,30605313,46596097,50397185,60948481],"immutable":[2490369,12976129,38010881,46137345,55312386],"interval":[38404098,42074114,50987010,51249154,52887554,55574530,58261506,60817410],"ilist":[13828097,19398657,61341697],"initialize":[3014657,4521985,11272193,11796481,12386305,12779521,55705601,60227585],"indexer":[13828097,19398657],"indexers":[13828098,19398658],"indexed":[2621443,2686979,2818051,3145731,3211267,3670019,4128771,4521987,5177347,14811137,15663105,17170433,23527425,24182785,25296897,35913729,35979265,36241409,36438017,36700161,36896769,36962305,37027841,37289985,37814273,38797313,39518209,40239105,41156609,41680897,43450369,47120385,47644673,48824321,49414145,55771137,58916868,59375620,59834372,60162052,60227588,60293124,60424196,60751876,61014020],"itypedarray":[2818050,3670018,16056321,16449537,17301505,38535170,40239106,41156611,46989313,60424197,60751894,61341697],"iscriptableobject":[2424834,13434881,38010881,56426500,57802757,59768836],"increases":[51511297],"interfere":[61669377],"instances":[13631489,23461889,23789569,24051713,24444929,24772609,24969217,25362433,25493505,25559041,25821185,25952257,26017793,26083329,26411009,26542081,26607617,26804226,26935297,27066369,27131905,27394049,27525121,27656194,27721729,27983873,28180481,28311553,28377089,28573697,28704769,28901378,29032449,29294593,29491201,29556737,29622274,29753345,30146561,30343169,30736385,31391745,31981569,33095681,38010881,51445761,53805057,54329345,55312386,55967745,56295425,56623105,60817410],"istransient":[50593793],"iterates":[2752513,57540609],"icomparablet":[8912898],"ienumerable":[2752513,19005447,42991622,43515910,56426504,56885254,57409542,57540617],"ipropertybag":[2752514,3407878,5046278,9371654,10551302,10944513,11534342,33357826,35323906,35782658,38010883,46858242,56426501,57540613,57999361,58785798,59768838],"implement":[13828097,19398657,57540609,59965441],"isreadonly":[5373957,5898245,16318469,16973829,46858241,57540609],"invalid":[60686338],"interfaces":[13631489,14548993,16187393,16908289,22151169,22740993,23068673,23789569,23920641,24641537,24969217,25362433,26673153,26738689,27459585,27590657,28180481,28508161,28639233,28901377,28966913,29097985,29163521,29425665,29622273,29884417,29949953,30146561,31129601,31391745,31850497,33161217,33554433,33685505,34275329,34734081,35127297,36044801,36306945,36569089,37224449,37486593,37879809,38010881,38207489,38469633,38535169,39190529,39976961,40566785,45613057,53477377,59113473,60751873],"introduced":[43450369,49414145],"icollection":[2752522,42663943,43253767,46858246,56426500,57540628],"itemname":[11927557,12320773,12648453,12845061,13041669,13107205,13303813,13369349,13500421,13697029,13828101,13959173,14024709,14090245,14155781,14286853,14417925,14483461,14876677,14942213,15007749,15597573,15925253,16777221,16842758,17235974,17563653,17760262,18087942,18350085,18612230,18743302,19070982,19136518,19398662,19660806,19922950,19988486,20119558,20643846,20709382,20774918,21364742,21495814,22413318,22478854,22609926,23199750,23265286,23396358,24248326,25100294],"instantiation":[3407873,5046273,9109508,10092546,10944513,11141121,34865153,51707905,52625409,58785793,59768833,61407233,61538305,61603841],"import":[7143425,7602178,8060929,8126466,8323074,8454145,9306113,9437186,9699329,9830401,10289153,10420225,10485761,10616833,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12255233,12582913,12845058,12910593,13107201,14090242,14942209,15925250,16777217,17563650,17760257,18350081,18612226,18743298,19660801,20643842,21364737,22413314,23265281,38010881,39059457,40632321,41549825,42074113,42205185,43909121,44957697,45088769,46268417,47251457,47775745,50528258,51838978,58195969,58327041,58392577,58785793,60096513,60817409,60882945,61407233,61538305,61603841],"including":[13631489,23789569],"iscriptobject":[2621449,2686985,2818057,3145737,3211273,3670025,4128770,5177353,14614529,14811137,15335425,15400961,15663105,15990785,16646145,17170433,17891329,21626881,22282241,23003137,23527425,23592961,24117249,24182785,24903681,25296897,35913729,36241409,36700161,36962305,37027845,37814277,38010881,38797317,39518213,40239109,40960001,41156613,41680897,42401793,42991617,43515905,47120389,48824322,55050241,55771137,56360961,56885249,57409537,58916869,59375634,59834386,60162066,60227588,60293138,60424210,60751890,61014034],"invokewithdirectaccess":[2621442,2686978,2818050,3211266,3670018,15728645,15794181,16580613,19202053,37421058,37945346,59375618,59834370,60162050,60424194,60751874],"invalidoperationexception":[58654725],"iscomparable":[8912897],"ignorecase":[6946822],"indices":[9961478,10158086,10747910,13828097,19398657,37027841,37814273,38797313,39518209,40239105,41156609,42991618,47120385,47644673,48824321,56885250,58916865,59375617,59834369,60162049,60227585,60293121,60424193,60751873,61014017],"idisposable":[2621441,2686977,2818049,3145729,3211265,3670017,3735553,4128769,5177345,8257538,24576001,24707073,30212097,30539777,58195972,58261508,58327045,58392580,58916869,59375621,59703300,59834373,60162053,60227588,60293125,60424197,60751877,60817412,61014021,61407236],"instead":[13828097,19398657,22151172,42336257,45875201,47906817,54001665,54132740,54263812,59572225,59637761],"iscriptengine":[3735554,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13172737,13238273,13303809,13369345,13500417,13697025,13631489,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14680065,14745601,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15466497,15532033,15597569,15859713,15925249,16187393,16777217,16842753,16908289,17235969,17367041,17563649,17760257,17956865,18087937,18350081,18612225,18743297,18939905,19070977,19136513,19398657,19464193,19529729,19660801,19922945,19988481,20119553,20250625,20316161,20447233,20643841,20709377,20774913,20971521,21037057,21102593,21233665,21364737,21430273,21495809,21757953,21823489,21889025,22085633,22216705,22413313,22478849,22609921,22806529,23068673,23199745,23265281,23396353,23789569,23920641,23986177,24248321,24641537,25100289,27197442,27918338,28246018,28770306,30867458,31064065,31588353,32047105,32112642,32440321,32964609,33292289,33619969,34078721,34668545,35061761,35586049,38010881,40042497,40828929,41353217,42336257,42467329,42795009,43057153,43450369,43581441,43778049,44105729,44171265,44367873,44433409,44630017,45154305,45219841,45678593,45875201,46333953,46465025,46530561,47054849,47185921,47316993,47579137,47710209,47775746,47906817,48168961,48234497,48300033,48496641,48758785,48889857,48955393,49283073,49348610,49414145,49610753,49676289,49741825,49938433,50528257,50659329,50790401,51052545,51183617,51314689,51642369,51838977,51904513,52297730,52953089,53411841,53805058,54001665,54329345,54525953,55967746,56295425,56623106,56819713,58195972,58327045,58392580,60817412,61407236],"isync":[4784129,30277633,31522817,32309249,32636929,33161217,33226753,33685505,33947649,34144257,34734081,35454977,36306945,37224449,38207489,38600705,57016321],"intptr":[2621442,2686978,2818050,3211266,3670018,15728645,15794181,16580613,19202053,37421058,37945346,50397190,59375618,59834370,60162050,60424194,60751874],"invokes":[2621445,2686981,2818053,3145731,3211269,3407876,3670021,3735553,4128771,4521987,4587521,4784130,5046275,5177347,6291457,6356993,6553601,6881282,7208961,7536641,8388610,8716289,8978433,9306114,9568258,9830402,12910593,14221313,15400961,15728642,15794178,15990785,16580610,16646145,18874370,19202050,21757953,22282241,23003137,23592961,30474242,31260674,32899074,33226753,33947649,37421058,37945346,38273026,38600706,39649282,43122690,45678593,47054849,51642369,51904513,56492033,57016322,58195969,58327041,58392577,58720258,58785795,58916867,59375621,59768836,59834373,60096513,60162053,60227587,60293123,60424197,60751877,60817409,60882945,61014019,61407233,61538305,61603841],"invoker":[851969,1507329,4784129,6881281,30277633,30474241,31260673,31522817,31916033,32309249,32636929,33161217,33226753,33685506,33947649,34144257,34734082,35454977,35520513,36306945,37224450,38207490,38600705,39124994,39649281,40173570,45613057,50069505,57016321,58392578,58720257,60096514,60882945],"iarraybuffer":[2621442,15728641,16580609,17432577,18022401,18219009,37027842,37945345,38535169,44040198,45350913,59375621,61341697],"ignores":[10223617],"identical":[24969217,25362433,25493505,26083329,26411009,26542081,26607617,26935297,27066369,27983873,28049409,28311553,28377089,28573697,29294593,29491201,29949953,30343169,30736385,31981569,32178177,34013185,35848193,37879809],"invoked":[3407878,5046278,6815745,7405569,7864321,8847361,9764865,10092545,10223617,10878977,11141121,12910593,13565953,14221313,19791873,21757953,33751042,34865154,36175874,41549825,47251457,58785798,59768838,60817409],"ignored":[10223617,25362433,26411009,27066369,27983873,28049409,28377089,28573697,29294593,30343169,31981569,34013185,37879809,59179009,61145095,61669378],"iequality":[5898241,6160385,16973825,17629185],"include":[5242881,10616833,13631489,23789569,49610753,50790401],"importable":[44433409,50659329],"inheritance":[51576833,52428801,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55246849,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,58982401,59047937,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60030977,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61079553,61276161,61407233,61472769,61538305,61603841],"icomparable":[8912898],"implementation":[3014668,4521996,5242881,18153473,19005441,30474241,31260673,31916033,35520513,38010888,39059457,39976961,40566786,40632321,41549825,42205185,43909121,44433409,44957697,46268417,47251457,50069505,50659329,50921473,55705612,56229889,56426497,57671681,57999361,58195969,58392578,58523649,58720257,60096514,60227597,60489729,60882947,61407233,61538305,61603842],"inherits":[53477377,54067201,54722561,55312385,55705601,57212929,57540609,57933825,57999361,58327041,58392577,58523649,58654721,58785793,58851329,58916865,58982401,59113473,59375617,59506689,59834369,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60751873,60817409,60882945,61014017,61407233,61538305,61603841],"inherited":[131073,262145,327681,1572870,1638406,1703942,1769485,1835015,1900550,1966086,2031622,2097158,2359302,2490376,2555912,2621450,2686991,2752522,2818063,2162695,2228230,2883592,3014676,3145738,3211274,3276806,3342344,3407878,3473414,3538952,3604486,3670031,3735553,3801094,3866629,3932166,3997702,4063238,4128769,4259853,4325382,4390917,4456454,4522004,4587525,4653062,4849672,4980742,5046319,5111814,5177354,5439494,6291513,6357049,6553657,6881286,7209011,7536697,7798789,8716340,8978490,34537476,37027847,37814279,38797322,38928385,39059483,39518213,40239114,40632347,41156619,42008578,42074134,42205211,42598402,43909146,44957722,45744136,45809668,46137345,46268439,46858245,46923778,47120389,47972353,51576838,53084166,53477386,53673990,53870598,54067218,54722570,55115782,55312393,55705620,55836678,55902214,56229894,56426502,56492037,56754182,57212935,57540623,57671686,57933830,57999378,58130438,58195973,58261510,58327041,58392659,58523655,58589190,58654735,58720262,58785839,58851334,58916865,59113481,59244550,59310086,59375633,59506698,59703302,59768838,59834385,59899910,60096595,60162073,60227604,60293135,60358665,60424217,60489734,60555269,60751898,60817481,60883019,61014031,61407316,61472773,61538388,61603925],"iserializable":[18415617],"ihostwindow":[4718594,30605313,39976961,46596098,50397185,57344007,60948485],"initonly":[1114113,1376257,1441793,1507329],"information":[3735554,4587522,4980741,6029313,6291458,6356994,6488065,6553602,7208966,7274497,7471105,7536642,7929857,7995393,8126465,8388609,8454145,8585217,8716290,8978434,9240577,9437185,9502721,9895937,10092545,10354689,11141121,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13172737,13303809,13369345,13500417,13697025,13893633,13959169,14024705,14090241,14155777,14286849,14417921,14483457,14548993,14745601,14876673,14942209,15007745,15073283,15138817,15204354,15269889,15532033,15597569,15925249,16252929,16777217,16842753,17104897,17235969,17563649,17760257,17825793,18087937,18153473,18350081,18546689,18612225,18743297,18939906,19005441,19070977,19136513,19333121,19464195,19660801,19726337,19857409,19922945,19988481,20054017,20119553,20447233,20512769,20643841,20709377,20774913,21037057,21233665,21299201,21364737,21430273,21495809,21692417,21889025,21954561,22085633,22413313,22478849,22609921,22806529,23199745,23265281,23396353,23461890,24248321,24641537,25100289,25821186,26345474,26607618,27787266,28049409,28442626,30343170,30998530,32178178,32374785,33488897,34078721,35061761,35192835,36634625,37355521,37748737,38010882,38666244,39256065,39321601,39452673,40435713,41549826,42336257,45285377,45744129,45875201,47251458,50003971,50200577,51576833,51970049,52166658,53739521,53936129,57278466,58195970,58261509,58327042,58392578,58654721,59244545,59310081,59637761,59703297,60096514,60489729,60686337,60817414,60882946,61407234,61538306,61603842],"icustomattributeprovider":[5242886],"iterable":[2949122,18153474,19005448,61079554],"idata":[2686977,38797313,60162049],"issues":[57147393],"interrupts":[3735553,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,17956865,20971521,28770305,44367873,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"isnull":[3407873,5046273,9175044,42336258,45875202,58785793,59637761,59768833],"ityped":[2818049,3670017,16056321,16449537,17301505,40239105,41156609,46989313,60424193,60751873],"internal":[43057154,46465026,47382529,60817409],"iwindows":[5177345,31195137,47120385,61014017],"isyncinvoker":[1507333,4784130,30277633,30474241,31260673,31522821,31916033,32309253,32636929,33161221,33226753,33685509,33947649,34144261,34734085,35454981,35520513,36306949,37224453,38207493,38600705,39059457,39124997,40173573,40566786,40632321,42205185,43909121,44957697,45613061,46268417,50069511,57016325,58392583,58720261,60096519,60882946,61407233,61538305,61603841],"inside":[3014657,4521985,55705601,60227585],"item":[2752513,10944515,11927554,12320769,12648449,12713985,12845057,13041665,13107202,13303810,13369345,13500418,13697025,13828099,13959169,14024705,14090242,14155778,14286850,14417921,14483457,14876674,14942210,15007746,15138817,15269890,15597570,15925250,16777217,16842753,17235970,17563649,17760258,18087938,18350081,18612225,18743298,19070978,19136513,19398659,19660802,19922945,19988482,20119553,20643842,20709377,20774913,21037058,21364737,21430273,21495809,21889025,22413313,22478849,22609922,23199746,23265281,23396353,24248322,25100290,34537473,36700163,36896771,37027842,37814274,38797314,39518210,40239106,41156610,41680900,42401796,43188225,45809665,46858241,47120386,47644674,48824322,49152005,54067201,55771141,56360965,56426497,57540610,57999361,58916866,59375618,59834370,59965441,60162050,60227586,60293122,60424194,60751874,61014018,61145089],"iarraybufferview":[2686981,2818053,3211266,3670021,15794177,16711681,17498113,18481153,19202049,37421057,37814274,38535169,38797315,40239107,41156611,44040193,44564481,44826625,59834373,60162060,60424204,60751884],"idisposablet":[8257538],"iwindowsscriptobject":[5177346,31195137,39976961,47120386,61014021],"invoking":[3014657,4521985,8388609,13631489,13828097,19398657,23789569,45088769,52494339,55705601,58195969,60227585],"interactive":[47710209,48234497,52559873],"inotifypropertychanged":[589825,56426500],"info":[1703937,4456449,5767169,5832705,15073281,15204353,18415622,18939905,19464193,19857414,21692422,21954565,23461889,23658502,25821185,26345473,26607617,27787265,28049409,28442625,30343169,30998529,32178177,36634626,39256065,39911425,40304641,41877505,45285381,46661633,47251457,49086465,49479681,49872897,50003973,50331649,51118081,51576833,51707905,51970054,52166661,52232193,52625409,53739521,55640065,56164353,56557569,57278469,59244545,59310081,60489730],"iconvertible":[9699333,10289157,10420229,10485765,10682373,11075589,11206661,11337733,11665413,12058629,12189701,12582917],"immutablevalueattribute":[2490370,12976133,38010881,46137346,55312392],"iproperty":[2752513,9371649,10551297,11534337,46858241,57540609],"instantiate":[8650753,11927553,12320769,12648449,13369345,14024705,14155777,14876673,15597569,16842753,17235969,18087937,19070977,19988481,20774913,21495809,22478849],"increment":[3014657,4521985,55705601,60227585],"inner":[41025537],"imports":[3735560,4587528,5046280,6291464,6357000,6553608,7077889,7143426,7208968,7536648,7602177,8060930,8126466,8323074,8454145,8716296,8978440,9437186,11141121,12845057,13107201,14090241,14942209,15925249,16777217,17563649,17760257,18350081,18612225,18743297,19660801,20643841,21364737,22413313,23265281,30932994,31457283,32047112,34209800,58195976,58327048,58392584,58785800,59179009,60096520,60817416,60882952,61145089,61407240,61538312,61603848],"individual":[3014657,4521985,47316993,53411841,53477377,55705601,59113473,60227585],"iasyncenumerable":[18153477],"iequalitycomparer":[5898245,6160389,16973829,17629189,31719426,41091074,48431110,56426498,57999362],"idynamic":[8519681,9109505,9633793,10027009],"iterator":[61210625,61341698],"insensitive":[6946817,61145089],"interrupt":[3735553,4587521,6291457,6356993,6553601,7208963,7536641,8716290,8978433,17956869,20971526,26869763,28770312,38404097,42074113,44367879,52035587,56098819,58064897,58195969,58261505,58327041,58392577,59441155,60096513,60817412,60882946,61407233,61538305,61603841],"invokemethod":[2621441,2686977,2818049,3145729,3211265,3670017,4128769,4521985,5177345,16646148,23592965,58916865,59375617,59834369,60162049,60227585,60293121,60424193,60751873,61014017],"invocable":[8126465,8454145,9437185,12713985,13041665,13500417,13697025,14286849,14483457,15007745,15138817,15269889,19136513,19922945,20709377,21037057,21430273,21889025,23199745,24248321,25100289,52822017,53280769],"invocation":[14221313,15400962,15990786,16646146,21757953,22282242,23003138,23592962,52494337],"instance":[393217,458753,655361,786433,851970,1114113,1245185,1376257,1441793,1507334,1572865,1638401,1703940,1769473,1835009,1900545,1966081,2031617,2097153,2293762,2359297,2490373,2555909,2162689,2228225,2883589,2949129,3014658,3276801,3342341,3407885,3473409,3538949,3604481,3801092,3866625,3932161,3997697,4063233,4194305,4259841,4325377,4390913,4456449,4521986,4587521,4653057,4849669,4980743,5046285,5111809,5308417,5439489,5570561,5636097,5701633,6029313,6291457,6356993,6488065,6553601,6619137,6881281,7077889,7143425,7208961,7274497,7340033,7471106,7536641,7667713,7798785,7929859,8060929,7995394,8126465,8192001,8257537,8323074,8585219,8650754,8716289,8781825,8912897,8978433,9043969,9240578,9306113,9437185,9568257,9699330,9830401,9895938,10289154,10354689,10420226,10485762,10616833,10682370,10878977,10944513,11075586,11141122,11206658,11337730,11403265,11665410,12058626,12189698,12255233,12582914,12910593,12976129,13565953,16252931,17104899,17825795,18153474,18546691,19005442,19267585,19333123,19726339,20054020,20512771,20578305,20840449,20905985,21168129,21299203,21561345,21954561,22151170,22347777,22740994,22872065,23330817,23855105,24313857,24510465,25034753,25231362,25427969,25690113,25886721,25952259,26214401,26673155,26738690,26804227,27328513,27459587,27590659,27656195,27852802,28114946,28180484,28508162,28639235,28835842,28901380,29097987,29163522,29360130,29425667,29622276,29687810,29818882,29884419,30015490,30408706,31129603,31326211,31522818,31850499,32243713,32309250,32505858,32571393,32702465,32833537,33161219,33554434,33685507,33816588,34144258,34275330,34471938,34734083,34799617,35127298,35454978,35651592,36044802,36306947,36503553,37224451,37486594,37552130,38207491,38338572,38469634,38404097,38862856,39059457,39124997,39190530,39321604,39387137,39976963,40173573,40370182,40566786,40632321,41287685,41418754,41811973,42074114,42205185,43712513,43778049,43909121,44957697,45088769,45613059,45744130,46202881,46268417,47513601,47775745,47841281,48365569,48955393,49741825,50921473,51576836,52035585,53084162,53280773,53477382,53673985,53870594,54067201,54657025,54722566,54984705,55115777,55246849,55312390,55705603,55836674,55902212,56098817,56229889,56426497,56492035,56754177,57212929,57671681,57933825,57999361,58130434,58195972,58261525,58327041,58392584,58458113,58523650,58589186,58654724,58720259,58785806,58851330,58982402,59047938,59113479,59179009,59244545,59310082,59506701,59703297,59768848,59899905,60096520,60227586,60358663,60489730,60555267,60817425,60882947,61079561,61145090,61407241,61472771,61538313,61603844,61669378],"identify":[9961473,10158081,10747905],"imported":[7077890,7602177,8060929,8126466,8323073,8454146,9437186,42795009,48889857],"items":[2752513,57540609,59965441],"inherit":[5242886,51576833,53477377,54067201,54722561,55312385,55705601,55902209,57212929,57933825,57999361,58392577,58523649,58654721,58785793,58851329,58982401,59113473,59506689,60096513,60227585,60358657,60489729,60817409,60882945,61407233,61538305,61603841],"inference":[13828097,19398657,47906817,54001665],"iteration":[2949122,18153474,19005442,61079554],"invoke":[2621441,2686977,2818049,3014658,3145729,3211265,3670017,3735553,4128769,4521987,4587521,4784130,5177345,5242881,6291457,6356993,6553601,6881282,7208961,7536641,8716289,8978433,12255233,12910594,13828097,14221318,15400966,15728642,15794178,15990785,16580610,16646146,19202050,19398657,21757960,22282247,23003137,23592962,30474249,31260681,33226759,33947655,37421057,37945345,38600707,39649283,45154305,51314689,55705602,57016322,58195969,58327041,58392577,58720258,58916865,59375617,59834369,60096513,60162049,60227587,60293121,60424193,60751873,60817409,60882945,61014017,61407233,61538305,61603841],"index":[2752513,3014660,4521988,13828097,14811142,15663110,16056327,16711681,17170438,17301511,17432577,17498113,18219009,19398657,23527430,24182790,25296902,39059457,40632321,41680903,42074113,42205185,43450370,43909121,44957697,45088769,46268417,47775745,49414146,55705604,55771143,57540609,58195969,58327041,58392577,60096513,60227588,60817409,60882945,61407233,61538305,61603841],"indicates":[1703937,2490371,2555907,2883587,3342339,3538947,3801089,4849667,39845889,41615361,44892161,45481985,45744130,46202882,48365570,48627713,49020929,50593794,51576833,53477379,54722563,54919169,55312387,55902209,57081857,58458114,58654722,58982402,59113475,59506691,60358659,60686341,61210628,61341704],"identifier":[3735568,4587536,6291472,6357008,6553616,6815751,7208976,7405575,7536656,7864327,8323074,8650754,8716304,8847367,8978448,11927555,12320771,12648450,12845059,13107202,13369346,14024707,14090242,14155778,14876674,14942211,15597571,15925251,16777218,16842755,17235970,17563650,17760258,18087938,18350083,18612227,18743298,19070979,19660803,19988483,20643843,20774914,21364738,21495810,22413314,22478851,23265283,31064072,32047112,33423368,34209800,34734083,35127299,36044802,37617666,38207491,38928385,39124993,39190531,40173569,41287681,41811969,42008577,42598401,45613058,46137345,46923777,47972353,53477377,54722561,55115778,55312385,57475073,57737217,58195984,58327056,58392593,59113473,59506689,60096529,60358657,60817424,60882960,61407249,61538321,61603856],"interrupted":[3080193,20840449,21692417,22020097,22675457,23658497,24379393,34799617,38010881,46202881,47513601,48103425,48627713,49020929,49545217,50135041,52035586,56098818,58982402],"instantiating":[54853633,55443457],"iscriptable":[2424833,13434881,57802753],"initvalue":[12255239],"iasyncenumerator":[18153474],"infrastructure":[3014657,4521985,43646977,45744129,46202881,46727169,47906817,48365569,50135041,54001665,55705601,58458113,58654721,58982401,60227585],"inspector":[23134210,23724033],"intended":[3014660,4521988,13631489,23789569,47382529,47710209,48234497,52559873,55705604,60227588],"idispatchex":[61669377],"isdefaultattribute":[2490369,2555905,2883585,3342337,3538945,4849665,53477377,54722561,55312385,59113473,59506689,60358657],"initializing":[39321602,39976961,59179009,61145089,61669377],"includes":[9830401,13631491,13828097,19398657,23789571,47710209,48234497,52559873],"invokeasfunction":[2621441,2686977,2818049,3145729,3211265,3670017,4128769,4521985,5177345,15990788,23003142,58916865,59375617,59834369,60162049,60227585,60293121,60424193,60751873,61014017],"istypeobj":[3407874,5046274,9764870,10223622,33751042,58785794,59768834],"iscript":[3735553,4128769,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13172737,13238273,13303809,13369345,13500417,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15859713,15925249,15990785,16187393,16646145,16777217,16908289,17170433,17367041,17563649,17891329,17956865,18350081,31064065,32047105,32440321,33292289,33619969,34078721,34668545,35061761,35586049,35913729,36241409,36700161,36962305,39845889,40042497,40501249,40828929,40960001,41025537,41353217,41615361,41680897,42139649,42336257,42401793,42729473,42991617,43057153,43515905,43581441,43646977,44105729,44433409,45154305,45678593,46530561,47316993,47710209,47775745,47841281,47906817,48168961,48300033,48365569,48496641,48693249,48824321,48889857,48955393,49414145,49610753,49938433,50528257,51052545,51642369,58327041,58458113,58916865],"ijava":[3145729,39518209,45940737,46399489,60293121],"implemented":[38928385,42008577,42598401,46137345,46923777,47972353,53477377,54722561,55312385,59113473,59506689,60358657,60751873],"introduce":[61145089],"initializes":[4915201,5308417,5373953,5570561,5636097,5701633,5767169,5832705,5898241,6160385,6619137,7340033,7667713,8192001,8781825,11272193,11403265,11796481,11993089,12386305,12779521,12976129,16318465,16384001,16973825,17629185,19267585,19857409,20185089,20381697,20578305,20840449,20905985,21168129,21561345,21692417,21954561,22020097,22151169,22347777,22675457,22740993,22872065,23330817,23855105,24313857,24510465,25034753,25231361,25427969,25690113,25886721,26214401,26673153,26738689,27328513,27459585,27590657,27852801,28114945,28508161,28639233,28835841,29097985,29163521,29360129,29425665,29687809,29818881,29884417,30015489,30408705,31129601,31522817,31719428,31850497,32243713,32309249,32571396,32702465,32833537,33161217,33554433,33685505,33816588,34144257,34275329,34471938,34734081,34799620,35127297,35454977,35651592,36044801,36306945,36503553,37224449,37486593,37552130,37683205,38207489,38338572,38469633,39124997,39190529,40173573,41091076,41287685,41418754,41811973,41877506,45613057,51576834,53084161,53477377,53870593,54067205,54722561,55312385,55705601,56426500,57999364,58130433,58195970,58261516,58392581,58523649,58589185,58654724,58785793,58982404,59113474,59310081,59506696,59768833,60096517,60358658,60489729,60817420,60882945,61407237,61538309,61603841],"interprets":[13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16187393,16908289,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537,61472769],"innerexception":[16384005,22675461,41025540,45744129,48365569,58458113,58654721],"ireadonlylist":[49217542,54394886,56688646],"isfatal":[41615364,45481990,45744129,46202881,48365569,49020934,58458113,58654721,58982401],"istype":[3407873,5046273,8912901,58785793,59768833],"indexing":[3014657,4521985,9961473,10158081,10747905,55705601,60227585],"inadvertent":[52690945,53149697,53542913,54263809],"involvement":[59965441],"implements":[589825,3407881,5046281,8257537,8519681,8912897,9371649,9633793,9961473,10027009,10158081,10551297,10747905,11534337,11730945,13828097,16121857,16842753,17039361,17235969,17694721,17760257,18087937,18153473,18415617,18612225,18743297,18939905,19005441,19070977,19136513,19398658,19464193,19529729,19595265,19660801,19922945,19988481,20119553,20250625,20316161,20447233,20643841,20709377,20774913,20971521,21037057,21102593,21233665,21364737,21430273,21495809,21626881,21757953,21823489,21889025,22085633,22216705,22282241,22413313,22478849,22609921,22806529,23003137,23068673,23199745,23265281,23396353,23527425,23592961,23789569,23920641,23986177,24117249,24182785,24248321,24576001,24641537,24707073,24903681,25100289,25296897,27197441,27918337,28246017,28770305,30212097,30474241,30539777,30867457,31260673,31588353,31916033,32112641,32964609,33357826,35323906,35520513,35782658,42467329,42663937,42795009,43253761,43450369,43712513,43778049,44171265,44236801,44367873,44630017,44892161,45219841,45481985,45875201,46006273,46333953,46465025,46727169,47054849,47185921,47513601,47579137,48103425,48234497,48627713,48758785,49020929,49152001,49283073,49348609,49545217,49676289,49741825,50135041,50659329,50790401,51183617,51314689,51838977,51904513,52297729,52953089,53411841,53805057,54001665,54329345,54525953,55050241,55771137,55967745,56295425,56360961,56426497,56623105,56819713,56885249,57409537,57540609,58195969,58261505,58392577,58654721,58720257,58785801,58982401,59703297,59768842,60227585,60817409,61341700,61407233],"interoperability":[61145089],"integer":[7602177,8388609,9043969,9306113,9502721,9568257,10354689,14811137,15663105,17170433,23527425,24182785,25231361,25296897,26214401,27590657,27656193,28835841,29163521,29425665,29622273,29884417,30015489,40501249,41680897,42991617,52690945,53149697,53542913,54263809,55181313,55771137,56885249],"integers":[7143425,8060929,9502721,9830401,10354689,61145090],"idataview":[2686978,38535169,38797314,60162053,61341697],"ievent":[589826,720897,917505],"initial":[12255233,39583745,43384833,45023233],"indicating":[46858241,57540609],"interface":[2424833,2621441,2686977,2752513,2818049,3145729,3211265,3670017,3735553,4128769,4718593,4784129,5177345,10944513,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13172737,13238273,13303810,13369345,13434881,13500417,13697025,13631489,13762561,13893633,13828097,13959170,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16187393,16449537,16580609,16646145,16711681,16777217,16908289,17170433,17301505,17367041,17432577,17498113,17563649,17891329,17956865,18022401,18219009,18350081,18481153,19202049,22609921,23396353,30277633,30605313,31064065,31195137,32047105,32440321,32636929,33226753,33292289,33619969,33947649,34078721,34668545,35061761,35586049,35913729,36241409,36700161,36962305,37027841,37421057,37814273,37945345,38010881,38535169,38600705,38797313,39059457,39518209,39845889,39976962,40042497,40239105,40501249,40566785,40632321,40828929,40960001,41025537,41156609,41353217,41615361,41680897,42139649,42205185,42336257,42401793,42729473,42991617,43057153,43515905,43581441,43646977,43909121,44040193,44105729,44433409,44564481,44826625,44957697,45154305,45350913,45678593,45940737,46268417,46399489,46530561,46596097,46858241,46989313,47120385,47316993,47710209,47775745,47841281,47906817,48168962,48300033,48365569,48496641,48693249,48758785,48824321,48889857,48955393,49348609,49414145,49610753,49938433,50397185,50528257,51052545,51642369,53477380,54722564,56426503,56819713,57016325,57344001,57540619,57802757,58195970,58261505,58327046,58392579,58458117,58654721,58720257,58916870,58982401,59113476,59375624,59703297,59768833,59834376,60096513,60162057,60227586,60293127,60358660,60424201,60751883,60817410,60882945,60948486,61014023,61407235,61538305,61603841]} \ No newline at end of file +{"importers":[76611585],"implements":[1114113,3538953,4521993,8912897,9699329,9961473,10027009,10289153,10485761,10813441,11141121,11272193,11993089,12779521,13041665,16711681,17498113,18087937,18284545,18546689,18808833,18939905,19529729,19726337,19791873,19922945,19988481,20119553,20316161,20381697,20578305,20774913,21037057,21102593,21495809,21561345,21626881,21692417,21954561,22216705,22413313,22478849,22544385,22609921,22675457,22872065,22937601,23003137,23199746,23527425,23592961,23658497,23789569,23855105,23920641,24117249,24182785,24313857,24379393,24444929,24510465,24641537,24707073,24903681,25100289,25362433,25427969,25296897,25690113,25821185,25886721,26017793,26476545,26542081,26607617,26738689,26804225,27066369,27983873,28049409,28114945,28639233,29360129,33226753,35454977,36634625,37879809,38010881,40501249,40632321,42139649,43319297,43843585,44171265,44564481,45613057,46333953,46465025,47579138,48300034,48955393,49283073,50135041,51380225,51511297,52428801,54329346,58458113,58916865,59179009,59965441,60162049,60489729,60555265,60620801,60686337,60817409,60948481,61669377,62324737,62390273,62521345,62717953,62849025,63242241,63569921,63963137,64159745,64815105,65601537,65732609,65994753,66125825,66322433,66453505,66650113,66912257,67239937,67371009,67502081,67567617,68091905,68288513,68878337,69140481,69206017,69664769,69795841,69861380,69926913,70254593,70713345,71106561,71172097,71237633,72089601,72286209,72351745,72417281,72548353,73334785,73662465,73793537,74252289,74514433,74907649,75366401,75628545,75956233,76087297,76414977,76742657,77266945,77463553,77856769,77922305,77987850,78381057,78577665,78970881,79626241,80084993,80281601,80478209,80805889,81264641],"iscriptable":[2424833,13303809,76808193],"iv8fasthostmethod":[51707906,56557570,61865985,72417284,74317829,74514437],"int32array":[78184449],"iv8fastasyncenumerator":[4063234,5767170,24772613,26148865,28377089,36503559,47775746,51707905,75431938,80936965],"iproperty":[3211265,10289153,11141121,12779521,58589185,76414977],"inherit":[6356998,70909953,71368705,72417281,72548353,73531393,73990145,74121217,74514433,74842113,75038721,75104257,75169793,75759617,75956225,76087297,76349441,76546049,77529089,78577665,78839809,78970881,79167489,79364097,79626241,79953921,80084993,80216065,80281601,80478209,80543745,80674817,80740353,81002497,81068033,81264641],"idisposable":[2097153,2752513,2818049,3276801,3473409,3735553,3997697,4259841,4390913,5570561,8912898,24510465,25296897,46465025,51511297,70320133,71172100,73138181,74645509,75366404,75497477,76087300,76283909,77135877,77856772,78184453,78512133,79495173,80084996,80281604,81199109,81264644],"invalid":[79757314],"internal":[60817410,66387970,67895297,76087297],"interrupt":[3735553,5373953,8716290,9306113,9502721,9830401,11010051,11206657,11403265,17104901,25886726,37879816,38404099,50135047,59834369,60293121,72679425,73924611,74448899,75104257,75366401,76087300,77791235,77856769,78512129,79953921,80281601,81002497,81068034,81264641],"invocable":[8454145,8978433,10354689,14286849,14352385,14417921,15335425,15466497,15794177,15925249,17760257,20381697,20512769,21692417,22544385,24117249,24903681,26017793,26476545,27066369,27983873,75235329,75563009],"ignorecase":[8519686],"inadvertent":[64094209,66584577,67829761,69402625],"iv8fasthostobject":[4456456,4784136,4980744,24248325,24772613,25493509,25559045,26214405,26345477,26673157,27590661,27721733,28180485,29753349,31653893,32243717,46661634,48824322,49348610,51707907,57606146,58064898,63832065,72024068,72417284,73269256,74317828,74514440,74973192,75300869,75431940,75694088,75890691,76742660,77266949,78053379,78577665,78643203,79036419,79626244,80609283],"interfere":[80412673],"isfatal":[59179014,60358657,62455809,62980097,65404932,72089606,72548353,78905345,78970881],"invocations":[13303809],"idisposablet":[8912898],"instantiate":[9175041,13172737,13238273,13500417,14745601,15400961,15859713,17301505,17825793,18087937,18284545,18546689,20119553,20774913,21495809,22937601,24182785],"isset":[53280769,70385668,79364097],"invoke":[2097153,2752513,2818049,3276801,3342338,3473409,3735553,3997697,4390913,4456449,4980737,5373953,5570561,5963779,5898242,6356993,6553602,8716289,9306113,9502721,9830401,11010049,11206657,11403265,13959169,14680065,14876674,15990786,16056326,16121862,16252930,16318466,16711681,16973826,18874370,19070978,19136514,20905986,22020098,23199745,23789575,25362433,27000838,28049416,28114946,29163525,34406401,40632329,42139657,42860551,44630023,45285377,46202881,48758787,49938433,53477379,57278465,63963137,73138177,73269249,74645505,74973185,75104257,75497473,76087297,76283905,77135873,77266945,77856769,78184449,78512129,78577665,79101954,79495169,79822849,79953921,80084995,80281601,80543746,80609281,80805890,81002497,81068033,81199105,81264641],"indicates":[1638401,1769475,2031619,2949123,3145731,4653059,4718593,4915201,5046275,7340033,9895937,58327041,59179009,60358658,62455810,62980098,64487425,65404929,69861384,70451201,71106561,72089601,72548354,73793537,73990147,74842115,75038723,75759619,76349441,77529089,77660166,78118914,78839809,78905346,78970882,79167491,79233030,79364097,79757317,80216067,80740353],"instances":[18219009,26542081,36044801,36175873,36241409,36372481,37093377,37552129,37748737,37945345,38076417,38207489,39256066,39518209,40108033,40173569,40239105,40435713,40828930,40894465,41025537,41287681,42074113,42205185,42401793,42598401,43057153,43581441,43778050,44040193,44433409,45023233,45481986,45547521,45744129,46858241,47513601,48037889,48365569,49741825,49807361,50659329,51970049,52625409,54984705,68091905,70057985,73662465,74252289,75038722,76087298,77463553,77922305],"ienumerable":[3211265,19922951,28180485,32243717,60030982,60489734,62521350,63111174,65339398,66322439,67371015,73728006,75628552,76414985],"invocation":[14680066,16056321,16121858,16252930,23789570,25362434,28049409,28114946,31457281,31981569,32505857,32899073,33554433,33619969,34013185,34471937,34668545,34734081,34799617,35061761,35127297,35323905,35782657,36110337,36438017,36765697,36962305,37158913,37355521,38141953,38469633,38600705,38928385,39780353,39845889,40370177,43450369,44957697,68419585],"icustomattributeprovider":[6356998],"itypedarray":[3276802,4390914,16777217,16908289,18743297,19595265,22282241,48103426,50266113,51249153,62783490,64356355,65929217,69861377,77135877,78184470],"icomparable":[9961474],"indicating":[58589185,76414977],"invokeasfunction":[2097153,2752513,2818049,3276801,3473409,3997697,4390913,5570561,5963777,14680068,25362438,73138177,74645505,75497473,76283905,77135873,78184449,79495169,80084993,81199105],"iwindows":[5570561,42663937,54525953,81199105],"initial":[13959169,54198273,57344001,69468161],"interprets":[14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,18022401,18219009,19464193,19857409,21037057,21364737,21561345,21626881,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129,81330177],"iasyncenumerable":[18808837],"inherits":[70320129,70909953,71368705,72024065,72417281,72548353,73138177,73269249,73531393,73990145,74121217,74317825,74514433,74645505,74842113,74973185,75038721,75104257,75169793,75497473,75759617,75956225,76087297,76283905,76414977,76546049,77135873,78184449,78512129,78577665,78970881,79167489,79495169,79626241,79953921,80084993,80216065,80281601,80478209,80543745,80674817,80936961,81002497,81068033,81199105,81264641],"iscacheable":[25559045],"info":[1638401,6094849,6225921,7667713,14942209,17563654,18022401,19726342,21561345,23330821,23724038,24313857,24707078,37486593,39518209,40173569,41418753,43515905,44105729,46858241,48365569,50724865,50987009,54001666,54460417,55246849,58261505,59441153,61538305,61734913,62914565,63766529,64880641,66191361,66977793,67174401,68747265,69337093,69599233,69730305,70844417,72482822,73203713,73859073,75825153,76480513,77398017,77725701,78839809,79298565,80674818],"indices":[4456449,4784129,4980737,10027014,10485766,13041670,16711681,23199745,28180483,53608449,54525953,55574529,56885249,59244545,60489730,60751873,61210625,62783489,63111170,63897601,64356353,66322434,67633153,71303169,73138177,73269249,73728002,74645505,74973185,75497473,75694081,76283905,77135873,78184449,78577665,79495169,80084993,81199105],"impossible":[76939265],"invalidoperationexception":[78970885],"individual":[3342337,5963777,62259201,72286209,73990145,75759617,80084993,80543745],"invokewithdirectaccess":[2818052,3276804,3473412,3997700,4390916,14876677,16318469,16973829,18874373,19070981,19136517,20905989,22020101,46202884,49938436,73138180,74645508,75497476,77135876,78184452],"int16":[3538945,4521985,4915202,7340035,9895939,12845062,27656196,31326212,33292292,33357828,34209796,51052546,51445762,54067202,75956225,76349443,77529091,77987841,79364098],"iarray":[2818049,3473409,14090241,14876673,16318465,16449537,16646145,16842753,16973825,17432577,18153473,18677761,18874369,19070977,19136513,20185089,20905985,21168129,22020097,23986177,44826625,46202881,47906817,49020929,49938433,53215233,53608449,56885249,58195969,59506689,61145089,66846721,73138177,74645505],"interactive":[56229889,66453505,67698689],"iv8fasthostfunctionoperations":[4456450,27000833,51707906,61472774,73269253,80478213],"iscriptableobject":[2424834,13303809,45547521,75628548,76808197,77987844],"initvalue":[13959175],"iserializable":[19726337,24707073],"inattribute":[14876673,18874369,19136513,20905985,23068673,23265281,23461889,24969217,25034753,25559041,26148865,26214401,26345473,27000834,29163522,30539777,31522817,31653889,32636929,33685505,78053377,78643201,79822850,80609282],"int16array":[78184449],"impact":[76939265],"interval":[59834370,60293122,68354050,71565314,72810498,74055682,75366402,76087298],"import":[7733250,7995393,8454145,8585217,8847362,8978434,9109505,10354690,10747905,10551297,11075585,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13434882,13631489,13697026,13828098,13893633,13959169,14221313,14811137,15073281,15204353,15597569,15990785,17235970,19202049,19988481,20316162,20578306,22216705,22478850,23527425,23592962,25100289,45547521,57737218,58130434,60162050,60293122,61407234,61734913,61931521,62193666,63045634,64552962,64684034,64815106,65273858,67305474,69533698,75104258,75956225,76087298,77856770,78512130,79953922,80281602,81002498,81068034,81264642],"includes":[8585217,16711681,18219011,23199745,26542083,56229889,66453505,67698689],"imports":[3735560,4521992,5373960,7733249,7929857,7995394,8454145,8716296,8847362,8978434,9109506,9306120,9502728,9830408,10354690,10878977,11010056,11206664,11403272,13434881,13697025,13828097,14811137,15073281,15597569,17235969,19202049,19988481,20316161,20578305,22216705,22478849,23527425,23592961,25100289,46596098,47710216,48562179,51183624,75104264,75956232,76087304,76939265,77004801,77856776,78512136,79953928,80281608,81002504,81068040,81264648],"isyncinvoker":[786437,5898242,39714821,40632321,41156609,41943045,42139649,42270725,42860545,43319297,44630017,45219845,46333953,47251461,47644673,48758785,48889861,50331653,51576837,52297733,52559877,53149701,53673986,54919173,55443461,57737217,62193665,63045633,64684033,65273857,69533697,71630855,75104257,79101957,79953921,80281607,80805893,81002503,81068034,81264641],"idataview":[3997698,48103425,59244546,69861377,75497477],"immutablevalueattribute":[2031618,14614533,45547521,56492034,75038728],"ipropertybag":[3211266,3538950,4521990,10289158,11141126,12582913,12779526,45547523,47579138,48300034,54329346,58589186,71368705,75628549,75956230,76414981,77987846],"interface":[2097153,2818049,2752513,2424833,3211265,3276801,3473409,3735553,3801089,3997697,4063233,4259841,4390913,4456449,4784129,4980737,5570561,5898241,9240577,12582913,13172737,13238273,13303809,13434881,13500417,13697025,13828097,14024705,14090241,14155777,14286849,14352385,14417921,14483457,14548993,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17104897,17235969,17301505,17432577,17629185,17760257,17825793,17891330,18022401,18153473,18219009,18350081,18677761,18743297,18874369,19070977,19136513,19202049,19333121,19464193,19595265,19857409,20185089,20250626,20447233,20512769,20643841,20905985,21102593,21168129,21364737,22020097,22282241,22609921,23068673,23265281,23461889,23986177,24248321,24772609,24838145,24969217,25034753,25493505,25559041,26148865,26214401,26345473,26411009,26673153,27000833,27131905,27459585,27590657,27721729,28180481,28377089,29163521,29687809,29753345,31653889,32243713,41156609,41746433,42663937,42860545,43909121,44630017,44695553,44826625,45350913,45547521,45940737,46202881,46268417,46661633,47382529,47644673,47710209,47906817,48103425,48627713,48693249,48758785,48824321,49020929,49152001,49348609,49676289,49938433,50266113,50855937,51249153,51707905,52035585,52232194,53018625,53215233,53411841,53608449,53673985,54525953,55050241,55115777,55574529,55902210,56033281,56229889,56360961,56557570,56688641,56885249,56950785,57147394,57278465,57606146,57737217,57868289,57999361,58064897,58195969,58327041,58523649,58589185,58785793,58982401,59244545,59506689,59572225,59637761,59703297,59899905,60030977,60751873,60882945,61079553,61145089,61407233,61472770,61865986,62062593,62128129,62193665,62259201,62455809,62783489,63045633,63111169,63176705,63307777,63832066,63897601,64290817,64356353,64421889,64552961,64684033,65208321,65273857,65339393,65404929,65667073,65929217,66387969,66519041,66846721,67043329,67108865,67305473,67502081,67764225,68222977,68485121,68812801,69009409,69206017,69533697,70320134,70582273,70647809,71172097,71303173,72024071,72417282,72548353,73138184,73269254,73465857,73728001,73990148,74317831,74514434,74645512,74842116,74973190,75104257,75300870,75366401,75431937,75497481,75628551,75694085,75759620,76087298,76283911,76414987,76742657,76808197,77135881,77266945,77856770,77987841,78184459,78381057,78512134,78577665,78905349,78970881,79101957,79495174,79626242,79953921,80084994,80216068,80281603,80478210,80805889,80936966,81002497,81068033,81133574,81199111,81264643],"intended":[3342340,5963780,18219009,26542081,31981569,39780353,56229889,66453505,67698689,67895297,80084996,80543748],"iscriptobject":[2097154,2752521,2818057,3276809,3473417,3997705,4390921,5570569,14680065,15007745,16121857,16252929,17629185,18350081,19333121,20447233,20643841,21954561,22413313,22675457,23789569,23920641,25362433,25690113,25821185,28114945,45547521,45940737,46268417,47382529,48627713,53608453,54525957,56885253,58785793,59244549,59572225,60489729,60751877,61079553,62521345,62783493,63111169,63897602,64356357,65339393,66125825,66912257,69926913,73138194,74645522,75497490,76283922,77135890,78184466,79495173,80084996,81199122],"ihostwindow":[9240578,41746433,52232193,69009415,70582274,73465857,81133573],"iv8fasthostobjectoperations":[4456461,4784130,4980749,24248321,24772609,25493505,25559041,26214401,26345473,26673153,27590657,27721729,28180481,29753345,31653889,32243713,46661633,48824321,49348609,51707906,58064897,63832070,72417284,73269265,74973201,75694085,76742661,80478212],"importable":[56033281,62717953],"inner":[63176705],"ijavascriptobject":[2752514,48103425,53608450,56885250,59244546,60751874,62783490,63307777,64356354,65208321,73138182,74645510,75497478,76283909,77135878,78184454],"ignores":[11665409],"ignored":[11665409,36241409,36372481,37945345,38273025,39387137,39518209,40239105,43515905,43581441,44433409,49741825,52625409,76939271,77004801,80412674],"index":[3211265,3342340,3801089,5242881,5963780,9895978,16449537,16646145,16711681,16777223,16842753,16908295,17629190,18153473,18350086,18677761,18743303,20185089,20643846,21168129,21954566,22282247,23199745,23265286,23461894,23920646,23986177,25624584,25690118,26279944,26345478,26411015,26673158,26869768,27131910,27328520,27525128,27656200,27721734,27787271,27852808,27918344,28246024,28442632,28508168,28835848,28901384,29229064,29425672,29491208,29622280,29818888,29949960,30015496,30081032,30474247,30539782,30670856,30867464,30998536,31064072,31260680,31326216,31391752,31522822,31588360,31653894,31719432,31850503,32047112,32571400,32768007,32833544,33226760,33488904,33947656,34340872,34537480,35454983,35586056,51052563,51707905,53411841,56360962,57737217,58130433,58851329,59572231,60293121,61407233,62193665,62849026,63045633,64684033,65273857,66912263,69533697,71303170,75104257,76087297,76414977,77529130,77856769,78512129,78577665,79953921,80084996,80281601,80543748,81002497,81068033,81264641],"isync":[5898241,39714817,41156609,41943041,42270721,42860545,44630017,45219841,47251457,47644673,48758785,48889857,50331649,52297729,52559873,54919169,79101953],"isundefined":[9895937,33488900,59113473,63438852,76349441,77529089],"iwindowsscriptobject":[5570562,42663937,52232193,54525954,81199109],"introduced":[56360961,62849025],"iasyncenumerator":[5767170,18808834,37814279,47775746,75431938],"instance":[1,131073,524289,262146,786438,851969,917505,1048577,1179649,1441793,1638404,1703937,1769477,1835009,1900545,1966081,2031621,2162689,2228225,2293761,2359297,2490370,2555905,2621441,2686977,2883585,2949125,3014657,3080193,3145733,3342338,3407873,3538957,3604481,3670025,3866626,3932161,4128769,4194305,4325378,4521997,4653061,4587521,4718596,4849665,4915204,5046277,5111810,5177345,5242881,5308417,5373953,5439489,5505025,5636097,5701634,5832705,5963778,5767175,6094849,6160385,6488065,6553601,6750209,6881281,6946818,7012353,7077895,7274497,7340036,7405569,7864321,7929857,7995393,8060930,8126465,8192003,8323074,8585217,8781826,8716289,8847362,8912897,8978433,9043969,9109505,9175042,9306113,9371649,9502721,9830401,9895940,9961473,10092547,10158081,10223617,10354689,10420226,10551298,10682369,10747905,10878978,10944513,11010049,11075585,11206657,11403265,11730946,11862017,11927554,12124162,12320769,12386306,12517378,12582913,12648449,12845058,12910594,13631490,13893634,13959169,14221314,14614529,15204354,15990785,17039363,17170435,17367041,17956867,18415619,18612225,18808834,19005441,19398659,19922946,20054020,21233667,21823489,22085634,22151169,22740994,22806529,23134209,23330817,23396353,24051713,24248325,24772613,25165825,25231363,25493509,25559045,25952257,26214405,26345477,26673157,26935299,27197441,27394049,27590661,27721733,28180485,28311553,28966913,29753349,31457282,31653893,32243717,32505858,32899073,33161217,33423362,33554433,33619971,34013185,34144257,34471939,34734082,34799618,34996225,35061762,35127298,35192834,35258371,35782658,35913730,36110337,36438017,36503554,36765697,36896771,36962305,37027842,37093379,37355521,37617666,37814274,38141954,38469634,38535170,38600707,38731778,38993921,39256067,39321602,39649283,39714819,39845890,39976962,40304642,40370178,40763394,40828931,40960002,41091073,41680899,41811969,41877506,41943043,42205188,42270723,42336258,42532867,42991619,43253761,43384834,43450371,43778052,44236801,44498947,44761091,44892161,44957698,45219843,45481988,45809665,46006273,46530562,47054850,47185921,47251458,47316994,47448066,47775746,47972364,48234498,48889858,48955393,49086467,49414145,49545220,49610755,50069512,50200578,50331651,50528258,50593794,50921474,51576837,52101122,52166658,52232195,52297731,52363266,52494344,52559874,52953090,53149699,53673986,53739524,54132738,54263816,54591491,54788097,54919170,55312392,55443461,55836684,56754180,57737217,57933826,58130433,58720262,59047941,59637761,59834369,60293122,60358658,60424197,61407233,61800449,62193665,62455809,62980098,63045633,64684033,65273857,65798145,67239937,68222977,68943873,69533697,69795841,70516737,70909953,71172097,71368705,71761921,72351745,72417286,72548356,72613889,73596929,73531393,73924609,73990150,74121217,74448897,74514438,74711042,74842118,75038726,75104265,75169794,75366421,75431944,75563013,75628545,75759623,75956238,76087313,76152834,76349444,76480514,76546050,76677122,76742660,76939266,77004801,77266947,77332481,77398017,77529092,77594625,77856772,77987856,78053381,78249986,78512129,78577667,78643205,78708739,78774281,78839812,78905345,78970884,79036421,79167501,79364100,79626250,79691778,79888386,79953924,80019457,80084994,80216071,80281608,80347137,80412674,80478218,80543747,80609285,80674818,80740356,80805891,80871427,81002504,81068035,81264649,81330179],"including":[18219009,26542081],"interrupted":[1245185,3407873,21823489,23724033,24707073,25755649,26083329,27262977,45547521,54788097,59179009,59965441,60948481,62980097,72351745,72548354,73334785,73793537,73924610,74448898],"invokes":[2097155,2752515,2818055,3276807,3473415,3538948,3735553,3997703,4390919,4456449,4521987,4980737,5373953,5570563,5963779,5898242,6553602,8388610,8585218,8716289,9306113,9502721,9830401,10944514,11010049,11075586,11206657,11403265,14680065,14876674,15990785,16056321,16121857,16252929,16318466,16973826,18874370,19070978,19136514,20905986,21430274,22020098,23789569,25362433,27000833,28049409,28114945,29163521,40632322,41353218,42139650,42860545,44630017,46202884,46989314,48758786,49938436,51707906,52887554,53477378,57868289,58982401,65601537,69140481,73138183,73269249,74645511,74973185,75104257,75497479,75956227,76087297,76283907,77135879,77856769,77987844,78184455,78512129,78708737,79101954,79495171,79822849,79953921,80084995,80281601,80609281,80805890,81002497,81068033,81199107,81264641],"invoker":[262145,786433,5898241,6553601,31457286,32505862,32899078,33554438,33619974,34013190,34471942,34668550,34734086,34799622,35061766,35127302,35323910,35782662,36110342,36438022,36765702,36962310,37158918,37355526,38141958,38469638,38600710,38928390,39714817,39845894,40370182,40632321,41156609,41943042,42139649,42270722,42860545,43319297,43450374,44630017,44957702,45219842,46333953,47251457,47644673,48758785,48889857,50331649,51576834,52297730,52559873,53149697,53477377,54919169,55443458,71630849,79101953,79822849,80281602,80609281,80805889,81002498,81068033],"invoked":[3538950,4521990,6619137,6684673,6815745,6946818,8650753,9568257,10878977,11468801,11665409,11862017,15990785,16056321,19005441,21757953,28049409,31981570,39780354,43646978,46923778,49479682,61734913,61931521,75956230,76087297,77987846,79626242],"int8array":[78184449],"imported":[7733249,7929858,8454146,8847361,8978434,9109505,10354690,61669377,67764225],"inference":[16711681,23199745,58916865,64290817],"iarraybufferview":[2818050,3276809,3997705,4390921,14090241,14876673,16318465,16449537,16842753,18677761,18874369,20185089,22020097,44826625,48103425,49938433,53215233,56885250,58195969,59244547,59506689,62783491,64356355,66846721,74645509,75497488,77135888,78184464],"inherited":[720897,851974,1245185,1376257,1507329,1638406,1703942,1769480,1835014,1900550,1966093,2031624,2097153,2162694,2228231,2293766,2555911,2621446,2686982,2752522,2818058,2883597,2949128,3014662,3080198,3145736,3211274,3276819,3342356,3407878,3473418,3538950,3604486,3735553,3866631,3932165,3997715,4063233,4128774,4194310,4259841,4325382,4390931,4456461,4522031,4653064,4587526,4718598,4849670,4915206,4980749,5046280,5111815,5177349,5242886,5308422,5373957,5439494,5570570,5636101,5701639,5963796,5767174,6094854,6160390,6553606,6946823,7077894,7340038,7864326,8716340,9306169,9502778,9830457,9895942,11010099,11206713,11403321,53084164,53542914,53608455,54525957,55705604,56492033,56885255,57671681,57737244,58589189,59244554,60293143,60358664,60751877,62193692,62783498,62980105,63045659,64356363,64684060,65273883,65863682,66781186,68157441,68943878,69533720,70320129,70909959,71172102,71368722,71761926,72417287,72548368,72613894,73138193,73269261,73531398,73990154,74121234,74514439,74645521,74711046,74842122,74973197,75038729,75104341,75169799,75366406,75431942,75497501,75628550,75759625,75956271,76087370,76152838,76283919,76349446,76414991,76480518,76546054,76742662,77135901,77266950,77332486,77398022,77529094,77856773,77987846,78184478,78249990,78512129,78577670,78708741,78839814,78970895,79167498,79364102,79495169,79626247,79691782,79888390,79954006,80019462,80085012,80216073,80281684,80347142,80478215,80543764,80674822,80740358,80805894,80871429,80936961,81002580,81068108,81199119,81264725,81330181],"include":[6356993,10747905,18219009,26542081,62128129,71237633],"increment":[3342337,5963777,80084993,80543745],"intptr":[2818052,3276804,3473412,3997700,4390916,14876677,16318469,16973829,18874373,19070981,19136517,20905989,22020101,46202884,49938436,73138180,73465862,74645508,75497476,77135876,78184452],"iv8fasthostfunction":[51707906,55902210,61472769,72024069,79626245,80478212],"iscomparable":[9961473],"initialize":[3342337,5963777,12976129,13369345,13762561,15138817,80084993,80543745],"innerexception":[20709381,27262981,60358657,62455809,62980097,63176708,72548353,78905345,78970881],"icollection":[3211274,58589190,63242247,65732615,75628548,76414996],"idispatchex":[80412673],"ilist":[16711681,23199745,69861377],"iequalitycomparer":[7143429,9437189,17694725,20971525,55967746,56295426,59310086,71368706,75628546],"inspector":[41549826,43188225],"implementers":[3342337,5963777,13303809,80084993,80543745],"indentation":[56229889,66453505,67698689],"ityped":[3276801,4390913,16777217,16908289,18743297,19595265,22282241,50266113,51249153,62783489,64356353,65929217,77135873,78184449],"iscriptengineexception":[45547521,56950785,58327041,58458113,59179009,59703297,59965441,60555265,60948481,62455810,63176705,65404929,67108865,67239937,68222977,68812801,69664769,70647809,71106561,72089601,72351745,72548356,73334785,73793537,78905349,78970884],"iterable":[3670018,18808834,19922952,78774274],"indexing":[3342337,5963777,10027009,10485761,13041665,80084993,80543745],"implementation":[3342348,5963788,6356993,18808833,19922945,40632321,42139649,43319297,45547528,46333953,51707911,52232193,53673986,56033281,57737217,61734913,61931521,62193665,62717953,63045633,64684033,65273857,65798145,68943873,69533697,71368705,71630849,72417281,72613889,74514433,75104257,75169793,75431937,75628545,76742657,77266945,77856769,78577665,79626241,79953922,80085005,80281602,80478209,80543756,80674817,80805889,81002498,81068035,81264641],"iscriptengine":[3735554,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14155777,14286849,14352385,14417921,14483457,14548993,14745601,14811137,14942209,15073281,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,16056321,16187393,16384001,16515073,16580609,16711681,17104897,17235969,17301505,17760257,17825793,17891329,18022401,18087937,18284545,18219009,18546689,19202049,19464193,19857409,19988481,20119553,20250625,20316161,20381697,20512769,20578305,20774913,21037057,21102593,21364737,21495809,21561345,21626881,21692417,22216705,22478849,22544385,22609921,22872065,22937601,23003137,23199745,23527425,23592961,23658497,23855105,24117249,24182785,24313857,24379393,24444929,24641537,24903681,25100289,25427969,25886721,26017793,26476545,26542081,26607617,26738689,26804225,27066369,27983873,28049409,28639233,29360129,37879810,40501250,43843585,43909121,44171265,44564481,44695553,45350913,45613058,45547521,47710209,48955393,49152001,49283074,50135041,50855937,51380226,52035585,52428802,53018625,55115777,56033281,56229889,56360961,56688641,57147393,57278465,57868289,57999361,58523649,58916865,58982401,59637761,59899905,60162049,60620801,60817409,60882945,61407234,61669377,62062593,62128129,62259201,62324737,62390273,62717953,62849025,63569921,63963137,64159745,64290817,64421889,64552961,64815105,65601537,65667073,65994753,66387969,66453505,66519041,66650113,67043329,67305473,67502081,67567617,67764225,68091906,68288513,68485121,68878337,69140481,69206018,69795841,70254593,70713345,71237633,72286209,73662466,74252289,74907650,76087300,77463554,77856772,77922305,78381057,78512133,80281604,81264644],"intvalue":[10223617],"iv8fasthostmethodoperations":[4980738,29163521,51707906,61865990,72417285,74973189],"ihost":[9240577,41746433,70582273,73465857,81133569],"invoking":[3342337,5963777,8388609,16711681,18219009,23199745,26542081,58130433,68419587,77856769,80084993,80543745],"involvement":[78446593],"ijava":[2752513,60751873,63307777,65208321,76283905],"information":[3735554,5373954,7077893,7405569,8060929,8192001,8323073,8388609,8454145,8716290,8781825,8978433,9043969,9306114,9502722,9830402,10092545,10158081,10354689,10420225,10682369,10878977,11010054,11206658,11337729,11403266,11468801,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14155777,14286849,14352385,14417921,14745601,14811137,14942210,15073281,15335425,15400961,15466497,15597569,15728641,15794177,15859713,15925249,17039361,17170433,17235969,17301505,17563649,17760257,17825793,17891329,17956865,18022403,18087937,18284545,18415617,18546689,18808833,19202049,19398657,19464193,19857409,19922945,19988481,20054017,20119553,20250625,20316161,20381697,20512769,20578305,20774913,21037057,21102593,21233665,21364737,21561346,21495809,21692417,22216705,22478849,22544385,22609921,22872065,22937601,23330817,23527425,23592961,23724033,24117249,24182785,24313859,24379393,24903681,25100289,25231361,25427969,26017793,26476545,26738689,26935297,27066369,27983873,28639233,37486594,39518210,40173570,41418754,43515905,43909121,45088769,45547522,46858242,48365570,48496641,49545217,50003971,50724866,50987010,52822017,53018625,53870593,54001665,54460418,54853636,56426497,57409537,58261505,60358657,61734914,61931522,62914561,62980097,64421889,68878337,69337090,71041025,71172097,72220673,72482817,72548353,75104258,75366405,75825153,76087302,76480513,77398017,77725699,77856770,78512130,78839809,78970881,79298562,79429633,79757313,79953922,80281602,80674817,81002498,81068034,81264642],"inside":[3342337,5963777,80084993,80543745],"invokemethod":[2097153,2752513,2818049,3276801,3473409,3997697,4390913,5570561,5963777,16252932,28114949,73138177,74645505,75497473,76283905,77135873,78184449,79495169,80084993,81199105],"interoperability":[76939265],"istruthy":[9895937,31391748,59113473,68681732,76349441,77529089],"isreadonly":[6422533,7143429,19660805,20971525,58589185,76414977],"iscript":[2097153,3735553,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14155777,14286849,14352385,14417921,14483457,14548993,14680065,14745601,14811137,14942209,15007745,15073281,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,16056321,16121857,16187393,16252929,16384001,16515073,16580609,16711681,17104897,17235969,17301505,17629185,17760257,17825793,17891329,18022401,18219009,18350081,19202049,19333121,19464193,19857409,20250625,20447233,20512769,20643841,21364737,43909121,44695553,45350913,45940737,46268417,47382529,47710209,48627713,49152001,50855937,52035585,53018625,55115777,56033281,56229889,56360961,56688641,56950785,57147393,57278465,57868289,57999361,58327041,58523649,58785793,58982401,59572225,59637761,59703297,59899905,60882945,61079553,61407233,62062593,62128129,62259201,62455809,63111169,63176705,63897601,64290817,64421889,64552961,65339393,65404929,65667073,66387969,66519041,67043329,67108865,67305473,67764225,68222977,68485121,68812801,70647809,78512129,78905345,79495169],"int32":[2097155,2752515,2818051,3276803,3473411,3538949,3801092,3997699,4390915,4456452,4521987,4784132,4915202,4980740,5242884,5570563,5767170,5963779,7077890,7340035,7733249,8388610,8585217,8978433,9895958,10158082,10223617,10878977,10944514,11075586,11337730,11730950,17629185,18219009,18350081,20643841,21954562,23265281,23461889,23920642,25624577,25690114,26279937,26345473,26411009,26542081,26673153,26869761,27131905,27328513,27525121,27656193,27721729,27787265,27852801,27918337,28246017,28180481,28442625,28508161,28573699,28835841,28901377,29229057,29425668,29491201,29622273,29818881,29949953,30015489,30081025,30343171,30474241,30539777,30670849,30867457,30998529,31064065,31260673,31326209,31391745,31522817,31588353,31653889,31719425,31850497,32047105,32505857,32571396,32768001,32833537,33226754,33488897,33619969,33947649,34013185,34340865,34471937,34537473,34668545,34930691,35454978,35586049,35782657,36110337,36438017,37355521,38141953,38469633,38731777,38928385,39649281,40304641,40370177,40828929,42336257,44498945,44892161,44957697,45154306,45481985,45940737,46071809,46268417,46399489,46661633,46727169,47382529,47972356,48627713,48693249,48824321,49086465,49348609,49676289,50069508,50921473,51052565,51445762,52494340,52887554,53411841,53608449,53739522,54067202,54525953,55050241,55181313,55836676,56098817,56754178,56885249,57081857,57802753,58064897,58654722,58720258,58851329,59244545,59572225,59703297,60489729,60751873,62783489,63111169,63897601,64094209,64356353,65011713,66322433,66584577,66912258,67633153,67829761,69402625,71303172,71696385,72417282,73138180,73269252,73728001,74514434,74645508,74973188,75366406,75431938,75497476,75694084,75956227,76087300,76283908,76349443,77135876,77529110,77987845,78184452,78577668,79364098,79495172,79626244,80084996,80478212,81199108],"interchangeable":[13959169],"inotifypropertychanged":[1114113,75628548],"interfaces":[15269889,16384001,18219009,19464193,22085633,22740993,26542081,26804225,28639233,29360129,35258369,36372481,36896769,37027841,38731777,39387137,39649281,39714817,41287681,41680897,41943041,42205185,42270721,42401793,42532865,42991617,43778049,44040193,44302337,44498945,44761089,45219841,45481985,45547521,45875201,46530561,47316993,48103425,48234497,49086465,49217537,50331649,50528257,50593793,51707905,52101121,52232193,52297729,52953089,53149697,53673985,54132737,73990145,75759617,78184449],"items":[3211265,76414977,78446593],"integers":[7995393,8585217,9109505,10158081,11337729,76939266],"increases":[70975489],"infrastructure":[3342337,5963777,58916865,60358657,60555265,60948481,62455809,62980097,64290817,70647809,72548353,75431937,78905345,78970881,80084993,80543745],"iasync":[37814273],"icomparablet":[9961474],"identical":[36175873,36241409,36372481,37552129,37945345,38207489,38273025,39387137,39518209,40108033,40239105,40435713,43122689,43515905,43581441,44040193,44433409,48037889,48365569,49217537,49741825,49807361,52625409,54460417],"indexers":[16711682,23199746],"identify":[10027009,10485761,13041665],"insensitive":[8519681,76939265],"int32t":[8585218,8978434,10223618],"initializes":[5505025,5832705,6225921,6422529,6488065,6750209,6881281,7012353,7143425,7274497,7667713,8126465,9371649,9437185,12189697,12255233,12648449,12976129,13369345,13762561,14614529,15138817,17367041,17563649,17694721,18481153,18612225,19267585,19660801,20709377,20971521,21823489,22085633,22151169,22740993,22806529,23134209,23330817,23396353,23724033,24051713,25165825,25755649,25952257,27197441,27262977,27394049,28311553,28966913,31457281,32505857,32899073,33161217,33554433,33619969,34013185,34144257,34471937,34734081,34799617,34996225,35061761,35127297,35192833,35258369,35782657,36110337,36438017,36765697,36896769,36962305,37027841,37355521,38141953,38469633,38535169,38600705,38731777,38993921,39649281,39714817,39845889,40304641,40370177,40763393,40960001,41091073,41680897,41811969,41877505,41943041,42270721,42336257,42532865,42991617,43253761,43384833,43450369,43974661,44105730,44236801,44498945,44761089,44892161,44957697,45219841,45809665,46006276,46530561,47054849,47185921,47251457,47316993,47448066,47972364,48234497,48889857,49086465,49414145,50069512,50200578,50331649,50528257,50593793,50921473,51576837,52101121,52297729,52363266,52494344,52559873,52953089,53149697,53739524,54132737,54788100,54919169,55312392,55443461,55836684,55967748,56295428,56754180,57933826,59047941,60424197,71368708,72417284,72548356,73990145,74121221,74514436,74711041,74842113,75038721,75104261,75169793,75366412,75431937,75628548,75759618,75956225,76087308,76152833,76480513,76742658,77266945,77856770,77987841,78577665,78839810,78970884,79167496,79626248,79691777,79888385,79953921,80216066,80281605,80478216,80543745,80674817,81002501,81068033,81264645],"isfalsy":[9895937,27328516,59113473,66060292,76349441,77529089],"iv8fastenumerator":[4259842,5767170,23068673,24838145,25493509,33423367,49610754,51707905,70320133,75431938],"iconvertible":[10551301,11730949,11927557,12124165,12386309,12517381,12845061,12910597,13631493,13893637,14221317,15204357],"int64":[327682,3538945,4521985,4915202,7340035,9895939,15204358,30146564,31784964,32047108,34340868,36569092,51052546,51445762,54067202,64487426,70451202,73007106,75956225,76349443,77529091,77987841,79364098],"initonly":[1,786433,917505,2359297],"instantiation":[3538945,4521985,9633796,10878977,11468802,12582913,46923777,64880641,69599233,75104257,75956225,77987841,79953921,81264641],"istypeobj":[3538946,4521986,9568262,11665414,43646978,75956226,77987842],"int":[7733251,8388612,10158084,10944515,11075588,11337732,11730945,12845057,14876673,15204353,16318465,16973825,17629188,18350084,18874369,19070977,19136513,20643844,20905985,21954564,22020097,23265284,23461892,23920644,25624579,25690116,26279939,26345476,26411012,26673156,26869763,27131908,27328515,27525124,27656196,27721732,27787267,27852803,27918340,28246020,28180483,28442627,28508164,28573700,28835844,28901379,29229059,29425671,29491204,29622276,29818883,29949956,30015491,30081028,30146561,30343172,30408705,30474244,30539780,30670851,30867460,30998531,31064067,31260676,31326213,31391747,31522820,31588356,31653892,31719427,31784961,31850500,32047108,32309249,32505860,32571400,32768003,32833539,33226757,33292289,33357825,33488899,33619972,33947652,34013188,34209793,34340869,34471940,34537476,34668548,34930692,35454981,35586053,35782660,36110340,36306945,36438020,36569089,37355524,38141956,38469636,38731780,38928388,39649284,40304644,40370180,40828932,42336260,44498948,44892164,44957700,45481988,49086468,50921476,54198275,57344003,59572229,59703300,60489732,63111172,64094213,65011716,66322437,66584581,66912261,67829765,69402629,69468163,71565315,71696388,73728004,74055683,78184449],"implemented":[53542913,56492033,57671681,65863681,66781185,68157441,73990145,74842113,75038721,75759617,78184449,79167489,80216065],"iv8fasthostdynamicproperties":[3801090,23265281,23461889,24969217,25034753,26411009,27131905,27459585,29687809,33226753,35454977,36634625,38010881,39321605,48693249,49676289,51707905,53411841,55050241,55574530,60030977,66322433,67371009,71303173,73728001,78577668],"idictionary":[3211271,17498113,18939905,19529729,19791873,58589189,60686337,63242241,65732609,75628548,76414992,77725701],"iarraybuffer":[3473410,16646145,16973825,17432577,18153473,19070977,19136513,20905985,21168129,23986177,46202881,47906817,48103425,49020929,53608450,61145089,66846726,69861377,73138181],"instead":[16711681,22085636,23199745,58916865,64290817,64421889,68878337,69402628,76218372,76873729,79429633],"iterator":[69861378,79233025],"idynamicmetaobjectprovider":[3538954,4521994,9633797,9699334,10027014,10485766,10813446,11272198,11993094,13041670,46923777,47579138,48300034,54329346,75956234,77987850,78446593],"ievent":[655361,983041,1114114],"integer":[7733249,8388609,10158081,10223617,10944513,11075585,11337729,17629185,18350081,20643841,21954561,23265281,23461889,23920641,25624577,25690113,26279937,26345473,26411009,26673153,26869761,27131905,27328513,27525121,27656193,27721729,27787265,27852801,27918337,28246017,28180481,28442626,28508162,28573697,28835841,28901377,29229057,29425666,29491201,29622273,29818881,29949953,30015489,30081025,30343169,30474241,30539777,30670849,30867457,30998529,31064065,31260673,31326209,31391745,31522817,31588353,31653889,31719425,31850497,32047105,32505857,32571394,32768001,32833537,33030145,33226753,33488897,33619969,33947649,34013185,34078721,34340865,34471937,34537473,34668545,34930689,35454977,35586049,35782657,36110337,36438017,37224449,37355521,38141953,38469633,38731777,38928385,39649281,40304641,40370177,40828929,42336257,44498945,44892161,44957697,45481985,49086465,50921473,59572225,59703297,60489729,63111169,64094209,65011713,66322433,66584577,66912257,67829761,69402625,71696385,73728001],"inheritance":[68943873,69992449,70909953,71172097,71368705,71761921,71958529,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76677121,76742657,77201409,77266945,77332481,77398017,77529089,77594625,77856769,77987841,78249985,78577665,78708737,78774273,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"iasyncdisposable":[4063233,80936965],"immutable":[2031617,14614529,45547521,56492033,75038722],"identifier":[3735568,5373968,6619143,6684679,6815751,8650759,8716304,8847362,9175042,9306128,9502736,9830416,11010064,11206672,11403280,13172738,13238275,13434882,13500418,13697027,13828099,14745602,14811138,15073282,15400963,15597571,15859715,17235970,17301507,17825794,18087938,18284546,18546691,19202051,19988482,20119555,20316163,20578307,20774915,21495811,22216706,22478850,22937602,23527427,23592962,24182786,25100291,42270723,45219843,45350920,47710216,48168968,50593795,51183624,51576833,52953090,53149698,53542913,54132739,55443457,56492033,56819714,57671681,59047937,60424193,65863681,66781185,68157441,71892993,73007105,73990145,74842113,75038721,75104273,75759617,76087312,77856784,78512144,79167489,79953936,80216065,80281617,80347138,81002513,81068048,81264657],"introduce":[76939265],"istype":[3538945,4521985,9961477,75956225,77987841],"indexer":[16711681,23199745],"indexed":[2097155,2752515,2818051,3276803,3473411,3801091,3997699,4390915,4456453,4784133,4980741,5242883,5570563,5963779,17629185,18350081,20643841,21954561,23265281,23461889,23920641,25690113,26345473,26673153,27131905,27721729,28180483,30539777,31522817,31653889,35454977,45940737,46071809,46268417,46399489,46661633,46727169,47382529,48627713,48693249,48824321,49348609,49676289,52690945,53608449,54525953,55050241,55181313,55574529,56098817,56360961,56885249,57081857,57802753,58064897,59244545,59572225,60751873,61210625,62783489,62849025,63897601,64356353,66322433,66912257,67633153,69074946,71303172,73138180,73269253,73728001,74645508,74973189,75431937,75497476,75694085,76283908,77135876,78184452,78577668,79495172,80084996,81199108],"instantiating":[76611585,77070337],"isnull":[3538945,4521985,9895937,10616836,28901380,59113473,64421890,68026372,68878338,75956225,76349441,77529089,77987841,79429633],"interrupts":[3735553,5373953,8716289,9306113,9502721,9830401,11010049,11206657,11403265,17104897,25886721,37879809,50135041,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"iterates":[3211265,4456450,4784130,4980738,24772609,25493505,73269250,74973186,75694082,76414977],"implement":[16711681,23199745,76414977,78446593],"idata":[3997697,59244545,75497473],"ireadonlylist":[62586886,66256902,69271558],"issues":[72744961],"initializing":[49545218,52232193,76939265,77004801,80412673],"itemname":[13172741,13238277,13434885,13500421,13697029,13828101,14024709,14286853,14352389,14745605,14811141,15073285,15400965,15597573,15794181,15859717,15925253,16711685,17235973,17301509,17760261,17825797,17891333,18087942,18284550,18546694,19202053,19988486,20119558,20250629,20316166,20512773,20578310,20774918,21102598,21495814,21692422,22216710,22478854,22544390,22609926,22937606,23199750,23527430,23592966,24117254,24182790,24379398,24903686,25100294,26476550,27066374],"isdefaultattribute":[1769473,2031617,2949121,3145729,4653057,5046273,73990145,74842113,75038721,75759617,79167489,80216065],"iequality":[7143425,9437185,17694721,20971521],"immediate":[60358657,62980097,72548353,78970881],"idynamic":[9633793,9699329,10813441,11993089],"item":[3211265,4063233,4259841,12582915,13172737,13238273,13434881,13500418,13697026,13828097,14024705,14286849,14352386,14417921,14745602,14811138,15073281,15335425,15400962,15466498,15597569,15794178,15859713,15925250,16711683,17235970,17301506,17760257,17825793,17891330,18087937,18284546,18546689,19202050,19988482,20119554,20250625,20316162,20381697,20512769,20578305,20774913,21102594,21495810,21692417,22216705,22478850,22544386,22609921,22937602,23068679,23199747,23527426,23592961,24117249,24182785,24379393,24903682,25100289,26017794,26148871,26476545,27066370,27983873,37617665,37814273,46071811,47382531,53084161,53608450,54394881,54525954,55705601,56885250,58589185,59244546,59572228,60686341,60751874,61079556,62783490,63897602,64356354,66912261,67633154,69926917,70320129,71368705,73138178,74121217,74645506,75497474,75628545,76283906,76414978,76939265,77135874,78184450,78446593,79495170,80084994,80936961,81199106],"ienumerator":[5767172,35913736,37617672,49610756,75431940],"istransient":[78118913],"iteration":[3670018,18808834,19922946,78774274]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_106.json b/docs/Reference/fti/FTI_106.json index 8f411f29a..5936b066b 100644 --- a/docs/Reference/fti/FTI_106.json +++ b/docs/Reference/fti/FTI_106.json @@ -1 +1 @@ -{"javascriptobjectflags":[38535169,45940742,61210628],"json":[3604482,23134212,23724035,27000833,29229057,39780354,44498950,53673986,59899906,61145090],"java":[2949121,16252929,17104897,17825793,18153473,18546689,19005441,19333121,19726337,20054017,20512769,21299201,38535169,38862849,61079553,61210625,61341697],"jscript":[6291457,7536641,30867457,31522818,32112641,32309250,32702466,33161218,33685506,34734083,36503554,37486594,38469634,39059457,39124998,39190531,39976962,40566786,41287686,43909121,53805057,55377922,55967745,58392583,61407239,61472769,61669379],"javascript":[2621441,2686977,2818049,2949121,3145729,3211265,3670017,7143425,8060929,8126465,8257537,8323073,8650753,8912897,9043969,9306113,9437186,9568257,9699329,9830401,10289153,10354689,10420225,10485761,10616833,10682369,10878977,10944513,11075585,11141121,11206657,11337729,11665409,12058625,12189697,12255233,12582913,12910593,13565953,15728642,15794178,16056322,16252930,16449538,16580610,16711682,17104898,17301506,17432578,17498114,17825794,18022402,18153474,18219010,18481154,18546690,19005442,19202050,19333122,19726338,20054018,20512770,21299202,37027843,37421057,37814275,37945345,38535179,38797315,38862849,39321603,39518211,40239107,41156611,41484289,41549825,44040194,44564482,44826626,45350914,45940739,46399491,46989314,47251457,47448066,48037890,52035585,52101121,52428804,55377924,56098817,59375621,59441153,59834372,60162053,60293125,60424197,60751878,60817409,61079556,61145094,61210627,61341699],"javascriptobjectkind":[38535169,46399494,61341700],"javascrip":[13631489,23789569,42336257,45875201,59637761],"javascriptextensions":[2949122,16252929,17104897,17825793,18153473,18546689,19005441,19333121,19726337,20054017,20512769,21299201,38535169,38862849,61079558],"jscriptengine":[6291458,7536642,30867458,31522821,32112642,32309253,32702469,33161221,33685509,34734085,36503557,37486597,38469637,39059458,39124998,39190533,39976961,40566785,41287686,43909122,53805058,55967746,58392587,60882945,61407243,61603841,61669378],"just":[57147394,61669377]} \ No newline at end of file +{"javascriptextensions":[3670018,17039361,17170433,17956865,18415617,18808833,19398657,19922945,20054017,21233665,25231361,26935297,48103425,54263809,78774278],"javascript":[2818049,2752513,3276801,3473409,3670017,3997697,4390913,7995393,8585217,8847361,8912897,8978433,9109505,9175041,9961473,10158081,10223617,10354690,10747905,10551297,10878977,10944513,11075585,11730945,11862017,11927553,12124161,12386305,12517377,12582913,12845057,12910593,13631489,13893633,13959169,14090242,14221313,14876674,15204353,15990785,16318466,16449538,16646146,16777218,16842754,16908290,16973826,17039362,17170434,17432578,17956866,18153474,18415618,18677762,18743298,18808834,18874370,19005441,19070978,19136514,19398658,19595266,19922946,20054018,20185090,20905986,21168130,21233666,22020098,22282242,23986178,25231362,26935298,44826625,46202881,47906817,48103435,49020929,49545219,49938433,50266113,51249153,51707905,53215233,53608451,54263809,56885251,58195970,59244547,59506690,60751875,61145090,61734913,61931521,62783491,63307779,64356355,65208323,65470465,65929218,66846722,68616194,69861379,70123522,71958532,72155137,73138181,73924609,74448897,74645508,74776581,75497477,76087297,76283909,76939272,77135877,77791233,78184454,78774276,79233027],"jscript":[11206657,11403265,39714818,41943042,45219843,45613057,47185922,49414146,50528258,51380225,51576838,52101122,52232194,52559874,53673986,54132739,54919170,57737217,59047942,63045633,73662465,74776578,77463553,80281607,80412675,81264647,81330177],"javascrip":[18219009,26542081,64421889,68878337,79429633],"javascriptobjectkind":[48103425,65208326,69861380],"java":[3670017,17039361,17170433,17956865,18415617,18808833,19398657,19922945,20054017,21233665,25231361,26935297,48103425,54263809,69861377,78774273,79233025],"json":[6160386,39059457,39452673,41549828,43188227,59375618,76939266,77332482,78315526,80019458],"javascriptobjectflags":[48103425,63307782,79233028],"just":[72744962,80412673],"jscriptengine":[11206658,11403266,39714821,41943045,45219845,45613058,47185925,49414149,50528261,51380226,51576838,52101125,52232193,52559877,53673985,54132741,54919173,57737218,59047942,63045634,73662466,77463554,79953921,80281611,80412674,81068033,81264651]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_107.json b/docs/Reference/fti/FTI_107.json index f6773bfb7..ff1436d7b 100644 --- a/docs/Reference/fti/FTI_107.json +++ b/docs/Reference/fti/FTI_107.json @@ -1 +1 @@ -{"kind":[24444930,24969218,25362434,25493506,25559042,25821186,26017794,26083330,26411010,26542082,26607618,26935298,27066370,27525122,27983874,28049410,28311554,28377090,28573698,28704770,28966914,29294594,29491202,29556738,29949954,30343170,30736386,30998530,31391746,31981570,32178178,33095682,34013186,34930690,35848194,37027842,37814274,37879810,38797314,39518210,40239106,41156610,46399494,59375618,59834370,60162050,60293122,60424194,60620801,60751874,61145089,61341698],"keys":[34537473,42663943,43188225,45809665,46858242,54067201,56426497,57540610,57999361],"key":[2752516,16121862,17039367,17694726,19595270,45744129,46858241,49152006,57540613,58654721],"keyword":[13631489,23789569],"keyvaluepair":[2752518,46858242,56426504,57540624],"kinds":[38535169,61341697]} \ No newline at end of file +{"keyed":[51707905,71303169],"keyword":[18219009,26542081],"kind":[36044802,36175874,36241410,36372482,37552130,37748738,37945346,38076418,38207490,38273026,39387138,39518210,40042498,40108034,40239106,40435714,42401794,43122690,43515906,43581442,44040194,44433410,45744130,45875202,46858242,47513602,48037890,48365570,49217538,49741826,49807362,50987010,51970050,52625410,53608450,54460418,54984706,56885250,59244546,60751874,62783490,64356354,65208326,69861378,73138178,74645506,75497474,76283906,76939265,77135874,78184450,79560705],"key":[3211268,17498118,18939911,19529734,19791878,58589185,60358657,60686342,62980097,72548353,76414981,78970881],"keys":[53084161,54394881,55705601,58589186,63242247,71368705,74121217,75628545,76414978],"kinds":[48103425,69861377],"keyvaluepair":[3211270,58589186,75628552,76414992]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_108.json b/docs/Reference/fti/FTI_108.json index 4f8bf993b..8e6f5a6a9 100644 --- a/docs/Reference/fti/FTI_108.json +++ b/docs/Reference/fti/FTI_108.json @@ -1 +1 @@ -{"leaf":[7143425,8060929,54067201],"locates":[4259841,11599873,54067201],"loaddocument":[1835009,1966081,6488069,53084161,58523649],"leaks":[50200577,53936129],"loaders":[6029313,6488065,7274497,45023233,53870593],"languages":[8519681,9109505,9371649,9633793,9961473,10027009,10092545,10158081,10551297,10747905,10944513,11141121,11534337,13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16187393,16908289,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537,47054849,50528257,51642369,51838977,56492033,57540609,60555265],"languag":[13828097,19398657,57540609],"looks":[1769473,3276801,4259841,19595265,54067201,56426497,57999361],"lower":[50200577,53936129],"lines":[47710209,48234497,52559873,56688642],"locks":[60817409],"loaded":[6029315,6488067,6815745,7274499,7405569,7864321,8847361,13172738,13238274,13762562,13893634,14680066,14745602,20250626,20447234,21102594,21233666,21823490,22085634,24051713,24444929,24772609,25493505,25559041,26017793,26083329,26411009,26542081,26935297,27066369,27394049,27525121,27721729,28311553,28377089,28573697,29032449,29294593,29556737,29753345,30736385,31981569,33095681,38010882,40894465,41222146,42926081,52166657,53870594,57278465,59572227],"larger":[60620801],"local":[8650753],"lengths":[9502726,10354694],"limited":[15859713,19529729,27197441,30867457,31588353,32112641,32964609],"locate":[11599873,17039361,19595265,41943041],"long":[1048580,1179650,16056328,16711688,17301512,17432584,17498120,18219016,44564484,44826628,45350916,46989316,49086468,49479684,49872900,50266116,50331652,50855940,52101126,52756484,54919174,55640068,56033284,56164356,56557572,57081862,57475078,57737224,60751873,61145090],"loadcallback":[41222145,42926084,53870593,59572225],"look":[12255233],"loading":[47382529],"label":[10944513,13631489,14548993,16187393,16908289,22151169,22740993,23068673,23789569,23920641,24641537,24969217,25362433,26673153,26738689,27459585,27590657,28180481,28508161,28639233,28901377,28966913,29097985,29163521,29425665,29622273,29884417,29949953,30146561,31129601,31391745,31850497,33161217,33554433,33685505,34275329,34734081,35127297,36044801,36306945,36569089,37224449,37486593,37879809,38207489,38469633,39190529,45613057],"like":[13828097,19398657],"line":[524291,1048579,1179651,3801089,37617666,39321601,50593793,55115778,55902212,56688641,57081859,61145089],"lossy":[61145091],"lib":[5046274,7077889,7143433,8060935,30932995,58785794],"likely":[42795009,48168961,48758785,48889857,49348609,56819713],"let":[7077889,7602177,8323073,8650753,12255233,12910593,31326209],"low":[61145089,61669377],"load":[983041,5242883,6029314,6488066,7274498,40894465,42926081,52166657,57278465],"list":[8650753,9699334,10289158,10420230,10485766,10682374,11075590,11206662,11337734,11665414,12058630,12189702,12582918,13828097,19398657,22740994,30670849,30932993,31064065,31457281,31719425,31784961,32047105,32374785,32440321,32505857,32571393,32899073,33030145,33292289,33357825,33423361,33488897,33619969,33751041,33816577,33882113,34078721,34209793,34340865,34406401,34471938,34603009,34668545,34734082,34799617,34865153,35061761,35127298,35192833,35258369,35323905,35586049,35651585,35717121,35782657,35913729,35979265,36044802,36110337,36175873,36241409,36372481,36438017,36700161,36765697,36831233,36896769,36962305,37158913,37289985,37355521,37421057,37552129,37683201,37748737,37945345,38076417,38207490,38338561,38600705,38666241,38862849,39059457,39124994,39190530,39649281,39714817,40173570,40370177,40632321,40763393,41091073,41222146,41287682,41418753,41811970,41877505,42074113,42205185,42270721,43450371,43843585,43909121,44957697,45088769,45416449,45613058,46071809,46268417,47775745,49414147,53870594,58195970,58327041,58392578,60030977,60096514,60817409,60882946,61407234,61538306,61603842],"loader":[1572865,1835009,1966081,5242881,5308417,5505025,5701633,5963777,6029313,6094849,6225921,6422529,6488065,6684673,6815745,7274497,7405569,7667713,7864321,8847361,34996226,35389441,38010882,39059457,39583747,40697858,40632321,41222146,42074113,42205185,42860546,43319302,43384835,43909121,44957697,45088769,45416449,46268417,46530563,46792707,47775745,52953091,53018626,53084163,53870594,58130435,58195969,58327041,58392577,58523649,60030977,60096513,60817409,60882945,61407233,61538305,61603841],"limit":[38404097,39911425,42074113,50200578,50724865,51511297,52101121,52690945,53149697,53542913,53936130,54263809,54460417,55640066,58261505,59244545,59441154,60817409],"leave":[52101121],"lists":[60751873],"listt":[9699330,10289154,10420226,10485762,10682370,11075586,11206658,11337730,11665410,12058626,12189698,12582914],"longer":[41943041,54853636],"locating":[46071809],"linq":[7143425,8060929,8126465,9306115,9830401],"link":[1,45744129,58654721],"loade":[35389441,39583745,40697857,43384833,53084161,58523649],"loads":[1572865,1835010,1966082,3735558,4587526,4980748,5242882,6029313,6291462,6356998,6488065,6553606,7208978,7274497,7536646,8716294,8978438,13172737,13238273,13762561,13893633,14680065,14745601,20250625,20447233,21102593,21233665,21823489,22085633,24051713,24444929,24772609,25493505,25559041,26017793,26083329,26411009,26542081,26935297,27066369,27394049,27525121,27721729,28311553,28377089,28573697,29032449,29294593,29556737,29753345,30736385,31981569,33030147,33095681,33882115,34668547,35586051,36372492,39714828,53084162,58130433,58195974,58261516,58327046,58392582,58523650,60096518,60817426,60882950,61407238,61538310,61603846],"loadcustomattributes":[1572865,5242885,58130433],"legacy":[46333953,47382529,51052545],"location":[59572225],"looking":[41943041],"level":[42532865,54853640,57147393,59572225,61145089,61276161,61669377],"linenumber":[524289,1048580,37617665,55115777,55902209,57081860],"listen":[25231361,26214401,27590657,27656193,28835841,29163521,29425665,29622273,29884417,30015489],"language":[3014658,4521986,13631489,23789569,41353217,45219841,47054849,49610753,50790401,51642369,55705602,56492033,60227586,61669377],"leaves":[30539777],"length":[16056325,17301509,40239106,41156610,46989318,60424194,60751874],"loaddocumentasync":[1835010,1966081,6029317,7274500,53084161,58523650],"library":[65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046274,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077891,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631490,13697025,13762561,13828098,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398658,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789570,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,26935297,27000833,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36306945,36372481,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38404097,38469633,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40632321,40697857,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,41943041,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909121,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775745,47841281,47906817,47972353,48037889,48103425,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55312385,55377923,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492034,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785794,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555266,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145090,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669378],"leading":[47710209,48234497,52559873]} \ No newline at end of file +{"list":[9175041,10551302,11730950,11927558,12124166,12386310,12517382,12845062,12910598,13631494,13893638,14221318,15204358,16711681,22740994,23199745,42270722,43646977,43909121,43974657,44105729,44695553,44826625,45154305,45219842,45350913,45678593,45940737,46006273,46071809,46202881,46268417,46399489,46596097,46661633,46727169,46923777,47382529,47448065,47579137,47710209,47775745,47841281,47906817,47972353,48168961,48300033,48431105,48496641,48562177,48627713,48693249,48758785,48824321,49020929,49152001,49348609,49479681,49610753,49676289,49938433,50003969,50069505,50200577,50266113,50397185,50462721,50593794,50855937,51052545,51183617,51249153,51314689,51445761,51576834,51642369,51707905,51773441,51838977,51904513,52035585,52166657,52363266,52494337,52756482,52822017,52887553,52953090,53018625,53149698,53215233,53346305,53411841,53477377,53739521,53870593,54067201,54132738,54263809,54329345,54657025,54722561,54788097,54853633,55050241,55115777,55181313,55312385,55377921,55443458,55508993,55836673,55967745,56098817,56164353,56295425,56360963,56623105,56754177,57081857,57212929,57409537,57737217,57802753,57933825,58064897,58130433,58654721,58720257,58851329,59047938,60227585,60293121,60424194,61407233,62193665,62652417,62849027,63045633,63504385,63635457,64618497,64684033,65011713,65273857,69533697,69992449,75104258,76087297,77529090,77856770,78512129,79888386,79953922,80281602,81002498,81068034,81264642],"loaddocument":[2162689,2228225,7405573,75169793,79691777],"locks":[76087297],"leaks":[71041025,72220673],"loaddocumentasync":[2162689,2228226,9043972,10682373,75169794,79691777],"long":[393218,327684,16449544,16646152,16777224,16842760,16908296,18153480,18677768,18743304,20185096,21168136,22282248,23986184,28246018,30146564,30277634,30998530,31784964,31916034,32047108,34340868,36569092,37421058,58195972,59506692,61145092,64487430,65929220,66191364,66715652,66977796,68550660,68747268,69730308,70189060,70451206,70844420,71434244,71892998,72155142,73007112,73203716,73859076,78184449],"loade":[55640065,57344001,61997057,69468161,75169793,79691777],"loads":[851969,2162690,2228226,3735558,5373958,6356994,7077900,7405569,8716294,9043969,9306118,9502726,9830406,10682369,11010066,11206662,11403270,14155777,14483457,14548993,16515073,19857409,21037057,21364737,21626881,24641537,25427969,26607617,26738689,36044801,36175873,37552129,37748737,37945345,38207489,40239105,40435713,40894465,41025537,42074113,42598401,43057153,43581441,44433409,44695555,45023233,45744129,47513601,47841283,48037889,49741825,49807361,51314691,51642380,51970049,52625409,54984705,55115779,57212940,74711041,75104262,75169794,75366412,76087314,77856774,78512134,79691778,79953926,80281606,81002502,81068038,81264646],"lists":[78184449],"listt":[10551298,11730946,11927554,12124162,12386306,12517378,12845058,12910594,13631490,13893634,14221314,15204354],"label":[12582913,15269889,16384001,18219009,19464193,22085633,22740993,26542081,26804225,28639233,29360129,35258369,36372481,36896769,37027841,38731777,39387137,39649281,39714817,41287681,41680897,41943041,42205185,42270721,42401793,42532865,42991617,43778049,44040193,44302337,44498945,44761089,45219841,45481985,45875201,46530561,47316993,48234497,49086465,49217537,50331649,50528257,50593793,52101121,52297729,52953089,53149697,54132737],"loadcustomattributes":[851969,6356997,74711041],"like":[16711681,23199745],"line":[393219,327683,1572867,4718593,49545217,56819714,69271553,70451203,76939265,78118913,80347138,80740356],"listen":[38731777,39649281,40304641,40828929,42336257,44498945,44892161,45481985,49086465,50921473],"limited":[16580609,23003137,43843585,44564481,45613057,49283073,51380225],"legacy":[56688641,66650113,67895297],"linq":[7995393,8585217,8978433,9109505,11075587],"leave":[72155137],"lines":[56229889,66453505,67698689,69271554],"longer":[61603841,76611588],"languag":[16711681,23199745,76414977],"leading":[56229889,66453505,67698689],"local":[9175041],"let":[7733249,7929857,8847361,9175041,13959169,15990785,25624577,26279937,26869761,27656193,27787265,27852801,28442625,28573697,29032449,29097985,29229057,29294593,29425665,29622273,29818881,29884417,30015489,30146561,30277633,30670849,30736385,30801921,30932993,30998529,31064065,31719425,32047105,32112641,32178177,32309249,32374785,32440321,32768001,32833537,34078721,34209793,34275329,35651585,54591489],"language":[3342338,5963778,18219009,26542081,57868289,62062593,62128129,67567617,69140481,71237633,78708737,80084994,80412673,80543746],"length":[16777221,16908293,18743301,22282245,62783490,64356354,65929222,77135874,78184450],"locating":[63635457],"leaf":[7995393,9109505,74121217],"loaded":[6619137,6684673,6815745,7405571,8650753,9043971,10682371,14155778,14483458,14548994,16515074,19857410,21037058,21364738,21626882,24641538,25427970,26607618,26738690,36044801,36175873,37552129,37748737,37945345,38207489,40239105,40435713,40894465,41025537,42074113,42598401,43057153,43581441,44433409,45023233,45547522,45744129,47513601,48037889,49741825,49807361,51970049,52625409,52756482,54984705,61341697,64225281,69337089,76873731,79298561,79888386],"lossy":[76939268],"location":[76873729],"link":[196609,60358657,62980097,72548353,78970881],"lib":[4521986,7929857,7995401,9109511,46596099,75956226],"leaves":[51511297],"lengths":[10158086,11337734],"load":[458753,6356995,7405570,9043970,10682370,61341697,64225281,69337089,79298561],"loader":[851969,2162689,2228225,5505025,5832705,6029313,6291457,6356993,6619137,6684673,6815745,7208961,7405569,7536641,7602177,8126465,8257537,8650753,9043969,10682369,45547522,52756482,53936130,54657025,55640065,55771138,57344003,57737217,58130433,60293121,60882947,61407233,61997058,62193665,63045633,64684033,64749574,65273857,65536003,67960834,69468163,69533697,69992449,70254595,74711043,75104257,75169793,76087297,77856769,78512129,79691779,79888386,79953921,80281601,81002497,81068033,81264641],"level":[61276161,72744961,76611592,76873729,76939265,77201409,80412673],"locates":[2883585,13107201,74121217],"look":[13959169],"linenumber":[327684,1572865,56819713,70451204,80347137,80740353],"loadcallback":[52756481,64225284,76873729,79888385],"languages":[9633793,9699329,10027009,10289153,10485761,10813441,10878977,11141121,11468801,11993089,12582913,12779521,13041665,14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,18022401,18219009,19464193,19857409,21037057,21364737,21561345,21626881,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129,57868289,60162049,64552961,64815105,67305473,69140481,76414977,78708737,80871425],"loaders":[7405569,9043969,10682369,54198273,79888385],"low":[51707905,74776577,76939265,80412673],"library":[458753,65537,4521985,7929858,16711681,18219009,23199745,26542081,61603841,74776578,75956225,76939265,78708737,80412673,80871425],"lower":[71041025,72220673],"loading":[67895297],"looking":[61603841],"likely":[57147393,61669377,67502081,67764225,69206017,78381057],"locate":[13107201,17498113,18939905,61603841],"larger":[79560705],"limit":[55246849,59834369,60293121,64094209,66584577,67829761,69402625,70975489,71041026,71827457,72155137,72220674,73203714,73400321,75366401,76087297,77398017,77791234],"looks":[1966081,2883585,3080193,17498113,71368705,74121217,75628545]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_109.json b/docs/Reference/fti/FTI_109.json index 550085ef2..1335cf50d 100644 --- a/docs/Reference/fti/FTI_109.json +++ b/docs/Reference/fti/FTI_109.json @@ -1 +1 @@ -{"modify":[5373953,16318465,52166657,57278465],"marshalalllongasbigint":[61145090],"meta":[3735554,4587522,4980740,6029313,6291458,6356994,6488065,6553602,7208965,7274497,7536642,8519681,8716290,8978434,9109505,9633793,10027009,15073282,15204354,18939906,19464194,21954561,23461890,25821186,26607618,28049409,28442626,30343170,30998530,32178178,32374785,33488897,34078721,35061761,35192835,36634625,37355521,37748737,38010881,38666244,39256065,40435713,41549826,45285377,47251458,50003969,51576833,51970049,52166658,53739521,57278466,58195970,58261508,58327042,58392578,59310081,59703297,60096514,60489729,60817413,60882946,61407234,61538306,61603842],"members":[65537,131073,196609,262145,327681,393217,458753,524289,655361,786433,851969,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4980737,5046273,5111809,5177345,5439489,5570561,6291457,6356993,6553601,6881281,7208961,7536641,7798785,7929857,8126466,8454146,8585217,8716289,8978433,9240577,9437186,9502721,9895937,10092545,10354689,11141121,11730948,11927553,12320769,12648449,12713986,12845057,13041666,13107201,13303811,13369345,13500418,13697026,13828098,13959171,14024705,14090241,14155777,14286850,14417921,14483458,14876673,14942209,15007746,15138818,15269890,15597569,15925249,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19136514,19398658,19660801,19922946,19988481,20119553,20643841,20709378,20774913,21037058,21364737,21430274,21495809,21889026,22413313,22478849,22609923,23199746,23265281,23396355,24248322,25100290,34537473,34996225,35389441,36634625,37027841,37093377,37617665,37814273,38010884,38141953,38404097,38797313,38928386,38993921,39059459,39256065,39387137,39518209,39780353,39911425,40239105,40304641,40435713,40632323,40697857,41156609,41222145,41484289,42008578,42074115,42205187,42532865,42598401,43188225,43581442,43909123,43974657,44433409,44957699,45088771,45154305,45416449,45744129,45809665,46137345,46202881,46268419,46596097,46858241,46923777,47120385,47185922,47316994,47644673,47775747,47972353,48365569,48824321,50593793,50659329,51314689,51576833,52428801,52494338,53084161,53411842,53477380,53673985,53870593,54067201,54198273,54722561,55115777,55246849,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,56950786,57016321,57147393,57212929,57540611,57671681,57802753,57933825,57999361,58130433,58195971,58261505,58327043,58392579,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113476,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637762,59703297,59768833,59834369,59899905,59965444,60030977,60096515,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817411,60882947,60948481,61014017,61079553,61145091,61210625,61276161,61341697,61407235,61472769,61538307,61603843,61669377],"microseconds":[37093378,38141953,38404097,42074113,50266113,50855937,50987009,52756481,53673986,55574529,56754177,58261505,60817409],"maxyoungspacesize":[38993921,54263812,58589185],"maxruntimeheapsize":[42074113,50200580,51249153,51511297,59441153,60817409],"memory":[4980737,7208961,15728643,15794179,16580611,19202051,25362433,26345474,26411009,27066369,27787266,27983873,28049409,28377089,28573697,29294593,30343169,30539777,31981569,34013185,37879809,38010881,38993921,39321601,39911427,49872897,50200579,51511297,52101122,53936131,56164353,56557569,58261505,58589185,59244548,60489729,60686337,60817409,61210625],"multiplier":[38993921,51511299,58589185],"max":[39583745,43384833,45023233,50200577,50724865,52101121,52690945,53149697,53542913,53936129,54263809,54460417],"multidimensional":[13828097,19398657],"map":[6815745,7405569,7864321,8847361,40304641,51576833,52232194],"merge":[7077889,7143425],"mutable":[1048577,1179649,1245185,52166657,55836673,57278465],"max_safe_integer":[61145089],"maintains":[45023233],"monitoring":[50200580,50724865,51249153,51511297,52887553,53936132,54460417,59441153],"monitor":[50724865,54460417],"memberwiseclone":[1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"multiple":[13434881,23461889,24051713,24444929,24772609,24838145,24969217,25362433,25493505,25559041,25624577,25755649,25821185,26017793,26083329,26411009,26542081,26607617,26935297,27066369,27131905,27394049,27525121,27721729,27983873,28049409,28311553,28377089,28442625,28573697,28704769,28966913,29032449,29294593,29491201,29556737,29753345,29949953,30081025,30146561,30343169,30736385,30998529,31391745,31981569,32178177,32768001,33095681,34013185,34930689,35848193,36569089,37879809,39321601,52494337,59703297],"modeless":[4718593,30605315,60948481],"malicious":[51511297],"movenext":[8650753],"maxarraybufferallocation":[38993921,50200577,52101124,53936129,58589185],"manner":[11730945],"methods":[1572866,1638402,1703938,1769474,1835010,1900546,1966082,2031618,2097154,2293762,2359298,2424834,2490370,2555906,2621442,2686978,2752514,2818050,2162690,2228226,2883586,2949122,3014659,3080194,3145730,3211266,3276802,3342338,3407874,3473410,3538946,3604482,3670018,3735554,3801090,3866626,3932162,3997698,4063234,4128770,4194306,4259842,4325378,4390914,4456450,4521987,4587522,4653058,4718594,4784130,4849666,4980738,5046274,5111810,5177346,5242881,5439490,6291458,6356994,6553602,6881282,7208962,7471106,7536642,7798786,7929858,7995394,8126466,8454146,8585218,8716290,8978434,9240578,9437186,9502721,9895938,10092545,10354689,11141121,11927553,12320769,12648449,12713986,12845057,12910593,13041666,13107201,13303809,13369345,13500418,13697026,13828102,13959169,14024705,14090241,14155777,14286850,14417921,14483458,14876673,14942209,15007746,15138818,15269890,15597569,15925249,16252930,16777217,16842753,17104898,17235969,17563649,17760257,17825794,18087937,18153474,18350081,18546690,18612225,18743297,19005442,19070977,19136514,19333122,19398662,19726338,19660801,19922946,19988481,20054018,20119553,20512770,20643841,20709378,20774913,21037058,21299202,21364737,21430274,21495809,21889026,22413313,22478849,22609921,23199746,23265281,23396353,24248322,25100290,38010881,38535171,48300033,49676289,49938433,51183617,51576833,52297729,52822019,53084161,53280771,53477377,53673985,53870593,54067201,54525953,54722562,55115777,55246849,55312385,55705602,55836674,55902209,56229889,56426497,56492033,56754177,57016321,57212929,57540609,57671681,57802753,57933825,57999361,58130433,58195969,58261505,58327041,58392577,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047938,59113473,59244545,59310081,59375617,59506690,59703297,59768833,59834370,59899905,60096513,60162049,60227586,60293121,60358658,60424194,60489729,60555265,60751873,60817409,60882945,60948481,61014017,61079554,61407233,61472769,61538305,61603841],"manage":[6029313,6488065,7274497],"maxoldspacesize":[38993921,50200577,52690948,53542916,53936129,58589185],"maxheapsize":[38404097,51511297,52887553,53936132,58261505,59441153],"marshaled":[42336257,45875201,49610753,50528257,50790401,51838977,59637761,61145090,61407233,61472769,61538305,61603841,61669380],"marshalnullasdispatch":[49610753,50790401,61669377],"maxexecutablesize":[38993921,52690948,58589185],"misspelled":[41943041],"mib":[38993924,52690947,53149699,53542915,54263811,58589188],"metho":[57278465],"moment":[50266114,50855938,52756482],"memorystream":[50921473],"marshalarraysbyvalue":[61669377],"match":[2490369,2555905,2883585,3342337,3538945,4849665,13828097,19398657,53477377,54722561,55312385,59113473,59506689,60358657],"maxstackusage":[38404097,54460420,58261505],"make":[5373954,5898242,16318466,16973826],"maps":[49610753,50528257,50790401,51838977,60555265],"module":[41484289,41549829,47251461,47448065,48037889,52428801,54853633,59179009,61145089],"minimum":[38404097,42074113,51249153,52887553,58261505,60817409],"message":[16384007,20381703,22020103,22675463,32571394,34799618,42139654,44236801,45744131,46202881,48103425,48365571,48693249,58458115,58654725,58982403],"method":[2621441,2686977,2818049,3014670,3145729,3211265,3670017,4128769,4521999,5177345,5242882,5505025,5963777,6029313,6094849,6225921,6422529,6488065,6684673,6750209,6815746,6946817,7012353,7077889,7143425,7274497,7405570,7471109,7602177,7733249,7864322,7929861,7995397,8060929,8126465,8257537,8323073,8388609,8454145,8519681,8585221,8650753,8847362,8912897,9043969,9109505,9175042,9240581,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895941,9961473,10027009,10092545,10158081,10223618,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141122,11206657,11337729,11468801,11534337,11599873,11665409,11730945,11862017,11927553,12058625,12124161,12189697,12255235,12320769,12451841,12517377,12582913,12648449,12713986,12845057,12910593,13041665,13107201,13172738,13238274,13303810,13369345,13434883,13500417,13565953,13631492,13697025,13762562,13828106,13893634,13959170,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548994,14614529,14680066,14745602,14811137,14876673,14942209,15007745,15073282,15138818,15204354,15269890,15335425,15400961,15466498,15532034,15597569,15663105,15728642,15794178,15859715,15925249,15990785,16056321,16121857,16187394,16252934,16449537,16515073,16580610,16646149,16711681,16777217,16842753,16908290,17039361,17104901,17170433,17235969,17301505,17367042,17432577,17498113,17563649,17694721,17760257,17825797,17891329,17956866,18022401,18087937,18153478,18219009,18284545,18350081,18415617,18481153,18546694,18612225,18677761,18743297,18808833,18874373,18939906,19005446,19070977,19136513,19202050,19333126,19398666,19464194,19529731,19595265,19660801,19726341,19791876,19922945,19988481,20054022,20119553,20250626,20316162,20447234,20512773,20643841,20709377,20774913,20971522,21037058,21102594,21233666,21299206,21364737,21430274,21495809,21626881,21757953,21823490,21889026,22085634,22216706,22282241,22413313,22478849,22544386,22609922,22806530,22937601,23003137,23068674,23134209,23199745,23265281,23396354,23461889,23527425,23592965,23658497,23724033,23789572,23920642,23986177,24051713,24117249,24182785,24248321,24379393,24444929,24576001,24641538,24707073,24772609,24838145,24903681,24969217,25100289,25165825,25296897,25362433,25493505,25559041,25624577,25755649,25821185,25952258,26017793,26083329,26148865,26279938,26345473,26411009,26476546,26542081,26607617,26804226,26869762,26935297,27000834,27066369,27131905,27197444,27262977,27394049,27525121,27656194,27721729,27787265,27918337,27983873,28049409,28180482,28246018,28311553,28377089,28442625,28573697,28704769,28770306,28901378,28966913,29032449,29229058,29294593,29491201,29556737,29622274,29753345,29949953,30081025,30146561,30212097,30277633,30343169,30474242,30539777,30605313,30670849,30736385,30801922,30867460,30932993,30998529,31064065,31195137,31260674,31326209,31391745,31457281,31588356,31653890,31784961,31916034,31981569,32047105,32112644,32178177,32374785,32440321,32505857,32636929,32768001,32899073,32964612,33030145,33095681,33226753,33292289,33357825,33423361,33488897,33619969,33751041,33882113,33947649,34013185,34078721,34209793,34340865,34406401,34603009,34668545,34865153,34930689,35061761,35192833,35258369,35323905,35520514,35586049,35717121,35782657,35848193,35913729,35979265,36110337,36175873,36241409,36372481,36438017,36569089,36765697,36831233,36962305,37158913,37289985,37355521,37421057,37748737,37879809,37945345,38010887,38076417,38273029,38600705,38666241,38731777,38862849,39059461,39452673,39649281,39714817,40042498,40370177,40632325,40763393,40894465,41222146,41746433,42074119,42205189,42336258,42467329,42795009,42926081,43122693,43778051,43909125,44171266,44367874,44695553,44957701,45088773,45154305,45744129,45875202,46268421,46333956,47054850,47316994,47775749,47906819,48300033,48889857,50003969,51052548,51314689,51642370,52166657,52822018,53280770,53411842,53477378,53870594,54001667,54525953,54591490,54722566,55246849,55705614,56492035,56950786,57278465,57802753,58064897,58195973,58327045,58392581,58654721,58916865,59375617,59506692,59637762,59834369,60096517,60162049,60227599,60293121,60358660,60424193,60751873,60817415,60882949,61014017,61407237,61538309,61603845,61669380],"marshaling":[59965441,60817409],"modified":[9306113],"maximum":[16056321,16711681,17301505,17432577,17498113,18219009,35389441,38404098,38993925,39583746,39780353,40697857,42074114,43384834,45023234,50724865,51511297,51773441,52101121,52690946,53084161,53149698,53346305,53542914,54263810,54460417,58261506,58523649,58589189,59899905,60817410],"marshalunsafelongasbigint":[61145089],"maxnewspacesize":[38993921,53149700,54263812,58589185],"mustoverride":[7274497,20316161,20971521,21626881,22282241,23527425,23592961,23986177,24117249,24182785,24707073,24903681,25296897,30539777,44302337,45285377,47579137,48758785,51183617,55050241,55771137,56360961,56885249,57409537],"marshaldatetimeasdate":[61669377],"merged":[13828097,19398657],"mscorlib":[7143425,8060929],"marshal":[26476545],"mapping":[8126465,8454145,9437185,9502721,10092545,10354689,11141121,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13303809,13369345,13500417,13697025,13828097,13959169,14024705,14090241,14155777,14286849,14417921,14483457,14876673,14942209,15007745,15138817,15269889,15597569,15925249,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19136513,19398657,19660801,19922945,19988481,20119553,20643841,20709377,20774913,21037057,21364737,21430273,21495809,21889025,22413313,22478849,22609921,23199745,23265281,23396353,24248321,25100289],"modulecategory":[38535169,41484290,47448065,48037889,52428806],"mustinherit":[53084161,55705601,56229889,57671681,58195969,59310081,59703297,59899905,60227585,60882945,61603841],"missing":[50528257,51838977,60555265],"member":[720897,917505,3014662,3538945,4521989,6750209,6815745,6946820,7012353,7077889,7143425,7405569,7471105,7602177,7733249,7864321,7929857,8060929,7995393,8126465,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8847361,8912897,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11337729,11468801,11534337,11599873,11665409,11730945,11862017,12058625,12124161,12189697,12255233,12451841,12517377,12582913,12910593,13565953,13828098,16252929,16515073,17104897,17825793,18153473,18284545,18546689,18808833,19005441,19333121,19398658,19726337,20054017,20512769,20905986,21299201,21561347,22347781,22872068,22937601,23134209,23330817,23461889,23724033,23855106,24051713,24444929,24510468,24772609,24838145,24969217,25034755,25165825,25362433,25493505,25559041,25624577,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26279937,26345473,26411009,26476545,26542081,26607617,26804225,26869761,27000833,26935297,27066369,27131905,27262977,27394049,27525121,27656193,27721729,27787265,27983873,28049409,28180481,28311553,28377089,28442625,28573697,28704769,28901377,28966913,29032449,29229057,29294593,29491201,29556737,29622273,29753345,29949953,30081025,30146561,30343169,30736385,30998529,31326209,31391745,31981569,32178177,32768001,33095681,34013185,34930689,35651585,35848193,36569089,37879809,38010883,38731777,39452673,40108033,40894465,41549825,41746433,42270721,42598401,42860545,42926081,43319297,43843585,43974657,44498945,44695553,45023233,45088769,45547521,46071809,46661633,46792705,46923780,47251457,47382529,47448065,47972353,48037889,48431105,48562177,49086465,49217537,49479681,49807361,49872897,50069505,50200577,50266113,50331649,50462723,50593793,50724865,50855937,50987009,51118081,51249153,51380225,51511297,51707905,51773441,52035585,52101121,52232193,52363265,52494338,52559873,52625409,52690945,52756481,52822017,52887553,53018625,53149697,53215233,53280769,53346305,53542913,53608449,53739521,53936129,54132737,54198273,54263809,54394881,54460417,54591492,54657025,54722562,54788097,54853633,54919169,54984705,55181313,55443457,55508993,55574529,55640065,55705606,56033281,56098817,56164353,56557569,56688641,56950788,57081857,57147393,57344001,57475073,57540609,57606146,57737217,57868289,58195969,59179009,59441153,59506693,59572225,59637762,59965441,60227589,60358658,60620801,60686337,61145089,61210625,61341697,61669377],"maxruntimestackusage":[42074113,50724868,60817409],"multiplication":[3014657,4521985,55705601,60227585],"merges":[5046273,7143425,30932993,58785793],"makes":[55377921,61145089],"min_safe_integer":[61145089],"managed":[2949122,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,18153474,18874370,19005442,36110337,36831233,38273026,40763393,43122690,58195969,58392577,59441153,60096513,60817409,60882945,61079554,61145089,61407233,61538305,61603841,61669377],"microsoft":[65539,131075,196611,262147,327683,393219,458755,524291,589828,655363,720900,786435,851971,917508,1048580,1114116,1179652,1245188,1376260,1441796,1507332,1572867,1638403,1703939,1769475,1900547,1835011,1966083,2031619,2097155,2293763,2359299,2424835,2490371,2555907,2621443,2686979,2752515,2818051,2162691,2228227,2883587,2949123,3014659,3080195,3145731,3211267,3276803,3342339,3407875,3473411,3538947,3604483,3670019,3735555,3801091,3866627,3932163,3997699,4063235,4128771,4194307,4259843,4325379,4390915,4456451,4521987,4587523,4653059,4718595,4784131,4849667,4915204,4980739,5046275,5111811,5177347,5242884,5308420,5373956,5439491,5505028,5570564,5636100,5701636,5767172,5832708,5898244,5963780,6029316,6094852,6160388,6225924,6291459,6356995,6422532,6488068,6553603,6619140,6684676,6750212,6815748,6881283,6946820,7012356,7077892,7143428,7208963,7274500,7340036,7405572,7471108,7536643,7602180,7667716,7733252,7798787,7864324,7929860,7995396,8060932,8126468,8192004,8257540,8323076,8388612,8454148,8519684,8585220,8650756,8716291,8781828,8847364,8912900,8978435,9043972,9109508,9175044,9240580,9306116,9371652,9437188,9502724,9568260,9633796,9699332,9764868,9830404,9895940,9961476,10027012,10092548,10158084,10223620,10289156,10354692,10420228,10485764,10551300,10616836,10682372,10747908,10813444,10878980,10944516,11010052,11075588,11141124,11206660,11272196,11337732,11403268,11468804,11534340,11599876,11665412,11730948,11796484,11862020,11927556,11993092,12058628,12124164,12189700,12255236,12320772,12386308,12451844,12517380,12582916,12648452,12713988,12779524,12845060,12910596,12976132,13041668,13107204,13172740,13238276,13303812,13369348,13434884,13500420,13565956,13631492,13697028,13762564,13828100,13893636,13959172,14024708,14090244,14155780,14221316,14286852,14352388,14417924,14483460,14548996,14614532,14680068,14745604,14811140,14876676,14942212,15007748,15073284,15138820,15204356,15269892,15335428,15400964,15466500,15532036,15597572,15663108,15728644,15794180,15859716,15925252,15990788,16056324,16121860,16187396,16252932,16318468,16384004,16515076,16449540,16580612,16646148,16711684,16777220,16842756,16908292,16973828,17039364,17104900,17170436,17235972,17301508,17367044,17432580,17498116,17563652,17629188,17694724,17760260,17825796,17891332,17956868,18022404,18087940,18153476,18219012,18284548,18350084,18415620,18481156,18546692,18612228,18677764,18743300,18808836,18874372,18939908,19005444,19070980,19136516,19202052,19267588,19333124,19398660,19464196,19529732,19595268,19660804,19726340,19791876,19857412,19922948,19988484,20054020,20119556,20185092,20250628,20316164,20381700,20447236,20512772,20578308,20643844,20709380,20774916,20840452,20905988,20971524,21037060,21102596,21168132,21233668,21299204,21364740,21430276,21495812,21561348,21626884,21692420,21757956,21823492,21889028,21954564,22020100,22085636,22151172,22216708,22282244,22347780,22413316,22478852,22544388,22609924,22675460,22740996,22806532,22872068,22937604,23003140,23068676,23134212,23199748,23265284,23330820,23396356,23461892,23527428,23592964,23658500,23724036,23789572,23855108,23920644,23986180,24051716,24117252,24182788,24248324,24313860,24379396,24444932,24510468,24576004,24641540,24707076,24772612,24838148,24903684,24969220,25034756,25100292,25165828,25231364,25296900,25362436,25427972,25493508,25559044,25624580,25690116,25755652,25821188,25886724,25952260,26017796,26083332,26148868,26214404,26279940,26345476,26411012,26476548,26542084,26607620,26673156,26738692,26804228,26869764,27000836,26935300,27066372,27131908,27197444,27262980,27328516,27394052,27459588,27525124,27590660,27656196,27721732,27787268,27852804,27918340,27983876,28049412,28114948,28180484,28246020,28311556,28377092,28442628,28508164,28573700,28639236,28704772,28770308,28835844,28901380,28966916,29032452,29097988,29163524,29229060,29294596,29360132,29425668,29491204,29556740,29622276,29687812,29753348,29818884,29884420,29949956,30015492,30081028,30146564,30212100,30277636,30343172,30408708,30474244,30539780,30605316,30670851,30736388,30801924,30867460,30932995,30998532,31064067,31129604,31195140,31260676,31326212,31391748,31457283,31522820,31588356,31653892,31719427,31784963,31850500,31916036,31981572,32047107,32112644,32178180,32243716,32309252,32374787,32440323,32505859,32571395,32636932,32702468,32768004,32833540,32899075,32964612,33030147,33095684,33161220,33226756,33292291,33357827,33423363,33488899,33554436,33619971,33685508,33751043,33816579,33882115,33947652,34013188,34144260,34078723,34209795,34275332,34340867,34406403,34471939,34537475,34603011,34668547,34734084,34799619,34865155,34930692,34996227,35061763,35127300,35192835,35258371,35323907,35389443,35454980,35520516,35586051,35651587,35717123,35782659,35848196,35913731,35979267,36044804,36110339,36175875,36241411,36306948,36372483,36438019,36503556,36569092,36634627,36700163,36765699,36831235,36896771,36962307,37027843,37093379,37158915,37224452,37289987,37355523,37421059,37486596,37552131,37617667,37683203,37748739,37814275,37879812,37945347,38010884,38076419,38141955,38207492,38273028,38338563,38469636,38404099,38535172,38600707,38666243,38731780,38797315,38862851,38928387,38993923,39059459,39124995,39190532,39321604,39256067,39387139,39452676,39518211,39583748,39649283,39714819,39780355,39845892,39911427,39976964,40042500,40108036,40173571,40239107,40304643,40370179,40435715,40501252,40566788,40697859,40632323,40763395,40828932,40894468,40960004,41025540,41091075,41156611,41222147,41287683,41353220,41418755,41484291,41549828,41615364,41680900,41746436,41811971,41877507,42008579,42074115,42139652,42205187,42270724,42336260,42401796,42467332,42532867,42598403,42663940,42729476,42795012,42860548,42926084,42991620,43057156,43122692,43188227,43253764,43319300,43384836,43450372,43515908,43581444,43646980,43712516,43778052,43843588,43909123,43974660,44040196,44105732,44171268,44236804,44302340,44367876,44433412,44498948,44564484,44630020,44695556,44761092,44826628,44892164,44957699,45023236,45154308,45088771,45219844,45285380,45350916,45416451,45481988,45547524,45613060,45678596,45744131,45809667,45875204,45940740,46006276,46071812,46137347,46202883,46268419,46333956,46399492,46465028,46530564,46596099,46661636,46727172,46792708,46858243,46923779,46989316,47054852,47120387,47185924,47251460,47316996,47382532,47448068,47513604,47579140,47644675,47710212,47775747,47841284,47906820,47972355,48037892,48103428,48168964,48234500,48300036,48365571,48431108,48496644,48562180,48627716,48693252,48758788,48824323,48889860,48955396,49020932,49086468,49152004,49217540,49283076,49348612,49414148,49479684,49545220,49610756,49676292,49741828,49807364,49872900,49938436,50003972,50069508,50135044,50200580,50266116,50331652,50397188,50462724,50528260,50593796,50659332,50724868,50790404,50855940,50921476,50987012,51052548,51118084,51183620,51249156,51314692,51380228,51445764,51511300,51576837,51642372,51707908,51773444,51838980,51904516,51970052,52035588,52101124,52166660,52232196,52297732,52363268,52428805,52494340,52559876,52625412,52690948,52756484,52822020,52887556,52953092,53018628,53084166,53149700,53215236,53280772,53346308,53411844,53477382,53542916,53608452,53673989,53739524,53805060,53870597,53936132,54001668,54067206,54132740,54198276,54263812,54329348,54394884,54460420,54525956,54591492,54657028,54722566,54788100,54853636,54919172,54984708,55050244,55115781,55181316,55246853,55312389,55377932,55443460,55508996,55574532,55640068,55705605,55771140,55836677,55902213,55967748,56033284,56098820,56164356,56229894,56295428,56360964,56426503,56492037,56557572,56623108,56688644,56754181,56819716,56885252,56950788,57016324,57081860,57147396,57212934,57278468,57344004,57409540,57475076,57540612,57606148,57671686,57737220,57802756,57868292,57933830,57999366,58064900,58130437,58195975,58261509,58327044,58392583,58458116,58523654,58589189,58654725,58720261,58785798,58851333,58916868,58982405,59047941,59113478,59179012,59244549,59310086,59375620,59441156,59506694,59572228,59637764,59703301,59768838,59834372,59899909,59965444,60030981,60096519,60162052,60227589,60293124,60358663,60424196,60489734,60555269,60620804,60686340,60751876,60817414,60882953,60948484,61014020,61079557,61145092,61210628,61276165,61341700,61407240,61472773,61538312,61603849,61669380],"machine":[8650753],"manipulate":[10944513],"mechanisms":[59441153],"modules":[38535169,41484290,47251457,47448065,48037889,52428803,54853633],"maxcachesize":[35389442,39583749,39780353,40697857,43384837,45023237,53084161,58523650,59899905],"marshaldecimalascurrency":[61669377],"mentioned":[13631489,23789569],"mechanism":[41549825,47251457,61669377],"management":[61669377]} \ No newline at end of file +{"movenextasync":[4063233,28377092,80936961],"marshalallint64asbigint":[76939267],"marshalalllongasbigint":[76939265],"manner":[11272193],"memory":[7077889,11010049,14876675,16318467,16973827,18874371,19070979,19136515,20905987,22020099,36241409,36372481,37486594,37945345,38273025,39387137,39518209,40239105,43515905,43581441,44433409,45547521,49545217,49741825,50724866,51511297,52625409,55246851,61014017,66191361,69730305,70975489,71041027,72155138,72220675,73859073,75366401,76087297,76152833,76939265,77398020,79233025,79757313,80674817],"method":[2097153,2752513,2818049,3276801,3342350,3473409,3866625,3997697,4390913,4980738,5570561,5701633,5767172,5963791,6029313,6291457,6356994,6619138,6684674,6815746,7208961,7405569,7471105,7536641,7602177,7733249,7798785,7929857,7995393,8060933,8192005,8257537,8323077,8388609,8454145,8519681,8585217,8650754,8781829,8847361,8912897,8978433,9043969,9109505,9175041,9568257,9633793,9699329,9764865,9961473,10027009,10092549,10158081,10223617,10289153,10354689,10420229,10485761,10551297,10616834,10682369,10747905,10813441,10878978,10944513,11075585,11141121,11272193,11337729,11468801,11534337,11599873,11665410,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12386305,12451841,12517377,12582913,12713985,12779521,12845057,12910593,13041665,13107201,13172737,13238273,13303811,13434881,13500417,13565953,13631489,13697025,13828097,13893633,13959171,14024705,14090241,14155778,14221313,14286849,14352385,14417922,14483458,14548994,14680065,14745601,14811137,14876674,14942210,15007745,15073281,15204353,15269890,15335426,15400961,15466498,15532033,15597569,15663106,15728642,15794177,15859713,15925249,15990785,16056321,16121857,16187394,16252933,16318466,16384002,16449537,16515074,16580611,16646145,16711690,16777217,16842753,16908289,16973826,17039365,17104898,17170437,17235969,17301505,17432577,17498113,17629185,17760257,17825793,17891330,17956869,18022402,18087937,18153473,18219012,18284545,18350081,18415621,18546689,18677761,18743297,18808838,18874370,18939905,19005441,19070978,19136514,19202049,19333121,19398661,19464194,19529729,19595265,19726337,19791873,19857410,19922950,19988481,20054022,20119553,20185089,20250626,20316161,20381698,20447233,20512769,20578305,20643841,20774913,20840449,20905986,21037058,21102594,21168129,21233669,21299201,21364738,21430277,21495809,21561346,21626882,21692417,21757956,21889025,21954561,22020098,22216705,22282241,22347777,22413313,22478849,22544385,22609922,22675457,22872066,22937601,23003139,23068673,23199754,23265281,23461889,23527425,23592961,23658498,23789569,23855106,23920641,23986177,24117249,24182785,24248321,24313858,24379393,24444929,24510465,24576002,24641538,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25231365,25296897,25362433,25427970,25493505,25559041,25624578,25690113,25821185,25886722,26017794,26083329,26148865,26214401,26279938,26345473,26411009,26476545,26542084,26607618,26673153,26738690,26804226,26869762,26935301,27000833,27066369,27131905,27328513,27459585,27525121,27590657,27656194,27721729,27787266,27852802,27918337,27983874,28049409,28114949,28246017,28180481,28377089,28442626,28508161,28573698,28639234,28704769,28770305,28835841,28901377,29032450,29097986,29163524,29229058,29294594,29360130,29425666,29491201,29556737,29622274,29687809,29753345,29818882,29884418,29949953,30015490,30081025,30146562,30212097,30277634,30343169,30408705,30474241,30539777,30605313,30670850,30736386,30801922,30867457,30932994,30998530,31064066,31129601,31195137,31260673,31326209,31391745,31522817,31588353,31653889,31719426,31784961,31850497,31916033,31981570,32047106,32112642,32178178,32243713,32309250,32374786,32440322,32571393,32636929,32702465,32768002,32833538,32964609,33030145,33095681,33226753,33292289,33357825,33423361,33488897,33619975,33685505,33751041,33816577,33882116,33947649,34078722,34209794,34275330,34340865,34406402,34471942,34537473,34603009,34668553,34865153,34930689,35127301,35323911,35389441,35454977,35520513,35586049,35651586,35717121,35848193,35913729,35979265,36044801,36175873,36241409,36306945,36372481,36503553,36569089,36634625,36700162,36831233,37093378,37158920,37224449,37289985,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879810,37945345,38010881,38076417,38207489,38273025,38338561,38404098,38600710,38666242,38797313,38862849,38928392,39059458,39124993,39190529,39256066,39321601,39387137,39452674,39518209,39583745,39780354,39845893,39911428,39976961,40042497,40108033,40173569,40239105,40370182,40435713,40501249,40566785,40632322,40697858,40828930,40894465,41025537,41156609,41222145,41287681,41353221,41418753,41484290,41549825,41615362,41746433,42008577,42074113,42139650,42205186,42401793,42467329,42598401,42663937,42729473,42795009,42860545,42926081,43057153,43122689,43188225,43319298,43450373,43515905,43581441,43646977,43712516,43778050,43843588,43909121,44040193,44171265,44302337,44367873,44433409,44564484,44630017,44695553,44826625,44957702,45023233,45088769,45154305,45285378,45350913,45416449,45481986,45613060,45547527,45678593,45744129,45875201,45940737,46137345,46202881,46268417,46333954,46399489,46465025,46596097,46661633,46727169,46792706,46858241,46923777,46989317,47120386,47513601,47579137,47644673,47710209,47775745,47841281,47906817,48037889,48168961,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48955395,49020929,49152001,49217537,49283076,49348609,49479681,49610753,49676289,49741825,49807361,49872900,49938433,50003969,50135042,50266113,50397185,50462721,50659329,50724865,50790401,50855937,50987009,51052545,51118082,51183617,51249153,51314689,51380228,51445761,51511297,51642369,51707914,51773441,51838977,51904513,51970049,52035585,52166657,52428802,52625409,52756482,52822017,52887553,53018625,53215233,53346305,53411841,53477377,53739521,53870593,54067201,54263809,54329345,54460417,54591489,54722561,54853633,54984705,55050241,55115777,55181313,55377921,56098817,56164353,56557569,56623105,56688644,56754177,57016321,57081857,57212929,57278465,57409537,57737221,57802753,57868290,58064897,58130437,58523650,58654726,58720257,58851329,58916867,60293127,60358657,60620801,61341697,61407237,61669377,61865985,62193669,62259202,62652417,62980097,63045637,63963137,64159746,64225281,64290819,64421890,64618497,64684037,65077250,65273861,65667073,66650116,67764225,68878338,69140482,69337089,69533701,72286210,72417283,72548353,72679425,73138177,73990146,74317826,74514434,74645505,74842118,74973187,75104261,75235330,75431940,75497473,75563010,75890689,76021762,76087303,76283905,76808193,76939265,77135873,77266945,77594625,77725697,77856773,78053377,78184449,78512133,78577665,78643201,78708739,78970881,79036417,79167492,79298561,79364097,79429634,79495169,79822849,79888386,79953925,80085007,80216068,80281605,80412676,80543758,80609285,81002501,81068037,81199105,81264645],"maxruntimestackusage":[60293121,71827460,76087297],"make":[6422530,7143426,19660802,20971522],"multiplier":[61014017,70975491,76152833],"mutable":[393217,524289,327681,69337089,78249985,79298561],"maxoldspacesize":[61014017,64094212,67829764,71041025,72220673,76152833],"mustinherit":[68943873,71172097,72613889,75431937,76480513,77266945,77332481,77856769,78577665,79691777,79953921,80084993,80543745,81068033],"marshal":[47120385],"mscorlib":[7995393,9109505],"making":[76939265],"maxarraybufferallocation":[61014017,71041025,72155140,72220673,76152833],"meta":[3735554,5373954,7077892,7405569,8716290,9043969,9306114,9502722,9633793,9699329,9830402,10682369,10813441,11010053,11206658,11403266,11993089,14942210,18022402,21561346,23330817,24313858,39518210,40173570,41418754,43515905,43909121,45547521,46858242,48365570,48496641,50003971,50987010,52822017,53018625,53870593,54001665,54460418,54853636,56426497,57409537,58261505,61734914,61931522,62914561,69337090,71172097,72482817,75104258,75366404,75825153,76087301,76480513,77725697,77856770,78512130,78839809,79298562,79953922,80281602,80674817,81002498,81068034,81264642],"manage":[7405569,9043969,10682369],"microsoft":[2,393218,131073,524290,589825,262145,655362,720897,327682,786434,851969,917506,983042,1048577,1114114,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2359298,2228225,2818049,2490369,2293761,2752513,2424833,2686977,2555905,2883585,2621441,2949121,3014657,3080193,3145729,3211265,3276801,3407873,3342337,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4653057,4587521,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505026,5570561,5636097,5701633,5832706,5963777,5898241,5767169,6029314,6094849,6160385,6225922,6291458,6356994,6422530,6488066,6553601,6619138,6684674,6750210,6815746,6881282,6946817,7012354,7077889,7143426,7208962,7274498,7340033,7405570,7471106,7536642,7602178,7667714,7733250,7798786,7864321,7929858,7995394,8060930,8126466,8192002,8257538,8323074,8388610,8454146,8519682,8585218,8650754,8781826,8716289,8847362,8912898,8978434,9043970,9109506,9175042,9240577,9306113,9371650,9437186,9502721,9568258,9633794,9699330,9764866,9830401,9895937,9961474,10027010,10092546,10158082,10223618,10289154,10354690,10420226,10485762,10551298,10616834,10682370,10747906,10813442,10878978,10944514,11010049,11075586,11141122,11272194,11206657,11337730,11403265,11468802,11534338,11599874,11665410,11730946,11796482,11862018,11927554,11993090,12058626,12124162,12189698,12255234,12320769,12386306,12451842,12517378,12582914,12648450,12713986,12779522,12845058,12910594,12976130,13041666,13107202,13172738,13238274,13303810,13369346,13434882,13500418,13565954,13631490,13697026,13762562,13828098,13893634,13959170,14024706,14090242,14155778,14221314,14286850,14352386,14417922,14483458,14548994,14614530,14680066,14745602,14811138,14876674,14942210,15007746,15073282,15138818,15204354,15269890,15335426,15400962,15466498,15532034,15597570,15663106,15728642,15794178,15859714,15925250,15990786,16056322,16121858,16187394,16252930,16318466,16384002,16449538,16515074,16580610,16646146,16711682,16777218,16842754,16908290,16973826,17039362,17104898,17170434,17235970,17301506,17367042,17432578,17498114,17563650,17629186,17694722,17760258,17825794,17891330,17956866,18022402,18087938,18153474,18219010,18284546,18350082,18415618,18481154,18546690,18612226,18677762,18743298,18808834,18874370,18939906,19005442,19070978,19136514,19202050,19267586,19333122,19398658,19464194,19529730,19595266,19660802,19726338,19791874,19857410,19922946,19988482,20054018,20119554,20185090,20250626,20316162,20381698,20447234,20512770,20578306,20643842,20709378,20774914,20840450,20905986,20971522,21037058,21102594,21168130,21233666,21299202,21364738,21430274,21495810,21561346,21626882,21692418,21757954,21823490,21889026,21954562,22020098,22085634,22151170,22216706,22282242,22347778,22413314,22478850,22544386,22609922,22675458,22740994,22806530,22872066,22937602,23003138,23068674,23134210,23199746,23265282,23330818,23396354,23461890,23527426,23592962,23658498,23724034,23789570,23855106,23920642,23986178,24051714,24117250,24182786,24248322,24313858,24379394,24444930,24510466,24576002,24641538,24707074,24772610,24838146,24903682,24969218,25034754,25100290,25165826,25231362,25296898,25362434,25427970,25493506,25559042,25624578,25690114,25755650,25821186,25886722,25952258,26017794,26083330,26148866,26214402,26279938,26345474,26411010,26476546,26542082,26607618,26673154,26738690,26804226,26869762,26935298,27000834,27066370,27131906,27197442,27262978,27328514,27394050,27459586,27525122,27590658,27656194,27721730,27787266,27852802,27918338,27983874,28049410,28114946,28246018,28180482,28311554,28377090,28442626,28508162,28573698,28639234,28704770,28770306,28835842,28901378,28966914,29032450,29097986,29163522,29229058,29294594,29360130,29425666,29491202,29556738,29622274,29687810,29753346,29818882,29884418,29949954,30015490,30081026,30146562,30212098,30277634,30343170,30408706,30474242,30539778,30605314,30670850,30736386,30801922,30867458,30932994,30998530,31064066,31129602,31195138,31260674,31326210,31391746,31457282,31522818,31588354,31653890,31719426,31784962,31850498,31916034,31981570,32047106,32112642,32178178,32243714,32309250,32374786,32440322,32505858,32571394,32636930,32702466,32768002,32833538,32899074,32964610,33030146,33095682,33161218,33226754,33292290,33357826,33423362,33488898,33554434,33619970,33685506,33751042,33816578,33882114,33947650,34013186,34078722,34144258,34209794,34275330,34340866,34406402,34471938,34537474,34603010,34668546,34734082,34799618,34865154,34930690,34996226,35061762,35127298,35192834,35258370,35323906,35389442,35454978,35520514,35586050,35651586,35717122,35782658,35848194,35913730,35979266,36044802,36110338,36175874,36241410,36306946,36372482,36438018,36503554,36569090,36634626,36700162,36765698,36831234,36896770,36962306,37027842,37093378,37158914,37224450,37289986,37355522,37421058,37486594,37552130,37617666,37683202,37748738,37814274,37879810,37945346,38010882,38076418,38141954,38207490,38273026,38338562,38404098,38469634,38535170,38600706,38666242,38731778,38797314,38862850,38928386,38993922,39059458,39124994,39190530,39256066,39321602,39387138,39452674,39518210,39583746,39649282,39714818,39780354,39845890,39911426,39976962,40042498,40108034,40173570,40239106,40304642,40370178,40435714,40501250,40566786,40632322,40697858,40763394,40828930,40894466,40960002,41025538,41091074,41156610,41222146,41287682,41353218,41418754,41484290,41549826,41615362,41680898,41746434,41811970,41877506,41943042,42008578,42074114,42139650,42205186,42270722,42336258,42401794,42467330,42532866,42598402,42663938,42729474,42795010,42860546,42926082,42991618,43057154,43122690,43188226,43253762,43319298,43384834,43450370,43515906,43581442,43646977,43712514,43778050,43843586,43909121,43974657,44040194,44105729,44171266,44236802,44302338,44367874,44433410,44498946,44564482,44630018,44695553,44761090,44826625,44892162,44957698,45023234,45088770,45154305,45219842,45285378,45350913,45416450,45481986,45547522,45613058,45678593,45744130,45809666,45875202,45940737,46006273,46071809,46137346,46202881,46268417,46333954,46399489,46465026,46530562,46596097,46661633,46727169,46792706,46858242,46923777,46989314,47054850,47120386,47185922,47251458,47316994,47382529,47448065,47513602,47579137,47644674,47710209,47775745,47841281,47906817,47972353,48037890,48103426,48168961,48234498,48300033,48365570,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889858,48955394,49020929,49086466,49152001,49217538,49283074,49348609,49414146,49479681,49545218,49610753,49676289,49741826,49807362,49872898,49938433,50003969,50069505,50135042,50200577,50266113,50331650,50397185,50462721,50528258,50593794,50659330,50724866,50790402,50855937,50921474,50987010,51052545,51118082,51183617,51249153,51314689,51380226,51445761,51511298,51576833,51642369,51707906,51773441,51838977,51904513,51970050,52035585,52101122,52166657,52232194,52297730,52363265,52428802,52494337,52559874,52625410,52690945,52756481,52822017,52887553,52953090,53018625,53084161,53149698,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673986,53739521,53805057,53870593,53936129,54001665,54067201,54132738,54198274,54263809,54329345,54394881,54460418,54525953,54591490,54657025,54722561,54788097,54853633,54919170,54984706,55050241,55115777,55181313,55246849,55312385,55377921,55443457,55508994,55574529,55640065,55705601,55771138,55836673,55902209,55967745,56033282,56098817,56164353,56229890,56295425,56360962,56426497,56492033,56557569,56623105,56688642,56754177,56819713,56885249,56950786,57016322,57081857,57147394,57212929,57278466,57344002,57409537,57475074,57540609,57606145,57671681,57737217,57802753,57868290,57933825,57999362,58064897,58130433,58195970,58261505,58327042,58392578,58458114,58523650,58589185,58654721,58785794,58720257,58851329,58916866,58982402,59047937,59113473,59179010,59244545,59310082,59375617,59441154,59506690,59572226,59637762,59703298,59768834,59834369,59899906,59965442,60030978,60096514,60162050,60227585,60293121,60358657,60489730,60424193,60555266,60620802,60686338,60751873,60817410,60882946,60948482,61014017,61079554,61145090,61210625,61276161,61341698,61407233,61472770,61538305,61669378,61734914,61800449,61865986,61931522,61997057,62062594,62128130,62193665,62259202,62324738,62390274,62455809,62521346,62586882,62652417,62717954,62783489,62849026,62914562,62980097,63045633,63111170,63176706,63242242,63307778,63373314,63438850,63504386,63569922,63635458,63700994,63766530,63832066,63897601,63963138,64028674,64094210,64159746,64225282,64290818,64356353,64421890,64487426,64552962,64618497,64684033,64749570,64815106,64880642,64946178,65011714,65077250,65142786,65208322,65273857,65339394,65404930,65470465,65536002,65601538,65732610,65667074,65798146,65863681,65929218,65994754,66060290,66125826,66191362,66256898,66322434,66387970,66453506,66519042,66584578,66650114,66715650,66781185,66846722,66912258,66977794,67043330,67108866,67174402,67239938,67305474,67371010,67436546,67502082,67567618,67633153,67698690,67764226,67829762,67895298,67960834,68026370,68091906,68157441,68222978,68288514,68354050,68419586,68485122,68550658,68616194,68681730,68747266,68812802,68878338,68943876,69009410,69074946,69140482,69206018,69271554,69337090,69402626,69468162,69533697,69599234,69664770,69730306,69795842,69861378,69926914,69992451,70057986,70123522,70189058,70254594,70320130,70385666,70451202,70516738,70582273,70647810,70713346,70778882,70844418,70909956,70975490,71041026,71106562,71172099,71237634,71303170,71368708,71434242,71499778,71565314,71630850,71696386,71761923,71827458,71892994,71958531,72024066,72089602,72155138,72220674,72286210,72351746,72417285,72482818,72548355,72613892,72679426,72744962,72810498,72876034,72941570,73007106,73072642,73138178,73203714,73269250,73334786,73400322,73465858,73531396,73596930,73662466,73728002,73793538,73859074,73924610,73990148,74055682,74121220,74186754,74252290,74317826,74383362,74448898,74514437,74579970,74645506,74711043,74776588,74842116,74907650,74973186,75038723,75104262,75169796,75235330,75300866,75366403,75431939,75497474,75563010,75628549,75694082,75759620,75825154,75890690,75956228,76021762,76087300,76152835,76218370,76283906,76349443,76414978,76480516,76546051,76611586,76677123,76742661,76808194,76873730,76939266,77004802,77070338,77135874,77201411,77266948,77332483,77398019,77463554,77529091,77594627,77660162,77725698,77791234,77856773,77922306,77987844,78053378,78118914,78184450,78249987,78315522,78381058,78446594,78512130,78577668,78643202,78708739,78774275,78839811,78905346,78970883,79036418,79101954,79167492,79233026,79298562,79364099,79429634,79495170,79560706,79626245,79691780,79757314,79822850,79888387,79953927,80019459,80084995,80150530,80216069,80281605,80347139,80412674,80478213,80543747,80609282,80674820,80740355,80805891,80871427,80936962,81002501,81068039,81133570,81199106,81264646,81330179],"multiple":[13303809,35389441,35520513,36044801,36175873,36241409,36372481,37289985,37552129,37748737,37945345,38076417,38207489,38273025,39387137,39518209,40042497,40108033,40173569,40239105,40435713,40894465,41025537,41287681,41418753,42074113,42401793,42467329,42598401,43057153,43122689,43515905,43581441,44040193,44302337,44433409,45023233,45744129,45875201,46858241,47513601,48037889,48365569,49217537,49545217,49741825,49807361,50659329,50987009,51970049,52625409,54460417,54984705,57016321,68419585,71172097],"min_safe_integer":[76939265],"message":[19267591,20709383,25755655,27262983,46006274,54788098,56950785,60358659,62455811,62980099,67108870,69664769,72548357,73334785,78905347,78970885],"marshalunsafeint64asbigint":[76939266],"management":[80412673],"max_safe_integer":[76939265],"multiplication":[3342337,5963777,80084993,80543745],"minimum":[59834369,60293121,68354049,72810497,75366401,76087297],"modified":[11075585,34406401,39976961,45285377,70385665],"malicious":[70975489],"maintains":[54198273],"memberwiseclone":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"makes":[74776577,76939265],"mechanisms":[77660161,77791233],"mentioned":[18219009,26542081],"modulecategory":[48103425,65470466,68616193,70123521,71958534],"maxyoungspacesize":[61014017,69402628,76152833],"members":[131073,589825,262145,720897,851969,1048577,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5570561,5636097,5701633,5767169,5963777,5898241,6094849,6160385,6488065,6553601,6946817,7077889,7340033,7864321,8192001,8323073,8454146,8716289,8978434,9240577,9306113,9502721,9830401,9895937,10092545,10158081,10354690,10420225,10878977,11010049,11206657,11272196,11337729,11403265,11468801,12320769,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14286850,14352386,14417922,14745601,14811137,15073281,15335426,15400961,15466498,15597569,15794178,15859713,15925250,16711682,17235969,17301505,17760258,17825793,17891331,18087937,18284545,18546689,19202049,19988481,20119553,20250627,20316161,20381698,20512770,20578305,20774913,21102595,21495809,21692418,22216705,22478849,22544386,22609923,22937601,23199746,23527425,23592961,24117250,24182785,24379393,24903682,25100289,26017794,26476546,27066370,27983874,45547524,52690945,52756481,53084161,53280769,53542913,53608449,53805057,53936129,54001665,54394881,54525953,54657025,55246849,55574529,55640065,55705601,55902209,56033281,56426497,56492033,56557569,56819713,56885249,57278465,57540609,57606145,57671682,57737219,58130435,58261505,58589185,59113473,59244545,59375617,59834369,60227585,60293123,60358657,60751873,61014017,61210625,61276161,61407235,61538305,61800449,61997057,62193667,62259202,62324738,62455809,62717953,62783489,62980097,63045635,63897601,63963137,64356353,64684035,65273859,65470465,65863681,66781186,67043330,67633153,68157441,68419586,68943873,69533699,69861377,69992449,70320129,70582273,70909953,71172097,71303169,71368705,71499777,71761921,71958529,72024065,72286210,72417281,72548353,72613889,72744961,73138177,73269249,73531393,73990148,74121217,74317825,74514433,74645505,74711041,74842113,74973185,75038721,75104259,75169793,75300865,75366401,75431937,75497473,75628545,75694081,75759620,75956225,76021762,76087299,76152833,76283905,76349441,76414979,76480513,76546049,76677121,76742657,76808193,76873729,76939267,77004801,77135873,77201409,77266945,77332481,77398017,77529089,77594625,77660161,77791233,77856771,77987841,78118913,78184449,78249985,78446596,78512131,78577665,78708737,78774273,78839809,78905345,78970881,79101953,79167489,79233025,79364097,79429634,79495169,79560705,79626241,79691777,79757313,79888385,79953923,80019457,80084993,80150529,80216065,80281603,80347137,80412673,80478209,80543745,80674817,80740353,80805889,80871425,80936961,81002499,81068035,81133569,81199105,81264643,81330177],"member":[655361,983041,3342342,4653057,5963781,6619137,6684673,6815745,7471105,7733249,7798785,7929857,7995393,8060929,8192001,8323073,8388609,8454145,8519684,8585217,8650753,8781825,8847361,8912897,8978433,9109505,9175041,9568257,9633793,9699329,9764865,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10747905,10813441,10878977,10944513,11075585,11141121,11272193,11337729,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12386305,12451841,12517377,12582913,12713985,12779521,12845057,12910593,13041665,13107201,13565953,13631489,13893633,13959169,14221313,15204353,15990785,16711682,17039361,17170433,17956865,18415617,18808833,19005441,19398657,19922945,20054017,20840449,21233665,21889025,22151170,22347777,22806529,23199746,23396355,24051714,25165829,25231361,25624577,25952260,26279937,26869761,26935297,27328513,27394051,27525121,27656193,27787265,27852801,27918337,28246017,28311556,28442625,28508161,28573697,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29229057,29294593,29425665,29491201,29556737,29622273,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31522817,31588353,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32309249,32374785,32440321,32571393,32636929,32702465,32768001,32833537,32964609,33030145,33095681,33292289,33357825,33488897,33685505,33751041,33816577,33882113,33947649,34078721,34209793,34275329,34340865,34406401,34537473,34603009,34865153,34930689,35323905,35389441,35520513,35586049,35651585,35717121,35848193,35913729,35979265,36044801,36175873,36241409,36306945,36372481,36569089,36700161,36831233,37093377,37158913,37224449,37289985,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37945345,38076417,38207489,38273025,38338561,38404097,38666241,38797313,38862849,38928385,39059457,39124993,39190529,39256065,39387137,39452673,39518209,39583745,39780353,39976961,40042497,40108033,40173569,40239105,40435713,40566785,40828929,40894465,41025537,41222145,41287681,41418753,41549825,41615361,42008577,42074113,42205185,42401793,42467329,42598401,42729473,42795009,42926081,43057153,43122689,43188225,43515905,43581441,43712513,43778049,44040193,44302337,44367873,44433409,45023233,45088769,45285377,45481985,45416449,45547523,45744129,45875201,46137345,46792705,46858241,47120385,47513601,48037889,48365569,49217537,49741825,49807361,49872897,50659329,50724865,50790401,50987009,51118081,51970049,52625409,53542913,54198273,54460417,54591489,54984705,55312385,55508993,55771137,57016321,57475073,58130433,59310081,59441153,59768833,61341697,61734913,61931521,62586881,63373314,63438849,63504385,63635457,63700995,63766529,64028673,64094209,64225281,64487425,64749569,64880641,64946177,65011713,65077252,65142785,65536001,65863684,66060289,66191361,66256897,66584577,66715649,66977793,67174401,67436545,67698689,67829761,67895297,67960833,68026369,68157441,68354049,68419586,68550657,68616193,68681729,68747265,69009409,69271553,69402625,69599233,69730305,69861377,70123521,70189057,70385665,70451201,70516737,70778881,70844417,70975489,71041025,71434241,71499777,71565313,71630849,71696385,71827457,71892993,72155137,72220673,72744961,72810497,72876033,72941569,73007105,73072641,73203713,73400321,73596929,73859073,73924609,74055681,74186753,74383361,74448897,74579969,74842114,75235329,75563009,75825153,76021764,76218369,76414977,76611585,76873729,76939265,77004801,77070337,77660161,77791233,77856769,78118913,78315521,78446593,79167493,79233025,79429634,79560705,79757313,80084997,80150529,80216066,80412673,80543750],"monitoring":[68354049,70975489,71041028,71827457,72220676,72810497,73400321,77791233],"merged":[16711681,23199745],"meaning":[79233025],"match":[1769473,2031617,2949121,3145729,4653057,5046273,16711681,23199745,73990145,74842113,75038721,75759617,79167489,80216065],"metho":[29163521,34668545,37158913,56557569,61865985,69337089,74317825,80609281],"maxruntimeheapsize":[60293121,70975489,71041028,72810497,76087297,77791233],"maxheapsize":[59834369,68354049,70975489,72220676,75366401,77791233],"marshalnullasdispatch":[62128129,71237633,80412673],"manipulate":[12582913],"modeless":[9240577,41746435,81133569],"machine":[9175041],"maximum":[16449537,16646145,16777217,16842753,16908289,18153473,18677761,18743297,20185089,21168129,22282241,23986177,54198274,55640065,57344002,59375617,59834370,60293122,61014021,61997057,64094210,66584578,67829762,69402626,69468162,70778881,70975489,71827457,72155137,73400321,74383361,75169793,75366402,76087298,76152837,77332481,79691777],"marshalarraysbyvalue":[80412673],"marshaling":[76087297,78446593],"multidimensional":[16711681,23199745],"movenext":[4259841,9175041,24838148,70320129],"mib":[61014020,64094211,66584579,67829763,69402627,76152836],"maxstackusage":[59834369,73400324,75366401],"maxcachesize":[54198277,55640066,57344005,59375617,61997057,69468165,75169794,77332481,79691777],"merge":[7929857,7995393],"maps":[60162049,62128129,64552961,64815105,67305473,71237633,80871425],"methods":[851970,1638402,1703938,1769474,1835010,1900546,1966082,2031618,2097154,2162690,2228226,2293762,2424834,2490370,2555906,2621442,2686978,2752514,2818050,2883586,2949122,3014658,3080194,3145730,3211266,3276802,3342339,3407874,3473410,3538946,3604482,3670018,3735554,3801090,3866626,3932162,3997698,4063234,4128770,4194306,4259842,4325378,4390914,4456450,4521986,4587522,4653058,4718594,4784130,4849666,4915202,4980738,5046274,5111810,5177346,5242882,5308418,5373954,5439490,5570562,5636098,5701634,5767170,5963779,5898242,6094850,6160386,6356993,6553602,6946818,7077890,7340034,7864322,8060930,8192002,8323074,8454146,8716290,8781826,8978434,9240578,9306114,9502722,9830402,9895938,10092546,10158081,10354690,10420226,10878977,11010050,11206658,11337729,11403266,11468801,12320770,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14286850,14352386,14417922,14745601,14811137,15073281,15335426,15400961,15466498,15597569,15794178,15859713,15925250,15990785,16711686,17039362,17170434,17235969,17301505,17760258,17825793,17891329,17956866,18087937,18284545,18415618,18546689,18808834,19202049,19398658,19922946,19988481,20054018,20119553,20250625,20316161,20381698,20512770,20578305,20774913,21102593,21233666,21495809,21692418,22216705,22478849,22544386,22609921,22937601,23199750,23527425,23592961,24117250,24182785,24379393,24903682,25100289,25231362,26017794,26476546,26935298,27066370,27983874,45547521,48103427,60620801,62390273,65667073,66519041,68943873,70320129,70713345,70909953,71172097,71303169,71368705,71761921,72417281,72548353,72613889,73138177,73269249,73531393,73990145,74121217,74514433,74645506,74711041,74842114,74907649,74973185,75038721,75104257,75169793,75235331,75366401,75431937,75497473,75563011,75628545,75694081,75759617,75956225,76087297,76152833,76283905,76349441,76414977,76480513,76546049,76677122,76742657,76808193,77135874,77266945,77332481,77398017,77529089,77594625,77856769,77987841,78184449,78249986,78512129,78577665,78708737,78774274,78839809,78970881,79101953,79167490,79364097,79495169,79626241,79691777,79888385,79953921,80019457,80084994,80216066,80281601,80347137,80478209,80543746,80674817,80740353,80805889,80871425,80936961,81002497,81068033,81133569,81199105,81264641,81330177],"marshaled":[60162049,62128129,64421889,64552961,64815105,67305473,68878337,71237633,75104257,76939266,79429633,79953921,80412676,81264641,81330177],"modify":[6422529,19660801,69337089,79298561],"mapping":[8454145,8978433,10158081,10354689,10878977,11337729,11468801,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14286849,14352385,14417921,14745601,14811137,15073281,15335425,15400961,15466497,15597569,15794177,15859713,15925249,16711681,17235969,17301505,17760257,17825793,17891329,18087937,18284545,18546689,19202049,19988481,20119553,20250625,20316161,20381697,20512769,20578305,20774913,21102593,21495809,21692417,22216705,22478849,22544385,22609921,22937601,23199745,23527425,23592961,24117249,24182785,24379393,24903681,25100289,26017793,26476545,27066369,27983873],"mustoverride":[9043969,21954561,22413313,22675457,23658497,23789569,23920641,24444929,24510465,25690113,25821185,25886721,28114945,33423361,34668545,36503553,39321601,39911425,51511297,58392577,60489729,62390273,62521345,62914561,63569921,66125825,66912257,67502081,69074945,69926913],"monitor":[71827457,73400321],"misspelled":[61603841],"mechanism":[61734913,61931521,80412673],"max":[54198273,57344001,64094209,66584577,67829761,69402625,69468161,71041025,71827457,72155137,72220673,73400321],"map":[6619137,6684673,6815745,8650753,61538305,67174402,78839809],"module":[61734917,61931525,65470465,68616193,70123521,71958529,76611585,76939265,77004801],"moment":[68550658,70189058,71434242],"marshalunsafelongasbigint":[76939265],"managed":[3670018,5373953,8716289,9306113,9502721,9830401,11010049,11206657,11403265,18808834,19922946,21430274,41353218,46989314,51904513,56164353,56623105,75104257,76087297,76939265,77791233,77856769,78774274,79953921,80281601,80412673,81002497,81068033,81264641],"modules":[48103425,61734913,65470466,68616193,70123521,71958531,76611585],"marshaldatetimeasdate":[80412673],"maxexecutablesize":[61014017,64094212,76152833],"microseconds":[53805058,57540609,59834369,60293121,68550657,70189057,71434241,71565313,71761921,74055681,75366401,76087297,80019458],"memorystream":[65798145],"missing":[64815105,67305473,80871425],"marshaldecimalascurrency":[80412673],"maxnewspacesize":[61014017,66584580,69402628,76152833],"merges":[4521985,7995393,46596097,75956225]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_110.json b/docs/Reference/fti/FTI_110.json index 4ec317a28..2b2e10d61 100644 --- a/docs/Reference/fti/FTI_110.json +++ b/docs/Reference/fti/FTI_110.json @@ -1 +1 @@ -{"notifies":[2424833,13434881,57802753],"nonexistent":[50528257,51838977,60555265],"node":[524290,1048578,1179650,3801090,3997699,11599874,37093377,37617668,38141954,39321603,48562184,49807372,53608450,53673985,54394890,54919170,55115785,55508994,55902211,56033282,56688649,56754178,57081858,57475075,57737218,57868290],"noscriptaccessattribute":[2883586,21168133,38010881,42598402,53477377,54722568,59113473,60358657],"namespaces":[7143425,8060929,54067201,55377921],"num":[8126466],"numeric":[9699329,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12582913,13631490,13828097,19398657,23789570,37617666,55115778,55312385,57475073,57737217,61669377],"named":[2621443,2686979,2818051,3014657,3145731,3211267,3670019,4128771,4521987,5177347,6946818,7143428,8060932,13828097,14614529,15335425,17891329,19398657,21626881,24117249,24903681,35913729,35979265,36241409,36438017,36700161,36896769,36962305,37027841,37289985,37814273,38010881,38797313,39518209,40239105,41156609,42401793,47120385,47644673,48824321,54067204,55705601,56360961,57540609,58916868,59375620,59834372,60162052,60227588,60293124,60424196,60751876,61014020],"number":[524289,1048578,1179649,7602177,8126465,8388609,9306113,9568257,13631489,13828097,16056322,16711682,17301506,17432578,17498114,18219010,19398657,23789569,37617666,39583745,43384833,45023233,46858241,54919171,55115778,55902209,56033281,57081859,57540609,61145090],"names":[3014657,4521985,5898241,6160385,7143425,8060929,11272193,12386305,13828097,16973825,17629185,19398657,34537473,37027841,37814273,38797313,39518209,40239105,41156609,42663937,43188225,43515906,45809665,47120385,47644673,48824321,54067201,55705601,56426497,57409538,57999361,58916865,59375617,59834369,60162049,60227586,60293121,60424193,60751873,61014017,61145089],"needed":[3080193,5111809,18415617,23658497,26476545,58654721,58982401],"nodeid":[37617665,55115777,57475076],"nullsyncinvoker":[851971,1507330,6881282,30474242,31260674,31916034,35520514,39649281,40566785,58720263],"newvar":[3407873,5046273,12255237,41353217,45219841,58785793,59768833],"negation":[3014657,4521985,55705601,60227585],"notinheritable":[52428801,53477377,54722561,55115777,55246849,55312385,56754177,57212929,57933825,58261505,58589185,58851329,59047937,59506689,60030977,60817409,61079553,61276161],"new":[3014657,4521985,4915203,4980744,5308419,5373955,5570563,5636099,5701635,5767171,5832707,5898243,6160387,6619139,7077889,7143425,7208962,7340035,7667715,8192003,8388609,8650754,8781827,9109506,9306113,9502722,9568257,9633793,9830401,10092546,10354690,10747905,10944514,11141122,11272195,11403267,11534337,11796483,11927553,11993091,12255234,12320769,12386307,12648449,12713985,12779523,12845057,12976131,13041665,13107201,13303809,13369345,13500417,13697025,13828097,13959169,14024705,14090241,14155777,14286849,14417921,14483457,14876673,14942209,15007745,15138817,15269889,15597569,15925249,16318467,16384003,16449537,16777217,16842753,16973827,17170433,17235969,17563649,17629187,17760257,17891330,18022401,18087937,18350081,18481153,18612225,18743297,19070977,19136513,19267587,19398657,19660801,19857411,19922945,19988481,20119553,20185091,20381699,20578307,20643841,20709377,20774913,20840451,20905987,21037057,21168131,21364737,21430273,21561347,21495809,21692419,21954563,21889025,22020099,22151171,22347779,22413313,22478849,22609921,22675459,22740995,22872067,23199745,23265281,23330819,23396353,23855107,24182785,24248321,24313859,24510467,24838145,24903682,25034755,25100289,25231363,25427971,25624577,25690115,25755649,25886723,25952259,26214403,26673156,26738691,26804227,27328515,27459587,27590660,27656195,27852803,28114948,28180483,28508163,28639235,28835844,28901379,29097988,29163523,29360132,29425667,29622275,29687811,29818884,29884420,30015492,30081025,30408708,31129604,31326211,31522819,31719428,31850500,32243715,32309251,32571396,32702467,32833539,33161219,33554435,33685507,33816588,34144259,34275331,34340866,34406401,34471938,34734083,34799620,34865153,35127299,35454979,35651592,36044803,36306947,36503555,37224451,37486595,37552130,37683205,38076418,38207491,38338572,38469635,38993921,39124997,39190531,39321602,39976961,40173573,40370182,41091076,41287685,41418754,41811973,41877506,45613059,51576834,53084161,53149698,53477377,53870593,54067205,54722561,55312385,55705602,55836675,56426500,57999364,58130433,58195970,58261524,58392581,58523649,58589186,58654724,58785793,58982404,59113474,59179009,59310081,59441154,59506696,59768833,60096517,60227585,60358658,60489729,60686337,60817422,60882945,61145089,61407237,61538309,61603841,61669377],"net":[12910593,13631493,16252929,18546689,19333121,21299201,23789573,42336257,42795009,45875201,47382529,48889857,55377921,59637761,61145092],"nod":[37617674,53608449,54394881,54919169,55115786,55508993,56033282,56688641,57081857,57475073,57737217,57868289],"newer":[43057153,46465025],"null":[851969,1507329,3407874,5046274,5505025,5898241,6160385,6422529,6881281,7077891,7143425,8257538,8323074,8650754,9175044,11599873,12255234,12910594,13631490,16973825,17629185,19595265,23789570,25165825,30474241,31260673,31326210,31916033,35520513,38731777,39059458,39649281,40566785,40632322,41025537,42074114,42205186,42336260,42729473,43646977,43909122,44236801,44761089,44957698,45088770,45744131,45875204,46006273,46202883,46268418,46727169,46792705,47775746,48103425,48365572,48693249,49217537,49545217,49610757,50135041,50528257,50790405,51707905,51838977,52494337,52625409,54394881,56688641,58195970,58327042,58392578,58458116,58654723,58720258,58785794,58982403,59637762,59768834,60096514,60555265,60817410,60882946,61407234,61538306,61603842,61669377],"nullptr":[7077889,8323073,8650753,12255233,12910593,31326209],"normal":[39780353,43057153,45547521,46465025,52035585,56098817,59899905],"nested":[8126465,8454145,9437185,12713985,13041665,13500417,13697025,14286849,14483457,15007745,15138817,15269889,16384001,19136513,19922945,20709377,21037057,21430273,21889025,22675457,23199745,24248321,25100289,32571393,34799617,52035585,52494337,54722561,56098817,58654721,58982401,60358657],"numerical":[45744129,58654721],"natively":[9699329,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12582913,41353217,45219841],"newcomobj":[5046273,8650757,58785793],"namespace":[65537,131073,196609,262145,327681,393217,458753,524289,589826,655361,720898,786433,851969,917506,1048578,1114114,1179650,1245186,1376258,1441794,1507330,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259842,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915202,4980737,5046273,5111809,5177345,5242882,5308418,5373954,5439489,5505026,5570562,5636098,5701634,5767170,5832706,5898242,5963778,6029314,6094850,6160386,6225922,6291457,6356993,6422530,6488066,6553601,6619138,6684674,6750210,6815746,6881281,6946818,7012354,7077890,7143426,7208961,7274498,7340034,7405570,7471106,7536641,7602178,7667714,7733250,7798785,7864322,7929858,7995394,8060930,8126466,8192002,8257538,8323074,8388610,8454146,8519682,8585218,8650754,8716289,8781826,8847362,8912898,8978433,9043970,9109506,9175042,9240578,9306114,9371650,9437186,9502722,9568258,9633794,9699330,9764866,9830402,9895938,9961474,10027010,10092546,10158082,10223618,10289154,10354690,10420226,10485762,10551298,10616834,10682370,10747906,10813442,10878978,10944514,11010050,11075586,11141122,11206658,11272194,11337730,11403266,11468802,11534338,11599878,11665410,11730946,11796482,11862018,11927554,11993090,12058626,12124162,12189698,12255234,12320770,12386306,12451842,12517378,12582914,12648450,12713986,12779522,12845058,12910594,12976130,13041666,13107202,13172738,13238274,13303810,13369346,13434882,13500418,13565954,13631490,13697026,13762562,13828098,13893634,13959170,14024706,14090242,14155778,14221314,14286850,14352386,14417922,14483458,14548994,14614530,14680066,14745602,14811138,14876674,14942210,15007746,15073282,15138818,15204354,15269890,15335426,15400962,15466498,15532034,15597570,15663106,15728642,15794178,15859714,15925250,15990786,16056322,16121858,16187394,16252930,16318466,16384002,16515074,16449538,16580610,16646146,16711682,16777218,16842754,16908290,16973826,17039362,17104898,17170434,17235970,17301506,17367042,17432578,17498114,17563650,17629186,17694722,17760258,17825794,17891330,17956866,18022402,18087938,18153474,18219010,18284546,18350082,18415618,18481154,18546690,18612226,18677762,18743298,18808834,18874370,18939906,19005442,19070978,19136514,19202050,19267586,19333122,19398658,19464194,19529730,19595266,19660802,19726338,19791874,19857410,19922946,19988482,20054018,20119554,20185090,20250626,20316162,20381698,20447234,20512770,20578306,20643842,20709378,20774914,20840450,20905986,20971522,21037058,21102594,21168130,21233666,21299202,21364738,21430274,21495810,21561346,21626882,21692418,21757954,21823490,21889026,21954562,22020098,22085634,22151170,22216706,22282242,22347778,22413314,22478850,22544386,22609922,22675458,22740994,22806530,22872066,22937602,23003138,23068674,23134210,23199746,23265282,23330818,23396354,23461890,23527426,23592962,23658498,23724034,23789570,23855106,23920642,23986178,24051714,24117250,24182786,24248322,24313858,24379394,24444930,24510466,24576002,24641538,24707074,24772610,24838146,24903682,24969218,25034754,25100290,25165826,25231362,25296898,25362434,25427970,25493506,25559042,25624578,25690114,25755650,25821186,25886722,25952258,26017794,26083330,26148866,26214402,26279938,26345474,26411010,26476546,26542082,26607618,26673154,26738690,26804226,26869762,27000834,26935298,27066370,27131906,27197442,27262978,27328514,27394050,27459586,27525122,27590658,27656194,27721730,27787266,27852802,27918338,27983874,28049410,28114946,28180482,28246018,28311554,28377090,28442626,28508162,28573698,28639234,28704770,28770306,28835842,28901378,28966914,29032450,29097986,29163522,29229058,29294594,29360130,29425666,29491202,29556738,29622274,29687810,29753346,29818882,29884418,29949954,30015490,30081026,30146562,30212098,30277634,30343170,30408706,30474242,30539778,30605314,30670849,30736386,30801922,30867458,30932993,30998530,31064065,31129602,31195138,31260674,31326210,31391746,31457281,31522818,31588354,31653890,31719425,31784961,31850498,31916034,31981570,32047105,32112642,32178178,32243714,32309250,32374785,32440321,32505857,32571393,32636930,32702466,32768002,32833538,32899073,32964610,33030145,33095682,33161218,33226754,33292289,33357825,33423361,33488897,33554434,33619969,33685506,33751041,33816577,33882113,33947650,34013186,34144258,34078721,34209793,34275330,34340865,34406401,34471937,34537473,34603009,34668545,34734082,34799617,34865153,34930690,34996225,35061761,35127298,35192833,35258369,35323905,35389441,35454978,35520514,35586049,35651585,35717121,35782657,35848194,35913729,35979265,36044802,36110337,36175873,36241409,36306946,36372481,36438017,36503554,36569090,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224450,37289985,37355521,37421057,37486594,37552129,37617665,37683201,37748737,37814273,37879810,37945345,38010882,38076417,38141953,38207490,38273026,38338561,38469634,38404097,38535170,38600705,38666241,38731778,38797313,38862849,38928385,38993921,39059457,39124993,39190530,39321602,39256065,39387137,39452674,39518209,39583746,39649281,39714817,39780353,39845890,39911425,39976962,40042498,40108034,40173569,40239105,40304641,40370177,40435713,40501250,40566786,40697857,40632321,40763393,40828930,40894466,40960002,41025538,41091073,41156609,41222145,41287681,41353218,41418753,41484289,41549827,41615362,41680898,41746434,41811969,41877505,42008577,42074113,42139650,42205185,42270722,42336258,42401794,42467330,42532865,42598401,42663938,42729474,42795010,42860546,42926082,42991618,43057154,43122690,43188225,43253762,43319298,43384834,43450370,43515906,43581442,43646978,43712514,43778050,43843586,43909121,43974658,44040194,44105730,44171266,44236802,44302338,44367874,44433410,44498946,44564482,44630018,44695554,44761090,44826626,44892162,44957697,45023234,45154306,45088769,45219842,45285378,45350914,45416449,45481986,45547522,45613058,45678594,45744129,45809665,45875202,45940738,46006274,46071810,46137345,46202881,46268417,46333954,46399490,46465026,46530562,46596097,46661634,46727170,46792706,46858241,46923777,46989314,47054850,47120385,47185922,47251459,47316994,47382530,47448066,47513602,47579138,47644673,47710210,47775745,47841282,47906818,47972353,48037890,48103426,48168963,48234498,48300034,48365569,48431106,48496642,48562178,48627714,48693250,48758787,48824321,48889858,48955394,49020930,49086466,49152002,49217538,49283074,49348611,49414146,49479682,49545218,49610754,49676291,49741826,49807362,49872898,49938435,50003970,50069506,50135042,50200578,50266114,50331650,50397186,50462722,50528258,50593794,50659330,50724866,50790402,50855938,50921474,50987010,51052546,51118082,51183619,51249154,51314690,51380226,51445762,51511298,51576834,51642370,51707906,51773442,51838978,51904514,51970050,52035586,52101122,52166658,52232194,52297731,52363266,52428802,52494338,52559874,52625410,52690946,52756482,52822018,52887554,52953090,53018626,53084162,53149698,53215234,53280770,53346306,53411842,53477378,53542914,53608450,53673986,53739522,53805058,53870594,53936130,54001666,54067203,54132738,54198274,54263810,54329346,54394882,54460418,54525954,54591490,54657026,54722562,54788098,54853634,54919170,54984706,55050242,55115778,55181314,55246850,55312386,55377926,55443458,55508994,55574530,55640066,55705602,55771138,55836674,55902210,55967746,56033282,56098818,56164354,56229890,56295426,56360962,56426498,56492034,56557570,56623106,56688642,56754178,56819715,56885250,56950786,57016322,57081858,57147394,57212930,57278466,57344002,57409538,57475074,57540610,57606146,57671682,57737218,57802754,57868290,57933826,57999362,58064898,58130434,58195970,58261506,58327042,58392578,58458114,58523650,58589186,58654722,58720258,58785794,58851330,58916866,58982402,59047938,59113474,59179010,59244546,59310082,59375618,59441154,59506690,59572226,59637762,59703298,59768834,59834370,59899906,59965443,60030978,60096514,60162050,60227586,60293122,60358658,60424194,60489730,60555266,60620802,60686338,60751874,60817410,60882946,60948482,61014018,61079554,61145091,61210626,61276162,61341698,61407234,61472770,61538306,61603842,61669378],"nodes":[7143426,8060930,54067202,54394882],"necessary":[4980742,7208966,24969217,25493505,26083329,26542081,26607617,26935297,28311553,29491201,29949953,30736385,32178177,35192835,35848193,36372483,38666243,39714819,54853633,58261510,60817414],"nullexportvalue":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47775745,49610756,50790406,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"narrowing":[39059457,40632321,42074113,42205185,42795010,43909121,44957697,45088769,46268417,47775745,48889858,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"narrowest":[42795009,48889857],"nodefaultscriptaccessattribute":[3342338,20578309,38010881,42008578,53477384,59113473],"newarr":[3407874,5046273,9306113,9502726,9568258,10354695,34406402,58785793,59768834],"newobj":[3407876,5046276,8323073,9109509,9437186,9699329,10092550,10289153,10420225,10485761,10616833,10682369,10944518,11075585,11141127,11206657,11337729,11665409,12058625,12189697,12255233,12582913,12910593,13828097,19398657,34865156,58785796,59768836],"nullable":[1835009,6029316,6488068,7274499,51118085,58523649,61669378],"nextdouble":[11141122],"native":[13631491,13828097,19398657,23789571,46071809,55312385,57540609,61145090,61669378]} \ No newline at end of file +{"narrowest":[61669377,67764225],"native":[16711681,18219011,23199745,26542083,63635457,75038721,76414977,76939266,80412674],"null":[262145,786433,3538946,4521986,4915201,6553601,7143425,7536641,7602177,7929859,7995393,8847362,8912898,9175042,9437185,9895937,10616836,13107201,13959170,15990786,17498113,17694721,18219010,20971521,25624578,26279938,26542082,26869762,27656194,27787266,27852802,28442626,28573698,28901378,29032450,29097986,29229058,29294594,29425666,29622274,29818882,29884418,30015490,30146562,30277634,30670850,30736386,30801922,30932994,30998530,31064066,31719426,32047106,32112642,32178178,32309250,32374786,32440322,32768002,32833538,34078722,34209794,34275330,35651586,35979265,36831234,40632321,42139649,42729473,43319297,46333953,53477377,53673985,54591490,56950785,57737219,58130435,58458113,59113473,59965441,60096513,60162052,60293123,60358659,60555265,60948481,61407235,62128133,62193667,62455812,62586881,62980099,63045635,63176705,64421892,64552964,64684035,64815105,64880641,65273859,65536001,66256897,67305473,68026370,68419585,68812801,68878340,69271553,69533699,69599233,69664769,70647809,71237637,72548355,73334785,75104259,75956226,76087299,76349441,77529089,77856771,77987842,78512131,78905348,78970883,79364097,79429634,79953923,80281603,80412673,80805890,80871425,81002499,81068035,81264643],"num":[8978434],"nullexportvalue":[57737217,58130433,60293121,61407233,62128132,62193665,63045633,64684033,65273857,69533697,71237638,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"noscriptaccessattribute":[2949122,18612229,45547521,53542914,73990145,74842120,75759617,80216065],"natively":[10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,14221313,15204353,62062593,67567617],"nonexistent":[64815105,67305473,80871425],"nested":[8454145,8978433,10354689,14286849,14352385,14417921,15335425,15466497,15794177,15925249,17760257,20381697,20512769,20709377,21692417,22544385,24117249,24903681,26017793,26476545,27066369,27262977,27983873,46006273,54788097,68419585,72548353,73924609,74448897,74842113,78970881,80216065],"nodefaultscriptaccessattribute":[3145730,17367045,45547521,66781186,73990152,75759617],"normal":[57475073,59375617,60817409,66387969,73924609,74448897,77332481],"newobj":[3538948,4521988,8847361,9633797,10354690,10747905,10878983,10551297,11468806,11730945,11927553,12124161,12386305,12517377,12582918,12845057,12910593,13631489,13893633,13959169,14221313,15204353,15990785,16711681,23199745,46923780,75956228,77987844],"notifies":[2424833,13303809,76808193],"nullable":[2228225,4915202,7340035,7405572,9043971,9895939,10682372,27787271,30474247,30932999,34603015,38862855,51052546,51445762,54067202,63766533,75169793,76349443,77529091,79364098,80412674],"new":[3342337,5505027,5832707,5963777,6225923,6422531,6488067,6750211,6881283,7012355,7077896,7143427,7274499,7667715,7929857,7995393,8126467,8388609,8585217,9175042,9371651,9437187,9633794,10158082,10485761,10813441,10878978,10944513,11010050,11075585,11337730,11468802,12189699,12255235,12582914,12648451,12779521,12976131,13172737,13238273,13369347,13434881,13500417,13697025,13762563,13828097,13959170,14024705,14090241,14286849,14352385,14417921,14614531,14745601,14811137,15073281,15138819,15335425,15400961,15466497,15597569,15794177,15859713,15925249,16711681,17235969,17301505,17367043,17432577,17563651,17694723,17760257,17825793,17891329,18087937,18284545,18350081,18481155,18546689,18612227,19202049,19267587,19595265,19660803,19988481,20119553,20250625,20316161,20381697,20447234,20512769,20578305,20709379,20774913,20971523,21102593,21495809,21692417,21823491,22085635,22151171,22216705,22478849,22544385,22609921,22740995,22806531,22937601,23134211,23199745,23330819,23396355,23527425,23592961,23724035,23920641,24051715,24117249,24182785,24379393,24903681,25100289,25165827,25755651,25821186,25952259,26017793,26476545,27066369,27197443,27262979,27394051,27787267,27983873,28311555,28966915,30474243,30932995,31457283,32505859,32899075,33161219,33554435,33619971,34013187,34144259,34471939,34603011,34734083,34799619,34996227,35061763,35127299,35192835,35258371,35389441,35520513,35782659,36110339,36438019,36765699,36896771,36962307,37027843,37093379,37289985,37355523,38141955,38469635,38535172,38600707,38731779,38862851,38993923,39256067,39649283,39714819,39845891,40304644,40370179,40763396,40828931,40960003,41091075,41680900,41811971,41877508,41943043,42205187,42270723,42336259,42467329,42532868,42991620,43253763,43384835,43450371,43778051,43974661,44105730,44236803,44498948,44761092,44892163,44957699,45154305,45219843,45481987,45809667,46006276,46530563,46923777,47054852,47185923,47251459,47316995,47448066,47972364,48234499,48431106,48889859,49086468,49414147,49545218,50069512,50200578,50331651,50528259,50593795,50921476,51576837,52101123,52232193,52297731,52363266,52494344,52559875,52953091,53149699,53346306,53739524,54132739,54591491,54788100,54919171,55312392,55443461,55836684,55967748,56295428,56754180,57933826,58720262,59047941,60424197,61014017,66584578,71368708,72417284,72548356,73990145,74121221,74514436,74711041,74842113,75038721,75104261,75169793,75366420,75431937,75628548,75759618,75956225,76087310,76152834,76480513,76742658,76939265,77004801,77266945,77791234,77856770,77987841,78184451,78249987,78577665,78839810,78970884,79167496,79626248,79691777,79757313,79888385,79953921,80084993,80216066,80281605,80412673,80478216,80543746,80674817,81002501,81068033,81264645],"net":[15990785,18219013,26542085,61669377,64421889,67764225,67895297,68878337,74776577,76939271,79429633],"needed":[3014657,3407873,19726337,24707073,47120385,72548353,78970881],"negation":[3342337,5963777,80084993,80543745],"newer":[60817409,66387969],"newvar":[3538945,4521985,13959173,62062593,67567617,75956225,77987841],"narrowing":[57737217,58130433,60293121,61407233,61669378,62193665,63045633,64684033,65273857,67764226,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"nodes":[7995394,9109506,62586882,74121218],"namespaces":[7995393,9109505,74121217,74776577],"nullptr":[7929857,8847361,9175041,13959169,15990785,25624577,26279937,26869761,27656193,27787265,27852801,28442625,28573697,29032449,29097985,29229057,29294593,29425665,29622273,29818881,29884417,30015489,30146561,30277633,30670849,30736385,30801921,30932993,30998529,31064065,31719425,32047105,32112641,32178177,32309249,32374785,32440321,32768001,32833537,34078721,34209793,34275329,35651585,54591489],"nextdouble":[10878978],"node":[393218,327682,1572866,4128771,4718594,13107202,49545219,53805057,56819716,57540610,62586890,64028674,64487426,64946178,65142792,66715650,67436556,69271561,70451202,71761922,71892995,73007106,74186754,80019457,80347145,80740355],"namespace":[2,393218,131073,524290,589825,262145,655362,720897,327682,786434,851969,917506,983042,1048577,1114114,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2359298,2097153,2162689,2228225,2818049,2490369,2293761,2752513,2424833,2686977,2555905,2883586,2621441,2949121,3014657,3080193,3145729,3211265,3276801,3407873,3342337,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4653057,4587521,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505026,5570561,5636097,5701633,5832706,5963777,5898241,5767169,6029314,6094849,6160385,6225922,6291458,6356994,6422530,6488066,6553601,6619138,6684674,6750210,6815746,6881282,6946817,7012354,7077889,7143426,7208962,7274498,7340033,7405570,7471106,7536642,7602178,7667714,7733250,7798786,7864321,7929858,7995394,8060930,8126466,8192002,8257538,8323074,8388610,8454146,8519682,8585218,8650754,8781826,8716289,8847362,8912898,8978434,9043970,9109506,9175042,9240577,9306113,9371650,9437186,9502721,9568258,9633794,9699330,9764866,9830401,9895937,9961474,10027010,10092546,10158082,10223618,10289154,10354690,10420226,10485762,10551298,10616834,10682370,10747906,10813442,10878978,10944514,11010049,11075586,11141122,11272194,11206657,11337730,11403265,11468802,11534338,11599874,11665410,11730946,11796482,11862018,11927554,11993090,12058626,12124162,12189698,12255234,12320769,12386306,12451842,12517378,12582914,12648450,12713986,12779522,12845058,12910594,12976130,13041666,13107206,13172738,13238274,13303810,13369346,13434882,13500418,13565954,13631490,13697026,13762562,13828098,13893634,13959170,14024706,14090242,14155778,14221314,14286850,14352386,14417922,14483458,14548994,14614530,14680066,14745602,14811138,14876674,14942210,15007746,15073282,15138818,15204354,15269890,15335426,15400962,15466498,15532034,15597570,15663106,15728642,15794178,15859714,15925250,15990786,16056322,16121858,16187394,16252930,16318466,16384002,16449538,16515074,16580610,16646146,16711682,16777218,16842754,16908290,16973826,17039362,17104898,17170434,17235970,17301506,17367042,17432578,17498114,17563650,17629186,17694722,17760258,17825794,17891330,17956866,18022402,18087938,18153474,18219010,18284546,18350082,18415618,18481154,18546690,18612226,18677762,18743298,18808834,18874370,18939906,19005442,19070978,19136514,19202050,19267586,19333122,19398658,19464194,19529730,19595266,19660802,19726338,19791874,19857410,19922946,19988482,20054018,20119554,20185090,20250626,20316162,20381698,20447234,20512770,20578306,20643842,20709378,20774914,20840450,20905986,20971522,21037058,21102594,21168130,21233666,21299202,21364738,21430274,21495810,21561346,21626882,21692418,21757954,21823490,21889026,21954562,22020098,22085634,22151170,22216706,22282242,22347778,22413314,22478850,22544386,22609922,22675458,22740994,22806530,22872066,22937602,23003138,23068674,23134210,23199746,23265282,23330818,23396354,23461890,23527426,23592962,23658498,23724034,23789570,23855106,23920642,23986178,24051714,24117250,24182786,24248322,24313858,24379394,24444930,24510466,24576002,24641538,24707074,24772610,24838146,24903682,24969218,25034754,25100290,25165826,25231362,25296898,25362434,25427970,25493506,25559042,25624578,25690114,25755650,25821186,25886722,25952258,26017794,26083330,26148866,26214402,26279938,26345474,26411010,26476546,26542082,26607618,26673154,26738690,26804226,26869762,26935298,27000834,27066370,27131906,27197442,27262978,27328514,27394050,27459586,27525122,27590658,27656194,27721730,27787266,27852802,27918338,27983874,28049410,28114946,28246018,28180482,28311554,28377090,28442626,28508162,28573698,28639234,28704770,28770306,28835842,28901378,28966914,29032450,29097986,29163522,29229058,29294594,29360130,29425666,29491202,29556738,29622274,29687810,29753346,29818882,29884418,29949954,30015490,30081026,30146562,30212098,30277634,30343170,30408706,30474242,30539778,30605314,30670850,30736386,30801922,30867458,30932994,30998530,31064066,31129602,31195138,31260674,31326210,31391746,31457282,31522818,31588354,31653890,31719426,31784962,31850498,31916034,31981570,32047106,32112642,32178178,32243714,32309250,32374786,32440322,32505858,32571394,32636930,32702466,32768002,32833538,32899074,32964610,33030146,33095682,33161218,33226754,33292290,33357826,33423362,33488898,33554434,33619970,33685506,33751042,33816578,33882114,33947650,34013186,34078722,34144258,34209794,34275330,34340866,34406402,34471938,34537474,34603010,34668546,34734082,34799618,34865154,34930690,34996226,35061762,35127298,35192834,35258370,35323906,35389442,35454978,35520514,35586050,35651586,35717122,35782658,35848194,35913730,35979266,36044802,36110338,36175874,36241410,36306946,36372482,36438018,36503554,36569090,36634626,36700162,36765698,36831234,36896770,36962306,37027842,37093378,37158914,37224450,37289986,37355522,37421058,37486594,37552130,37617666,37683202,37748738,37814274,37879810,37945346,38010882,38076418,38141954,38207490,38273026,38338562,38404098,38469634,38535170,38600706,38666242,38731778,38797314,38862850,38928386,38993922,39059458,39124994,39190530,39256066,39321602,39387138,39452674,39518210,39583746,39649282,39714818,39780354,39845890,39911426,39976962,40042498,40108034,40173570,40239106,40304642,40370178,40435714,40501250,40566786,40632322,40697858,40763394,40828930,40894466,40960002,41025538,41091074,41156610,41222146,41287682,41353218,41418754,41484290,41549826,41615362,41680898,41746434,41811970,41877506,41943042,42008578,42074114,42139650,42205186,42270722,42336258,42401794,42467330,42532866,42598402,42663938,42729474,42795010,42860546,42926082,42991618,43057154,43122690,43188226,43253762,43319298,43384834,43450370,43515906,43581442,43646977,43712514,43778050,43843586,43909121,43974657,44040194,44105729,44171266,44236802,44302338,44367874,44433410,44498946,44564482,44630018,44695553,44761090,44826625,44892162,44957698,45023234,45088770,45154305,45219842,45285378,45350913,45416450,45481986,45547522,45613058,45678593,45744130,45809666,45875202,45940737,46006273,46071809,46137346,46202881,46268417,46333954,46399489,46465026,46530562,46596097,46661633,46727169,46792706,46858242,46923777,46989314,47054850,47120386,47185922,47251458,47316994,47382529,47448065,47513602,47579137,47644674,47710209,47775745,47841281,47906817,47972353,48037890,48103426,48168961,48234498,48300033,48365570,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889858,48955394,49020929,49086466,49152001,49217538,49283074,49348609,49414146,49479681,49545218,49610753,49676289,49741826,49807362,49872898,49938433,50003969,50069505,50135042,50200577,50266113,50331650,50397185,50462721,50528258,50593794,50659330,50724866,50790402,50855937,50921474,50987010,51052545,51118082,51183617,51249153,51314689,51380226,51445761,51511298,51576833,51642369,51707906,51773441,51838977,51904513,51970050,52035585,52101122,52166657,52232194,52297730,52363265,52428802,52494337,52559874,52625410,52690945,52756481,52822017,52887553,52953090,53018625,53084161,53149698,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673986,53739521,53805057,53870593,53936129,54001665,54067201,54132738,54198274,54263809,54329345,54394881,54460418,54525953,54591490,54657025,54722561,54788097,54853633,54919170,54984706,55050241,55115777,55181313,55246849,55312385,55377921,55443457,55508994,55574529,55640065,55705601,55771138,55836673,55902209,55967745,56033282,56098817,56164353,56229890,56295425,56360962,56426497,56492033,56557569,56623105,56688642,56754177,56819713,56885249,56950786,57016322,57081857,57147395,57212929,57278466,57344002,57409537,57475074,57540609,57606145,57671681,57737217,57802753,57868290,57933825,57999362,58064897,58130433,58195970,58261505,58327042,58392578,58458114,58523650,58589185,58654721,58785794,58720257,58851329,58916866,58982402,59047937,59113473,59179010,59244545,59310082,59375617,59441154,59506690,59572226,59637762,59703298,59768834,59834369,59899906,59965442,60030978,60096514,60162050,60227585,60293121,60358657,60489730,60424193,60555266,60620802,60686338,60751873,60817410,60882946,60948482,61014017,61079554,61145090,61210625,61276161,61341698,61407233,61472770,61538305,61669378,61734915,61800449,61865986,61931523,61997057,62062594,62128130,62193665,62259202,62324738,62390275,62455809,62521346,62586882,62652417,62717954,62783489,62849026,62914562,62980097,63045633,63111170,63176706,63242242,63307778,63373314,63438850,63504386,63569922,63635458,63700994,63766530,63832066,63897601,63963138,64028674,64094210,64159746,64225282,64290818,64356353,64421890,64487426,64552962,64618497,64684033,64749570,64815106,64880642,64946178,65011714,65077250,65142786,65208322,65273857,65339394,65404930,65470465,65536002,65601538,65732610,65667074,65798146,65863681,65929218,65994754,66060290,66125826,66191362,66256898,66322434,66387970,66453506,66519043,66584578,66650114,66715650,66781185,66846722,66912258,66977794,67043330,67108866,67174402,67239938,67305474,67371010,67436546,67502083,67567618,67633153,67698690,67764226,67829762,67895298,67960834,68026370,68091906,68157441,68222978,68288514,68354050,68419586,68485122,68550658,68616194,68681730,68747266,68812802,68878338,68943874,69009410,69074946,69140482,69206019,69271554,69337090,69402626,69468162,69533697,69599234,69664770,69730306,69795842,69861378,69926914,69992450,70057986,70123522,70189058,70254594,70320130,70385666,70451202,70516738,70582273,70647810,70713347,70778882,70844418,70909954,70975490,71041026,71106562,71172098,71237634,71303170,71368706,71434242,71499778,71565314,71630850,71696386,71761922,71827458,71892994,71958530,72024066,72089602,72155138,72220674,72286210,72351746,72417282,72482818,72548354,72613890,72679426,72744962,72810498,72876034,72941570,73007106,73072642,73138178,73203714,73269250,73334786,73400322,73465858,73531394,73596930,73662466,73728002,73793538,73859074,73924610,73990146,74055682,74121219,74186754,74252290,74317826,74383362,74448898,74514434,74579970,74645506,74711042,74776583,74842114,74907651,74973186,75038722,75104258,75169794,75235330,75300866,75366402,75431938,75497474,75563010,75628546,75694082,75759618,75825154,75890690,75956226,76021762,76087298,76152834,76218370,76283906,76349442,76414978,76480514,76546050,76611586,76677122,76742658,76808194,76873730,76939267,77004802,77070338,77135874,77201410,77266946,77332482,77398018,77463554,77529090,77594626,77660162,77725698,77791234,77856770,77922306,77987842,78053378,78118914,78184450,78249986,78315522,78381059,78446595,78512130,78577666,78643202,78708738,78774274,78839810,78905346,78970882,79036418,79101954,79167490,79233026,79298562,79364098,79429634,79495170,79560706,79626242,79691778,79757314,79822850,79888386,79953922,80019458,80084994,80150530,80216066,80281602,80347138,80412674,80478210,80543746,80609282,80674818,80740354,80805890,80871426,80936962,81002498,81068034,81133570,81199106,81264642,81330178],"necessary":[7077894,11010054,36175873,37552129,38207489,40108033,40435713,43122689,44040193,48037889,48365569,49217537,49807361,50003971,51642371,54460417,54853635,57212931,75366406,76087302,76611585],"notinheritable":[69992449,70909953,71761921,71958529,73531393,73990145,74514433,74842113,75038721,75366401,76087297,76152833,76546049,76677121,77201409,77594625,78774273,79167489,79626241,80347137],"nullsyncinvoker":[262147,786434,6553602,40632322,42139650,43319298,46333954,53477377,53673985,80805895],"nodeid":[56819713,71892996,80347137],"nullimportvalue":[57737217,58130433,60162054,60293121,61407233,62193665,63045633,64552964,64684033,65273857,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"nod":[56819722,62586881,64028673,64487425,64946177,66715650,69271553,70451201,71892993,73007105,74186753,80347146],"numeric":[10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,14221313,15204353,16711681,18219010,23199745,26542082,56819714,71892993,73007105,75038721,80347138,80412673],"newarr":[3538946,4521985,10158087,10944514,11075585,11337734,45154306,75956225,77987842],"newcomobj":[4521985,9175045,75956225],"numerical":[60358657,62980097,72548353,78970881],"number":[393217,327682,1572865,7733249,8388609,8978433,10944513,11075585,16449538,16646146,16711681,16777218,16842754,16908290,18153474,18219009,18677762,18743298,20185090,21168130,22282242,23199745,23986178,26542081,54198273,56819714,57344001,58589185,60227585,64487427,65011713,66715649,69468161,70451203,76414977,76939266,77529089,80347138,80740353],"named":[2097155,2752515,2818051,3276803,3342337,3473411,3801091,3997699,4390915,4456453,4784133,4980741,5242883,5570563,5963779,7995396,8519682,9109508,15007745,16711681,19333121,20447233,22413313,22675457,23199745,24969217,25034753,25559041,25821185,26214401,27590657,29687809,29753345,32243715,32636929,33685505,38010881,45547521,45940737,46071809,46268417,46399489,46661633,46727169,47382529,48627713,48693249,48824321,49348609,49676289,53608449,54525953,55050241,55181313,55574529,56098817,56885249,57081857,57802753,58064897,59244545,60030977,60751873,61079553,61210625,62783489,63897601,64356353,67371009,67633153,69926913,71303172,73138180,73269253,74121220,74645508,74973189,75497476,75694085,76283908,76414977,77135876,78184452,78577668,79495172,80084996,80543745,81199108],"names":[3342337,4456449,4784129,4980737,5963777,7143425,7995393,9109505,9437185,12976129,13369345,16711681,17694721,20971521,23199745,32243715,53084161,53608449,54394881,54525953,55574529,55705601,56885249,59244545,60030978,60751873,61210625,62521346,62783489,63242241,63897601,64356353,65339394,67371010,67633153,71303169,71368705,73138177,73269249,74121217,74645505,74973185,75497473,75628545,75694081,76283905,76939265,77135873,78184449,78577665,79495169,80084994,80543745,81199105]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_111.json b/docs/Reference/fti/FTI_111.json index 29de30093..ff7657a7b 100644 --- a/docs/Reference/fti/FTI_111.json +++ b/docs/Reference/fti/FTI_111.json @@ -1 +1 @@ -{"overloads":[25952257,26804225,27656193,28180481,28901377,29622273],"omit":[7471105,7929857,7995393,8585217,9240577,9895937,16252929,17104897,17825793,18153473,18546689,19005441,19333121,19726337,20054017,20512769,21299201],"option":[57147393,59179009,59441154,59965442,60620801,61145098,61669381],"one":[3014657,4521985,5046274,5111809,7143426,8060930,9502721,9961473,10158081,10354689,10747905,11272193,11796481,12386305,12779521,12910593,13434881,13828098,17891329,19398658,24903681,26804225,27656193,28901377,29622273,30932994,37683204,40501249,41025537,42729473,43646977,44236801,45744131,46006273,46202883,46727169,48103425,48365573,48693249,49545217,50135041,50528257,51838977,52494337,54067205,55705601,58458117,58654724,58785794,58982403,59768833,60227585,60555265],"old":[38993921,52690948,53542914,58589185],"ownerhandle":[46596097,50397188,60948481],"objects":[3014657,4521985,8126465,8454145,9437185,12713985,13041665,13500417,13697025,13631491,13828098,14286849,14483457,15007745,15138817,15269889,19136513,19398658,19922945,20709377,21037057,21430273,21889025,23199745,23789571,24248321,25100289,38010881,39059458,40632322,42074114,42205186,43581441,43909122,44957698,45088770,46268418,47185921,47316993,47775746,49676289,49938433,51183617,52297729,52822018,53280769,53411841,55312385,55705601,57540609,58195970,58327042,58392578,59965442,60096514,60227586,60817410,60882946,61145092,61407234,61538306,61603842,61669378],"overload":[4915201,5373953,5570561,5636097,5767169,5832705,5898241,6160385,6815745,7143425,7405569,7471105,7864321,7929857,8060929,7995393,8126465,8388609,8454145,8519681,8585217,8847361,9109505,9240577,9306113,9371649,9437185,9502721,9633793,9764865,9895937,10027009,10092545,10223617,10354689,10551297,10813441,10878977,10944513,11010049,11141121,11272193,11468801,11534337,11796481,11862017,11927553,11993089,12124161,12320769,12386305,12451841,12517377,12648449,12779521,12845057,13041665,13107201,13172737,13238273,13303809,13369345,13500417,13565953,13697025,13631489,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14286849,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15925249,16187393,16252929,16318465,16384001,16580609,16777217,16842753,16908289,16973825,17104897,17170433,17235969,17563649,17629185,17760257,17825793,17891329,18087937,18350081,18546689,18612225,18743297,18874369,18939905,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19726337,19660801,19857409,19922945,19988481,20119553,20185089,20250625,20381697,20447233,20512769,20643841,20709377,20774913,20840449,20905985,21037057,21102593,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21823489,22020097,22085633,22151169,22216705,22347777,22413313,22478849,22609921,22675457,22740993,22806529,22872065,23068673,23199745,23265281,23330817,23396353,23461889,23527425,23789569,23855105,23920641,24051713,24117249,24182785,24248321,24444929,24510465,24576001,24641537,24772609,24838145,24903681,24969217,25034753,25100289,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26214401,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26935297,27066369,27131905,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27852801,27983873,28049409,28114945,28180481,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28835841,28901377,28966913,29032449,29097985,29163521,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30343169,30408705,30474241,30670849,30736385,30932993,30998529,31064065,31129601,31260673,31391745,31457281,31522817,31719425,31784961,31850497,31981569,32047105,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32702465,32768001,32833537,32899073,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34603009,34668545,34734081,34799617,34865153,34930689,35061761,35127297,35192833,35258369,35323905,35454977,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36110337,36175873,36241409,36372481,36306945,36438017,36503553,36569089,36700161,36765697,36831233,36896769,36962305,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37683201,37748737,37879809,37945345,38076417,38207489,38273025,38338561,38469633,38600705,38666241,38862849,39124993,39190529,39452673,39649281,39714817,40173569,40370177,40763393,41091073,41287681,41418753,41680897,41811969,41877505,42401793,43122689,47316993,53411841,53477377,54591489,54722561,55771137,56360961,56950785],"occurs":[65538,131073,196609,262145,327681,589825,720897,917505,38010881,54067201,56426497,57999361,58261506,58654722],"onexposedtoscriptcode":[2424833,13434884,57802753],"owner":[46596097,50397186,60948481],"objec":[19791873,37027843,37814275,38797315,39518211,40239107,41156611,42991617,43515905,45940737,47120386,47644674,48824322,53280769,56885249,57409537,58916866,59375619,59834371,60162051,60227586,60293123,60424195,60751875,61014018,61145089],"owns":[37027841,37814273,38797313,39518209,40239105,40960001,41156609,47120385,47644673,48824321,55050241,58916865,59375617,59834369,60162049,60227585,60293121,60424193,60751873,61014017],"outcome":[12910593],"outside":[15728641,15794177,16580609,19202049,50200577,52101121,53936129],"obsolete":[22151169,34471937,38993922,40435713,42532865,52690945,54132737,54263809,54853633,57147393,58195969,58589186,59703297,60620801,61276161],"optional":[6029315,6488067,6815745,7077891,7274499,7405570,7602178,8126465,8323075,8650755,9109505,9437185,10092545,11141121,12124161,12255235,12517377,12910595,13041665,13500417,13697025,13762561,13828097,13893633,14221313,14286849,14614529,14680066,14745602,15400961,15990785,16646145,17891329,19136513,19398657,19922945,21102593,21233665,21626881,21757953,21823490,22085634,22282241,23003137,23199745,23592961,24248321,24444930,24772609,24903681,25493506,26083329,26411009,27394050,27525121,27721730,28311553,28377090,28573698,29556738,29753345,30736386,31326210,31981569,33095681,37617665,38010882,40304643,40894465,41222147,41549825,42401793,42926081,47251457,51118081,51576835,52232193,53608449,53870595,55115777,56360961,58785793,59768833],"operationcanceledexception":[58982405],"obj":[7077893,8650753,9109505,9764865,10092545,10223617,10944513,11141121,33751041,34865153],"occurrence":[2752513,57540609],"optionally":[3735554,4587523,6291459,6356995,6553603,7208963,7536643,8716291,8978435,13631489,16187393,18874369,23068673,23789569,32374785,33488897,34078721,35061761,36110337,36831233,37355521,37748737,38273025,40763393,43122689,58195971,58327042,58392579,60096515,60817411,60882947,61407235,61538307,61603843],"overridden":[2490370,2555906,2883586,3342338,3538946,4849666,5111809,11730945,53477378,54722562,55312386,58654721,59113474,59506690,60358658],"options":[3735566,4587534,4980741,6291470,6357006,6553614,7208975,7536654,8716302,8978446,11927554,13107202,13303810,13500418,13828098,14090242,14155778,14286850,14876674,14942210,15007746,15269890,15597570,15925250,17235970,17760258,18087938,18743298,19070978,19398658,19660802,19988482,20643842,21037058,22347778,22609922,22872066,23199746,24248322,24510466,25034754,25100290,25231362,25624578,25690114,25755650,26214402,26673154,26804226,27590658,27656194,28114946,28508162,28639234,28835842,28901378,29097986,29163522,29360130,29425666,29622274,29687810,29884418,30015490,31064068,32047108,32309250,32440321,32833538,33292292,33423364,33619969,33685506,33816584,34209796,34275330,34340865,34603009,34734082,35127298,35258372,35454978,35651588,35717121,36044801,36503554,37224450,38010884,38076417,38207490,38338568,38469634,39124995,39190530,39321606,39976961,40108033,40173571,40370180,41222145,41287683,41811971,42532865,45613057,46923777,50462721,53870593,54198274,55443458,57147394,58195982,58261517,58327054,58392593,59179010,59441153,59506694,59572226,59637762,59965442,60096529,60620801,60817431,60882958,61145090,61276161,61407249,61538321,61603854,61669378],"obsoleteattribute":[22151172,52690948,54132740,54263812,54853636],"object":[327681,1572875,1638411,1703942,1769483,1835019,1900555,1966091,2031627,2097163,2293770,2359307,2424834,2490377,2555913,2621452,2686988,2752523,2818060,2162699,2228235,2883593,2949123,3014676,3080193,3145741,3211276,3276811,3342345,3407916,3473419,3538953,3604491,3670028,3735566,3801094,3866635,3932171,3997707,4063243,4128781,4259851,4325387,4390923,4456459,4522015,4587544,4653067,4849673,4980747,5046317,5111817,5177358,5439499,6291479,6357015,6553623,6750213,6881291,6946818,7012357,7143426,7208983,7340033,7471110,7536663,7602181,7798795,7929875,8060930,7995398,8126477,8257550,8323077,8388621,8454150,8519688,8585236,8650760,8716311,8912905,8978455,9043981,9109518,9175045,9240588,9306127,9371650,9437196,9502727,9568268,9633806,9699335,9764873,9830407,9895949,9961484,10027011,10092565,10158087,10223619,10289159,10354694,10420231,10485767,10551303,10616833,10682375,10747921,10878979,10944516,11075591,11141132,11206663,11337735,11534349,11665415,11730953,11927556,12058631,12189703,12255239,12320772,12582919,12648451,12713986,12845057,12910609,13041666,13107201,13172741,13303813,13369348,13434885,13500418,13565960,13631495,13697026,13828107,13893637,13959173,14024707,14090241,14155779,14221322,14286850,14417931,14483458,14548997,14614541,14745605,14811138,14876676,14942209,15007746,15073285,15138818,15269890,15335426,15400974,15532037,15597571,15663111,15925249,15990797,16121862,16252934,16646156,16777217,16842756,17104902,17170440,17235971,17563649,17760257,17825798,17891336,18087940,18153488,18350081,18415618,18546694,18612225,18743297,18808837,19005456,19070979,19136514,19333126,19398669,19464198,19595270,19726342,19660801,19791873,19857409,19922946,19988484,20054030,20119565,20447238,20512774,20643841,20709378,20774915,21037058,21233670,21299206,21364737,21430274,21495812,21626894,21692417,21757965,21889026,22085638,22282255,22478851,22413313,22544386,22609925,22806534,23003152,23199746,23265281,23396357,23527426,23592973,23658498,23789576,24117250,24182793,24248322,24641542,24707073,24903689,25100290,25296903,26345473,27787265,30801922,31064072,31195146,31457282,31522817,31653890,32309249,32440325,32505867,32899074,33161217,33357826,33423368,33619971,33685505,33751045,34144257,34406401,34603013,34734081,34865159,35323906,35454977,35717123,35782660,35913731,35979267,36175875,36241412,36306945,36438020,36700164,36896772,36962309,37027845,37224449,37289989,37814277,38010883,38207489,38535171,38797317,38993923,39452677,39518214,39976962,40239109,40566785,40960002,41156613,41680905,42336260,42401808,42729478,42991617,43057153,43253767,43515905,43581441,43646983,45154306,45613057,45744129,45875204,45940737,46006279,46399490,46465025,46727176,46858245,47054856,47120389,47185921,47644677,48168961,48496647,48758785,48824325,49152008,49283080,49348609,49545223,49610760,49676296,49938439,50003973,50135048,50528263,50790409,51183623,51314690,51576839,51642375,51838984,52101121,52297736,52428801,52690948,53084172,53149697,53477386,53542913,53673996,53870604,54067214,54263809,54722570,55050242,55115788,55246849,55312395,55705621,55771145,55836684,55902215,56229900,56360977,56426520,56492044,56754188,56885249,56819713,57016321,57212940,57409537,57540639,57671692,57802755,57933836,57999372,58130444,58195993,58261516,58327054,58392600,58523660,58589199,58654733,58720268,58785838,58851340,58916882,58982401,59047947,59113482,59244556,59310092,59375633,59506698,59703308,59637763,59768877,59834385,59899916,59965442,60030977,60096536,60162065,60227620,60293139,60358666,60424209,60489740,60555276,60751889,60817432,60882968,61014035,61079556,61145096,61210629,61276161,61341706,61407256,61472782,61538328,61603864,61669379],"overridable":[5242881,5963777,6225921,6422529,6488065,6946817,18874369,19529729,23658497,24379393,39583745,44761089],"occupies":[52690948],"overriding":[52166657,57278465],"older":[43450369,47382529,49414145],"occupying":[30539777],"observed":[1179649,39321601,55902209,56033281],"overall":[61145089],"occurred":[983041],"overrides":[1835012,3866625,4390913,4587521,5111810,5242881,5505025,6094849,6029313,6291457,6356993,6553601,6684673,7208965,7536641,7798785,8716292,18415617,18677761,19791874,22544385,27197441,27918337,28246017,28770305,30801921,30867457,31588353,31653889,32112641,32964609,35389441,36634627,38273025,39059457,40632321,42074115,42467329,43122689,43384833,43778049,43909121,44367873,44957697,46268418,49348609,49676289,50921473,51445761,51970049,52297729,53805057,54329345,55967745,56295425,56492033,56623105,56819713,58195969,58392578,58523653,58654722,60096514,60489731,60555265,60817416,60882950,61407234,61472769,61538306],"overloaded":[9764866,10092545,10223617,10878977,11141121,13565954,13828097,19398657],"output":[9568257,9830401,15859714,19529730,27197442,30867458,31588354,32112642,32964610,41353217,45219841],"override":[589825,3014665,4521993,5242881,5505027,5963777,6029315,6094851,6225921,6422529,6488065,6684675,6946817,11730945,15859713,16121857,16842753,17039361,17235969,17694721,17760257,18087937,18415619,18612225,18677763,18743297,18874369,18939905,19070977,19136513,19398657,19464193,19529730,19595265,19660801,19791873,19922945,19988481,20119553,20250625,20447233,20643841,20709377,20774913,21037057,21102593,21233665,21364737,21430273,21495809,21757953,21823489,21889025,22085633,22216705,22413313,22478849,22544387,22609921,22806529,23003137,23068673,23199745,23265281,23396353,23658497,23789569,23920641,24248321,24379393,24576001,24641537,25100289,27197444,27918339,28246019,28770307,30212097,30474241,30801923,30867460,31260673,31588356,31653891,31916033,32112644,32964612,35520513,38273027,39583745,42467331,42663937,42795009,43057153,43122691,43253761,43384836,43450369,43712513,43778051,44171265,44236801,44367875,44630017,44761089,44892161,45219841,45481985,45875201,46006273,46333953,46465026,46727169,47054849,47185921,47316993,47513601,48103425,48234497,48627713,49020929,49152001,49283073,49348611,49545217,49676291,49741825,50135041,50659329,50790401,50921475,51314689,51445763,51838977,51904513,51970051,52297731,52953089,53411842,53477377,53805059,54001665,54329347,54525953,55443457,55705609,55967747,56295427,56623107,56819715,59113473,60227593],"open":[39321601,55377921],"operators":[55312385],"outermost":[52035585,54853633,56098817],"offset":[16711686,17432582,17498118,18219014,37814274,38797314,40239106,41156610,44564486,50266113,50855937,52756481,59834370,60162050,60424194,60751874],"operations":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014678,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4522006,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,13434882,19791873,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705622,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227606,60358657,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"outperform":[48168961,48758785,49348609,56819713],"optimized":[15859713,19529729,27197441,30867457,31588353,32112641,32964609,37617665,53608449,55115777],"operator":[8257537,8912897,10878977,13565953],"outattribute":[19595266,24444930,24969218,25362434,25493506,25559042,25821186,26017794,26083330,26411010,26542082,26607618,26935298,27066370,27525122,27983874,28049410,28311554,28377090,28573698,28704770,28966914,29294594,29491202,29556738,29949954,30343170,30736386,30998530,31391746,31981570,32178178,33095682,34013186,34930690,35848194,37879810],"operation":[6029315,6488066,7274499,9109506,9633793,10747905,11534337,11927553,12910593,13107201,13303809,13500417,13828097,14090241,14155777,14286849,14876673,14942209,15007745,15269889,15597569,15925249,16252929,16515073,17104897,17235969,17760257,17825793,18087937,18284545,18546689,18743297,18808833,19070977,19333121,19398657,19660801,19726337,19988481,20054017,20512769,20643841,21037057,21299201,22609921,23199745,24248321,24969217,25100289,25231361,25493505,25690113,26083329,26214401,26542081,26607617,26673153,26804225,26935297,27590657,27656193,28114945,28311553,28508161,28639233,28835841,28901377,29097985,29163521,29360129,29425665,29491201,29622273,29687809,29884417,29949953,30015489,30736385,32178177,32309249,32833537,33685505,34275329,34734081,35127297,35454977,35848193,36044801,36503553,37224449,38207489,38469633,39190529,45613057,47710209,48234497,52559873,57278465]} \ No newline at end of file +{"outside":[14876673,16318465,16973825,18874369,19070977,19136513,20905985,22020097,71041025,72155137,72220673],"old":[61014017,64094212,67829762,76152833],"occurs":[589825,655361,720897,983041,1114113,1245185,1310722,1376257,1507329,45547521,71368705,72548353,74121217,75366402,75628545,78970882],"owner":[70582273,73465858,81133569],"object":[851979,1245185,1507329,1638406,1703947,1769481,1835019,1900555,1966091,2031625,2097165,2162699,2228235,2293771,2424834,2490378,2555915,2621451,2686987,2752525,2818060,2883595,2949129,3014665,3080203,3145737,3211275,3276812,3342356,3407881,3473420,3538988,3604491,3670019,3735566,3866635,3932171,3997708,4128779,4194315,4325388,4390924,4456449,4522029,4653065,4587531,4718598,4784130,4849675,4915206,4980737,5046281,5111819,5177355,5242892,5308427,5373976,5439500,5570574,5636107,5701643,5767180,5963807,6094859,6160395,6553611,6946827,7012353,7077899,7340038,7733253,7798789,7864331,7995394,8060934,8192019,8323084,8388621,8454150,8519682,8585223,8716311,8781830,8847365,8912910,8978445,9109506,9175048,9306135,9502743,9568265,9633806,9699336,9764869,9830423,9895942,9961481,10027020,10092564,10158086,10223629,10289154,10354700,10420237,10485777,10551303,10616837,10747905,10813454,10878988,10944524,11010071,11075599,11141127,11206679,11272201,11337735,11403287,11468821,11665411,11730951,11862019,11927559,11993091,12124167,12386311,12517383,12582916,12779533,12845063,12910599,13041671,13172740,13238276,13303813,13434881,13500420,13631495,13697025,13828097,13893639,13959175,14024715,14155781,14221319,14286850,14352386,14417922,14680077,14745603,14811137,15007757,15073281,15204359,15335426,15400963,15466498,15597569,15728645,15794178,15859715,15925250,15990801,16056330,16121870,16252940,16711691,17039366,17170438,17235969,17301508,17498118,17563649,17629186,17760258,17825795,17891333,17956870,18022405,18087940,18219015,18284548,18350088,18415622,18546692,18808848,19005448,19202049,19333122,19398662,19464197,19529734,19726338,19857413,19922960,19988481,20054030,20119555,20250629,20316161,20381698,20447240,20512770,20578305,20643847,20774915,21037062,21102597,21233670,21364741,21495812,21692418,21757953,21954562,22216705,22347781,22413326,22478849,22544386,22609925,22675458,22872070,22937603,23199757,23527425,23592961,23724033,23789583,23920649,24117250,24182787,24248324,24313862,24379405,24510465,24576002,24707074,24772610,24903682,25100289,25231366,25362448,25427974,25493506,25559043,25690119,25821193,26017794,26214403,26345475,26476546,26542088,26673155,26738694,26935302,27066370,27590659,27721731,27983874,28049421,28114957,28180482,28639238,29753347,30539777,31457281,31522817,31653891,32243714,32505857,32636929,33161217,33226753,33423361,33619970,33685505,33882113,34406402,34471938,34668546,34734081,34799617,34996225,35061761,35127297,35323905,35454977,35782657,35913729,36503553,36634625,37158914,37486593,37617665,37814273,38010881,38141953,38469633,38600706,38666241,38928385,38993921,39321601,39714817,39845889,39911425,39976962,40370177,40697858,41091073,41484290,41615361,41943041,42270721,42663946,43384834,43450370,43646981,43712513,44957697,45088773,45154305,45219841,45285378,45350920,45547523,45940739,46071812,46268420,46399493,46661633,46727169,46792705,46923783,47251457,47382532,47579138,47775745,48103427,48168968,48300036,48562178,48627717,48824321,48889857,49152005,49348609,49479683,49610753,49872897,50200577,50331649,50724865,51118081,51707911,51773445,52035587,52166667,52232194,52297729,52559873,52690945,52887554,53149697,53608453,53673985,54329346,54525957,54919169,55181313,55377923,56098819,56885253,57081860,57147393,57278466,57606145,57802753,57868295,57999367,58064897,58458119,58589189,58654721,58785794,58851329,59244549,59572233,59965447,60162057,60358657,60489729,60555272,60686344,60751878,60817409,60948488,61014019,61079568,61210625,62128136,62324737,62390279,62521345,62652417,62783493,62980097,63111169,63307777,63832065,63897605,63963138,64094212,64356357,64421892,64552968,64618497,64815112,65208322,65339393,65732615,66125826,66322433,66387969,66519047,66584577,66912265,67043329,67305479,67371009,67502081,67633157,67829761,68288520,68812806,68878340,68943884,69074945,69140488,69206017,69402625,69861386,69926929,69992449,70647815,70713352,70909964,71172108,71237641,71368716,71761932,71958529,72155137,72417293,72548364,72613900,73138193,73269249,73531404,73990154,74121230,74514445,74645521,74711052,74842122,74907656,74973185,75038731,75104280,75169804,75300866,75366412,75431953,75497489,75628568,75694083,75759626,75890691,75956270,76087320,76152847,76283923,76349448,76415007,76480524,76546060,76677131,76742670,76808195,76939273,77135889,77201409,77266959,77332492,77398028,77529096,77594625,77725701,77856793,77987885,78053378,78184469,78249996,78381057,78446594,78512142,78577679,78643202,78708748,78774276,78839815,78970893,79036419,79101953,79167498,79233032,79364103,79429635,79495186,79626252,79691788,79888396,79953944,80019468,80085028,80216074,80281624,80347148,80412675,80478220,80543765,80609282,80674828,80740359,80805900,80871436,81002520,81068056,81199123,81264664,81330190],"overriding":[69337089,79298561],"optional":[6684673,7405571,7733250,7929859,8650754,8847363,8978433,9043971,9175043,9633793,10354689,10682371,10878977,11468801,11599873,12713985,13959171,14155778,14352385,14483458,14680065,15007745,15925249,15990787,16056321,16121857,16252929,16515073,16711681,17760257,20447233,20512769,21037058,21364737,21626882,21692417,22413313,22544385,23199745,23789569,24117249,24903681,25362433,25624579,25821185,26279939,26607617,26738689,26869763,27656195,27787267,27852803,28049409,28114945,28442627,28573699,29032451,29097987,29229059,29294595,29425667,29622275,29818883,29884419,30015491,30146563,30277635,30670851,30736387,30801923,30932995,30998531,31064067,31719427,32047107,32112643,32178179,32309251,32374787,32440323,32768003,32833539,34078723,34209795,34275331,35651587,36175873,38207489,40894466,42074114,43057153,43581442,44433410,45023233,45547522,45744130,47513602,48037890,49741825,49807362,51970049,52625409,52756483,54591490,54984705,56819713,61079553,61341697,61538307,61734913,61931521,63766529,64225281,67174401,69926913,74186753,75956225,77987841,78839811,79888387,80347137],"occupying":[51511297],"optimized":[16580609,23003137,43843585,44564481,45613057,49283073,51380225,56819713,74186753,80347137],"override":[1114113,3342345,5963785,6029313,6291459,6356993,7208961,7405569,7536643,7602177,8257539,8519681,10682371,11272193,16580609,17498113,18087937,18284545,18546689,18939905,19529729,19726339,19791873,19988481,20119553,20316161,20381697,20578305,20774913,21037057,21102593,21299203,21430273,21495809,21561345,21626881,21692417,21757953,22216705,22478849,22544385,22609921,22872065,22937601,23003138,23199745,23527425,23592961,23855105,24117249,24182785,24313857,24379393,24576003,24641537,24707075,24903681,25100289,25362433,25427969,25296897,26017793,26083331,26476545,26542081,26607617,26738689,26804225,27066369,27983873,28049409,28639233,29360129,33226753,35454977,36634625,37879811,38010881,40501251,40632321,40697859,41353219,41484291,42139649,43319297,43843588,44171267,44564484,45613060,46333953,46465025,46989315,48955395,49283076,50135043,51380228,52428803,57344001,58458113,58916865,59179009,59965441,60096513,60162049,60555265,60620801,60686337,60817410,60948481,61669377,62259201,62324737,62717953,62849025,63242241,63963137,64159745,64815105,65601537,65732609,65798147,65994753,66322433,66387969,66453505,66650113,67239937,67371009,67567617,68091907,68288513,68878337,69140481,69206019,69468164,69664769,69795841,70057987,70254593,70713347,71106561,71237633,72089601,72286210,72351745,72482819,73334785,73662467,73793537,73990145,74252291,74907651,75759617,77070337,77463555,77922307,78381059,80085001,80543753],"operationcanceledexception":[62980097,72548358],"overall":[76939265],"overhead":[51707905,74776577],"outermost":[73924609,74448897,76611585],"occurred":[458753],"options":[3735566,5373966,7077893,8716302,9306126,9502734,9830414,11010063,11206670,11403278,13500418,13697026,14352386,14745602,14811138,15400962,15466498,15794178,15925250,16711682,17235970,17301506,17891330,18284546,19202050,19988482,20119554,20316162,21102594,21495810,22478850,22544386,22937602,23199746,23527426,24903682,25165826,25952258,26017794,27066370,27394050,28311554,35520514,36896770,37027842,37289986,38535170,38731778,39256066,39649282,40304642,40828930,40960002,41943042,42270722,42336258,42532866,43253762,43778050,44498946,44761090,44892162,45219842,45350916,45481986,45547524,45809666,47054850,47710212,47972360,48168964,48234498,48431105,48889858,49086466,49152001,49414146,49545222,50593794,50855940,50921474,51183620,51576835,51773441,52035585,52101122,52232193,52297730,52756481,52953089,53149697,53346305,54132738,54722564,54919170,55312388,55377921,55443459,55836680,58720260,59047939,59768833,60424195,61276161,63700993,65863681,72744962,75104273,75366413,76087319,76873730,76939266,77004802,77070338,77201409,77791233,77856782,78446594,78512142,79167494,79429634,79560705,79888385,79953934,80150530,80281617,80412674,81002513,81068046,81264657],"overloads":[37093377,39256065,40828929,42205185,43778049,45481985],"offset":[16449542,16646150,16842758,18153478,18677766,20185094,21168134,23986182,56885250,58195974,59244546,62783490,64356354,68550657,70189057,71434241,74645506,75497474,77135874,78184450],"overridable":[6029313,6356993,7208961,7405569,7602177,8519681,21430273,23003137,57344001,60096513],"operators":[75038721],"operation":[7405570,9043971,9633794,10485761,10682371,10813441,12779521,13500417,13697025,14352385,14745601,14811137,15400961,15466497,15794177,15925249,15990785,16711681,17039361,17170433,17235969,17301505,17891329,17956865,18284545,18415617,19202049,19398657,19988481,20054017,20119553,20316161,20840449,21102593,21233665,21495809,21889025,22347777,22478849,22544385,22937601,23199745,23527425,24903681,25231361,25624577,26017793,26279937,26869761,26935297,27066369,27525122,27656193,27787265,27852801,27918338,28246018,28442625,28508162,28573697,28704770,28770306,28835842,29032449,29097985,29229057,29294593,29425665,29491202,29556738,29622273,29818881,29884417,29949954,30015489,30081026,30146561,30212098,30277633,30343170,30408706,30474242,30605314,30670849,30736385,30801921,30867458,30932993,30998529,31064065,31129602,31195138,31260674,31326210,31588354,31719425,31784962,31850498,31916034,32047105,32112641,32178177,32309249,32374785,32440321,32571394,32702466,32768001,32833537,32964610,33030146,33095682,33357826,33816578,33947650,34209793,34078721,34275329,34340866,34537474,34603010,35586050,35651585,35848194,36175873,36896769,37027841,37552129,38207489,38535169,38731777,39256065,39649281,40108033,40304641,40435713,40828929,40960001,41943041,42270721,42336257,42532865,43122689,43253761,43778049,44040193,44498945,44761089,44892161,45219841,45481985,45809665,47054849,48037889,48234497,48365569,48889857,49086465,49217537,49414145,49807361,50593793,50921473,52101121,52297729,52953089,53149697,54132737,54460417,54919169,56229889,62980097,66453505,67698689,69337089,72548353],"output":[8585217,10944513,16580610,23003138,43843586,44564482,45613058,49283074,51380226,62062593,67567617],"operations":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342358,3407873,3538945,3604481,3866626,3932161,4128769,4194305,4325378,4456449,4521985,4653057,4587521,4718593,4784129,4849665,4915201,4980737,5046273,5111810,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963798,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,13303810,21757953,24248321,24772609,25493505,25559041,26214401,26345473,26673153,27000833,27590657,27721729,28180481,29163521,29753345,31457281,31653889,32243713,34013185,34471937,34734081,35782657,36110337,36765697,36962305,38469633,39845889,39976961,41091073,43384833,43450369,44957697,46661633,48824321,49348609,50069505,50200577,51707907,53739521,55902210,56557570,57606146,58064897,61472774,61865990,63832070,68943873,70909953,71172097,71368705,71761921,72024066,72417282,72548353,72613889,73269250,73531393,73990145,74121217,74317826,74514433,74711041,74842113,74973186,75038721,75104257,75169793,75300866,75366401,75431937,75628545,75694082,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742658,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80085014,80216065,80281601,80347137,80478210,80543766,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"obj":[7929861,9175041,9568257,9633793,10878977,11468801,11665409,12582913,43646977,46923777],"observed":[393217,49545217,66715649,80740353],"owns":[53608449,54525953,56885249,58785793,59244545,60751873,62783489,63897601,64356353,66125825,67633153,73138177,74645505,75497473,76283905,77135873,78184449,79495169,80084993,81199105],"operator":[8912897,9961473,11862017,19005441],"option":[72744961,76939274,77004801,77791234,78446594,79560705,80412677],"onexposedtoscriptcode":[2424833,13303812,76808193],"overridden":[1769474,2031618,2949122,3014657,3145730,3407873,4653058,5046274,11272193,72548353,73990146,74842114,75038722,75759618,78970881,79167490,80216066],"occurrence":[3211265,76414977],"outcome":[15990785],"objec":[4456450,4784130,4980738,21757953,24772610,25493506,53608451,54525954,56885251,57606145,59244547,60489729,60751875,62521345,62783491,63111169,63307777,63832065,63897602,64356355,65339393,67633154,73138179,73269250,74645507,74973186,75300865,75497475,75563009,75694082,76283907,76939265,77135875,78184451,79495170,80084994,81199106],"outattribute":[17498114,25559042,27525122,27918338,28246018,28508162,28704770,28770306,28835842,29491202,29556738,29949954,30081026,30212098,30343170,30408706,30474242,30605314,30867458,31129602,31195138,31260674,31326210,31588354,31784962,31850498,31916034,32571394,32702466,32964610,33030146,33095682,33357826,33816578,33947650,34340866,34537474,34603010,35586050,35848194,36044802,36175874,36241410,36372482,37552130,37748738,37945346,38076418,38207490,38273026,39387138,39518210,40042498,40108034,40239106,40435714,42401794,43122690,43515906,43581442,44040194,44433410,45744130,45875202,46858242,47513602,48037890,48365570,49217538,49741826,49807362,50987010,51970050,52625410,54460418,54984706],"optionally":[3735554,5373955,8716291,9306115,9502723,9830403,11010051,11206659,11403267,15269889,18219009,21430273,26542081,26804225,41353217,43909121,46989313,48496641,51904513,52822017,53018625,53870593,56164353,56623105,57409537,75104259,76087299,77856771,78512130,79953923,80281603,81002499,81068035,81264643],"overload":[6225921,6422529,6488065,6619137,6684673,6815745,6881281,7143425,7667713,7995393,8060929,8192001,8323073,8388609,8454145,8650753,8781825,8978433,9109505,9437185,9568257,9633793,9699329,10092545,10158081,10289153,10354689,10420225,10813441,10878977,11075585,11141121,11337729,11468801,11534337,11599873,11665409,11796481,11862017,11993089,12058625,12189697,12255233,12451841,12582913,12713985,12779521,12976129,13172737,13238273,13369345,13434881,13500417,13565953,13697025,13762561,13828097,14024705,14155777,14286849,14352385,14483457,14548993,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15269889,15335425,15400961,15466497,15597569,15728641,15794177,15859713,15925249,16187393,16318465,16384001,16449537,16515073,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17170433,17235969,17301505,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18284545,18219009,18350081,18415617,18481153,18546689,18677761,18743297,18874369,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19660801,19857409,19988481,20119553,20185089,20250625,20316161,20447233,20512769,20578305,20643841,20709377,20774913,20905985,20971521,21037057,21102593,21168129,21233665,21364737,21430273,21495809,21561345,21626881,21692417,21823489,21954561,22020097,22085633,22151169,22216705,22282241,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23134209,23199745,23265281,23396353,23461889,23527425,23592961,23724033,23855105,23920641,23986177,24051713,24117249,24182785,24313857,24379393,24641537,24903681,24969217,25034753,25100289,25165825,25231361,25427969,25559041,25690113,25296897,25755649,25821185,25952257,26017793,26214401,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26935297,27066369,27131905,27197441,27262977,27394049,27459585,27525121,27590657,27721729,27918337,27983873,28246017,28311553,28508161,28639233,28704769,28770305,28835841,28966913,29360129,29491201,29556737,29687809,29753345,29949953,30081025,30212097,30343169,30408705,30474241,30539777,30605313,30867457,31129601,31195137,31260673,31326209,31457281,31522817,31588353,31653889,31784961,31850497,31916033,32505857,32571393,32636929,32702465,32899073,32964609,33030145,33095681,33226753,33292289,33357825,33423361,33554433,33619969,33685505,33751041,33816577,33947649,33882113,34013185,34340865,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35586049,35717121,35782657,35848193,35913729,36044801,36110337,36175873,36241409,36306945,36438017,36372481,36503553,36569089,36634625,36765697,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37552129,37617665,37748737,37814273,37945345,38010881,38076417,38141953,38207489,38273025,38469633,38535169,38600705,38666241,38731777,38797313,38862849,38928385,39256065,39387137,39518209,39583745,39649281,39714817,39845889,39911425,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40566785,40632321,40763393,40828929,40894465,40960001,41025537,41091073,41222145,41287681,41353217,41418753,41615361,41680897,41811969,41877505,41943041,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42795009,42860545,42991617,43057153,43122689,43253761,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43909121,43974657,44040193,44105729,44236801,44302337,44367873,44433409,44498945,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45350913,45481985,45416449,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46399489,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47710209,47775745,47841281,47906817,47972353,48037889,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,49020929,49086465,49152001,49217537,49348609,49414145,49479681,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51445761,51576833,51642369,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52297729,52363265,52494337,52559873,52625409,52822017,52887553,53018625,53215233,53346305,53411841,53477377,53739521,53870593,54067201,54132737,54263809,54329345,54460417,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55312385,55377921,55443457,55836673,55967745,56098817,56164353,56295425,56623105,56754177,57016321,57081857,57212929,57409537,57802753,57933825,58064897,58654721,58720257,58851329,59047937,59572225,60424193,61079553,62259201,62652417,64618497,65077249,66912257,69926913,72286209,73990145,74842113,76021761],"obsoleteattribute":[22085636,64094212,69402628,76218372,76611588],"omit":[8060929,8192001,8323073,8781825,10092545,10420225,17039361,17170433,17956865,18415617,18808833,19398657,19922945,20054017,21233665,25231361,26935297],"outperform":[57147393,67502081,69206017,78381057],"one":[3014657,3407873,3342337,4521986,5963777,7995394,9109506,10027009,10158081,10485761,11337729,12976129,13041665,13303809,13369345,13762561,15138817,15990785,16711682,20447233,23199746,25821185,39256065,40828929,43778049,43974660,45481985,46596098,56950785,58458113,59703297,59965441,60162049,60358659,60555265,60948481,62455813,62980099,63176705,64552961,64815105,67305473,68419585,68812801,69664769,70647809,72548356,73334785,74121221,75956226,77987841,78905349,78970884,80084993,80543745,80871425],"objects":[3342337,5963777,8454145,8978433,10354689,14286849,14352385,14417921,15335425,15466497,15794177,15925249,16711682,17760257,18219011,20381697,20512769,21692417,22544385,23199746,24117249,24903681,26017793,26476545,26542083,27066369,27983873,45547521,57737218,58130434,60293122,61407234,62193666,62259201,62324737,62390273,63045634,64684034,65273858,66519041,67043329,69533698,70713345,72286209,74907649,75038721,75104258,75235330,75431937,75563009,76087298,76414977,76939268,77856770,78446594,78512130,79953922,80084994,80281602,80412674,80543745,81002498,81068034,81264642],"overloaded":[9568258,10878977,11468801,11665409,11862017,16711681,19005442,23199745],"occupies":[64094212],"open":[49545217,74776577],"older":[56360961,62849025,67895297],"ownerhandle":[70582273,73465860,81133569],"obsolete":[22085633,52363265,56426497,61014018,61276161,64094209,69402625,71172097,72744961,76152834,76218369,76611585,76939266,77201409,77856769,79560705],"overrides":[2228228,3014658,3407874,3932161,5177345,5373953,5636097,6291457,6356993,7536641,8257537,8716292,9306113,9830401,10682369,11010053,11206657,11403265,19726337,21299201,21757954,24576001,24707073,26083329,37879809,40501249,40697857,41353217,41484289,43843585,44171265,44564481,45613057,46989313,48955393,49283073,50135041,51380225,52428801,54001667,55640065,57737217,60293123,62193665,63045633,65273857,65798145,68091905,69206017,69468161,69533698,70057985,70713345,72482817,72548354,73662465,74252289,74907649,75104258,75169797,76087304,77463553,77856769,77922305,78381057,78708737,78970882,80281602,80674819,80871425,81002498,81068038,81264642,81330177]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_112.json b/docs/Reference/fti/FTI_112.json index 7f744ee7a..20f5ab53f 100644 --- a/docs/Reference/fti/FTI_112.json +++ b/docs/Reference/fti/FTI_112.json @@ -1 +1 @@ -{"process":[15859713,19529729,27197441,30867457,31588353,32112641,32964609,50200578,50724865,53936130,54460417,59441154],"precedence":[6815745,7405569,7864321,8847361,49610753,50790401],"parameters":[5242882,5373953,5505025,5570561,5767169,5832705,5898241,6094849,6029313,6160385,6225921,6422529,6488065,6750209,6815745,6946817,7012353,7077890,7143425,7274497,7405569,7471105,7602178,7864321,7929857,8060929,7995393,8126465,8257538,8323073,8388610,8454145,8519681,8585217,8650753,8847361,8912898,9043970,9109505,9175041,9240578,9306115,9371649,9437185,9502721,9568258,9633793,9699330,9764865,9830403,9895938,9961473,10027009,10092545,10158081,10223617,10289154,10354690,10420226,10485762,10551297,10616834,10682370,10747905,10813441,10878977,11010049,11075586,11141122,11206658,11272193,11337730,11468801,11534337,11599873,11665410,11730945,11796481,11862017,11927553,12058626,12124161,12189698,12255234,12320769,12386305,12451841,12517377,12582914,12648449,12713986,12779521,12845057,12910593,13041666,13107201,13172737,13238273,13303810,13369345,13434881,13500418,13565953,13631489,13697026,13762561,13828097,13893633,13959170,14024705,14090241,14155777,14221313,14286850,14352385,14417921,14483458,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007746,15073281,15138818,15204353,15269890,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794178,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16580610,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104898,17170433,17235969,17301505,17432577,17498113,17563649,17629185,17694721,17760257,17825794,17891329,18087937,18153473,18219009,18284545,18350081,18415617,18546690,18612225,18743297,18808833,18874369,18939905,19005441,19070977,19136514,19202049,19333122,19398657,19464193,19529729,19595265,19660801,19726337,19857409,19922946,19988481,20054017,20119553,20250625,20381697,20447233,20512769,20643841,20709378,20774913,20905985,21037058,21102593,21233665,21299201,21364737,21430274,21495809,21561345,21626881,21692417,21757953,21823489,21889026,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22609922,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23199746,23265281,23396354,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248322,24444929,24510465,24641537,24772609,24838145,24903681,24969217,25034753,25100290,25165825,25231361,25296897,25362433,25493505,25559041,25624577,25690113,25755649,25821185,25886721,26017793,26083329,26214401,26411009,26476545,26542081,26607617,26673153,26738689,26804225,27000833,26935297,27066369,27131905,27197441,27394049,27459585,27525121,27590657,27656193,27721729,27852801,27918337,27983873,28049409,28114945,28180481,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29884417,29949953,30015489,30081025,30146561,30343169,30408705,30474241,30605313,30736385,30867457,30998529,31129601,31260674,31326210,31391745,31522817,31588353,31850497,31981569,32112641,32178177,32309249,32768001,32833537,32964609,33095681,33161217,33226753,33554433,33685505,33947650,34013185,34144257,34275329,34734081,34930689,35127297,35454977,35848193,36044801,36306945,36503553,36569089,37224449,37486593,37879809,38207489,38273025,38469633,38731777,39190529,39452673,41680897,42401793,42467329,43122689,45613057,49152001,50003969,52166657,55771137,55836673,56360961,57212929,57278465,57933825,60751873],"propertynames":[37027841,37814273,38797313,39518209,40239105,41156609,43515908,47120385,47644673,48824321,57409541,58916865,59375617,59834369,60162049,60227585,60293121,60424193,60751873,61014017],"populate":[8323073,9306113,9568257,9830401,12255233,18415617,23658497],"place":[13828097,19398657,61145089],"propertychangedeventargs":[589826],"progress":[50724865,54460417],"persists":[983041],"protected":[6619139,7340035,7667715,18874372,19791873,19857411,21692419,22151171,22740995,34734083,35127299,36044803,38207491,38273028,39190531,43122692,45613059],"patching":[61669379],"public":[589827,720899,917507,1048579,1114115,1179651,1245187,1376259,1441795,1507331,4915203,5242883,5308419,5373955,5505027,5570563,5636099,5701635,5767171,5832707,5898243,5963779,6029315,6094851,6160387,6225923,6422531,6488067,6684675,6750211,6815747,6946819,7012355,7077891,7143427,7274499,7405571,7471107,7602179,7733251,7864323,7929859,7995395,8060931,8126467,8192003,8257539,8323075,8388611,8454147,8519683,8585219,8650755,8781827,8847363,8912899,9043971,9109507,9175043,9240579,9306115,9371651,9437187,9502723,9568259,9633795,9699331,9764867,9830403,9895939,9961475,10027011,10092547,10158083,10223619,10289155,10354691,10420227,10485763,10551299,10616835,10682371,10747907,10813443,10878979,10944515,11010051,11075587,11141123,11206659,11272195,11337731,11403267,11468803,11534339,11599875,11665411,11730947,11796483,11862019,11993091,12058627,12124163,12189699,12255235,12386307,12451843,12517379,12582915,12779523,12910595,12976131,13565955,16121859,16252931,16318467,16384003,16515075,16842755,16973827,17039363,17104899,17235971,17629187,17694723,17760259,17825795,18087939,18153475,18284547,18415619,18546691,18612227,18677763,18743299,18808835,18874369,18939907,19005443,19070979,19136515,19267587,19333123,19398659,19464195,19529731,19595267,19660803,19726339,19922947,19988483,20054019,20119555,20185091,20250627,20316163,20381699,20447235,20512771,20578307,20643843,20709379,20774915,20840451,20905987,20971523,21037059,21102595,21168131,21233667,21299203,21364739,21430275,21495811,21561347,21626883,21757955,21823491,21889027,21954563,22020099,22085635,22216707,22282243,22347779,22413315,22478851,22544387,22609923,22675459,22806531,22872067,22937603,23003139,23068675,23134211,23199747,23265283,23330819,23396355,23461891,23527427,23592963,23658499,23724035,23789571,23855107,23920643,23986179,24051715,24117251,24182787,24248323,24313859,24379395,24444931,24510467,24576003,24641539,24707075,24772611,24838147,24903683,24969219,25034755,25100291,25165827,25231363,25296899,25362435,25427971,25493507,25559043,25624579,25690115,25755651,25821187,25886723,25952259,26017795,26083331,26148867,26214403,26279939,26345475,26411011,26476547,26542083,26607619,26673155,26738691,26804227,26869763,27000835,26935299,27066371,27131907,27197443,27262979,27328515,27394051,27459587,27525123,27590659,27656195,27721731,27787267,27852803,27918339,27983875,28049411,28114947,28180483,28246019,28311555,28377091,28442627,28508163,28573699,28639235,28704771,28770307,28835843,28901379,28966915,29032451,29097987,29163523,29229059,29294595,29360131,29425667,29491203,29556739,29622275,29687811,29753347,29818883,29884419,29949955,30015491,30081027,30146563,30212099,30343171,30408707,30474243,30539779,30736387,30801923,30867459,30998531,31129603,31260675,31326211,31391747,31522819,31588355,31653891,31850499,31916035,31981571,32112643,32178179,32243715,32309251,32702467,32768003,32833539,32964611,33095683,33161219,33554435,33685507,34013187,34144259,34275331,34930691,35520515,35454979,35848195,36306947,36503555,36569091,37224451,37486595,37879811,38273025,38469635,38731779,39452675,39583747,40108035,40894467,41549827,41746435,42270723,42467331,42663939,42795011,42860547,42926083,43122689,43253763,43319299,43384835,43450371,43712515,43778051,43843587,43974659,44171267,44236803,44302339,44367875,44498947,44630019,44695555,44761091,44892163,45023235,45219843,45285379,45481987,45547523,45875203,46006275,46071811,46333955,46465027,46661635,46727171,46792707,47054851,47185923,47251459,47382531,47448067,47513603,47579139,48037891,48103427,48234499,48431107,48562179,48627715,48758787,49020931,49086467,49152003,49217539,49283075,49348611,49479683,49545219,49676291,49741827,49807363,49872899,50003971,50069507,50135043,50200579,50266115,50331651,50462723,50593795,50659331,50724867,50790403,50855939,50921475,50987011,51118083,51183619,51249155,51314691,51380227,51445763,51511299,51576835,51707907,51773443,51838979,51904515,51970051,52035587,52101123,52166659,52232195,52297731,52363267,52428803,52494339,52559875,52625411,52690947,52756483,52822019,52887555,52953091,53018627,53084163,53149699,53215235,53280771,53346307,53411843,53477380,53542915,53608451,53673987,53739523,53805059,53870595,53936131,54001667,54067204,54132739,54198275,54263811,54329347,54394883,54460419,54525955,54591491,54657027,54722564,54788099,54853635,54919171,54984707,55050243,55115779,55181315,55246851,55312388,55443459,55508995,55574531,55640067,55705604,55771139,55836675,55902211,55967747,56033283,56098819,56164355,56229891,56295427,56360963,56426499,56492035,56557571,56623107,56688643,56754179,56819715,56885251,56950787,57016323,57081859,57147395,57212932,57278467,57344003,57409539,57475075,57540611,57606147,57671683,57737219,57802755,57868291,57933828,57999364,58064899,58130435,58195971,58261507,58327043,58392580,58458115,58523652,58589187,58654724,58720259,58785796,58851332,58916867,58982404,59047939,59113476,59179011,59244547,59310083,59375619,59441155,59506692,59572227,59637763,59703299,59768835,59834371,59899907,59965444,60030979,60096516,60162051,60227588,60293123,60358660,60424195,60489732,60555267,60620803,60686339,60751875,60817412,60882948,60948483,61014019,61079555,61145091,61210627,61276163,61341699,61407236,61472771,61538308,61603844,61669379],"particularly":[43057153,46465025],"path":[8650753,10616834,43843585,46071809,59572228],"programming":[7471105,7929857,7995393,8585217,9240577,9895937,16252929,17104897,17825793,18153473,18546689,19005441,19333121,19726337,20054017,20512769,21299201],"propertyindices":[37027841,37814273,38797313,39518209,40239105,41156609,42991620,47120385,47644673,48824321,56885253,58916865,59375617,59834369,60162049,60227585,60293121,60424193,60751873,61014017],"polluting":[41549825,47251457],"periodically":[45678593,51904513],"previously":[4980748,7208972,24969217,25362433,25493505,26083329,26411009,26542081,26607617,26935297,27066369,27983873,28049409,28311553,28377089,28573697,29294593,29491201,29949953,30343169,30736385,31981569,32178177,34013185,35192838,35848193,36372486,37879809,38666246,39714822,58261516,60817420],"pending":[7208961,26869761,60817409],"properties":[1769473,3276801,4259841,8126466,8454146,8519681,9371649,9437186,9502721,9633793,10027009,10092545,10354689,10551297,10944513,11141121,11534337,11927553,12255233,12320769,12648449,12713986,12845057,12910593,13041666,13107201,13303809,13369345,13500418,13697026,13828100,13959169,14024705,14090241,14155777,14286850,14417921,14483458,14876673,14942209,15007746,15138818,15269890,15597569,15925249,16515073,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19136514,19398660,19660801,19922946,19988481,20119553,20643841,20709378,20774913,21037058,21364737,21430274,21495809,21889026,22413313,22478849,22609921,23199746,23265281,23396353,24248322,25100290,34537474,34996226,35389442,36634626,37027842,37093378,37617666,37814274,38010883,38141954,38404098,38535170,38797314,38928386,38993922,39059458,39256066,39321601,39387138,39518210,39780354,39911426,40239106,40304642,40435714,40632322,40697858,41156610,41222146,41484290,41549825,42008578,42074114,42205186,42532866,42598402,43057154,43188226,43909122,44957698,45088770,45416450,45744130,45809666,46137346,46202882,46268418,46465026,46596098,46858242,46923778,47120386,47251457,47644674,47775746,47972354,48365570,48824322,49676289,49938433,51183617,51576833,52166657,52297729,52428801,52822017,53084161,53280769,53477377,53673985,53870593,54067202,54722562,55115777,55312385,56426498,56754177,56950785,57278465,57540612,57999362,58130433,58195969,58261505,58327041,58392577,58458114,58523649,58589185,58654721,58851329,58916865,58982401,59113473,59244545,59310081,59375617,59506690,59703297,59834370,59899905,60030978,60096513,60162049,60227585,60293121,60358658,60424194,60489729,60751873,60817409,60882945,60948481,61014017,61276162,61407233,61538305,61603841],"profile":[1048577,1179649,3604483,4980739,7208963,23134211,23724035,24838148,25165829,25624582,25755654,26148865,27262977,30081028,34340867,37093377,38076419,38404097,38731781,39321603,42074113,48562177,49217538,49807361,50266114,50855938,50987010,52756482,53215233,53608449,53673988,54198274,54394881,54919169,55115777,55508993,55574530,55902209,56033281,56688641,56754178,57081857,57475074,57737217,57868289,58261508,60817412],"procedure":[3735553,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,14221314,21757954,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"passed":[9699329,9830401,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12255234,12582913,12910593,61472769,61669377],"promis":[20054017],"performs":[2621441,2686977,2818049,3145729,3211265,3407873,3670017,3735554,4128769,4521985,4587523,4980738,5046273,5177345,6291459,6356995,6553603,7208963,7536643,8716291,8978435,9109505,12910593,14352385,19791873,22937601,23986177,24576001,24707073,27918337,30212097,31916033,34865153,36110337,36831233,40763393,42467329,57147393,58195971,58261506,58327042,58392579,58785793,58916865,59375617,59768833,59834369,60096515,60162049,60227585,60293121,60424193,60751873,60817411,60882947,61014017,61407235,61538307,61603843],"profiles":[4980737,7208961,24838145,25624577,25755649,26148865,27262977,30081025,50987009,55574529,58261505,60817409],"prevent":[50200577,53936129],"post":[59441153],"port":[4980738,25231362,26214402,26804226,27590658,27656196,28835842,28901378,29163522,29425666,29622276,29884418,30015490,33816580,38338564,39387138,40370178,55181318,58261510,58851330,60817412],"policy":[51773441,53346305,59441153],"point":[9043969,39059457,40632321,42074113,42205185,42795010,43909121,44957697,45088769,46268417,47775745,48889858,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"progid":[3735560,4587528,6291464,6357000,6553608,7208968,7536648,8323079,8650759,8716296,8978440,11927560,12320776,12845064,14024712,14942216,15597576,15925256,16842761,18350088,18612233,19070985,19660809,19988489,20643849,22478857,23265289,31064068,32047108,33423364,34209796,34734087,35127303,36044807,38207495,39190535,45613063,58195976,58327048,58392584,60096520,60817416,60882952,61407240,61538312,61603848],"particular":[2752513,13303809,13959169,22609921,23396353,57540609],"paths":[41222145,43843585,45416449,46071809,53870593,60030977],"presentation":[13631489,14548993,16187393,16908289,22151169,22740993,23068673,23789569,23920641,24641537,24969217,25362433,26673153,26738689,27459585,27590657,28180481,28508161,28639233,28901377,28966913,29097985,29163521,29425665,29622273,29884417,29949953,30146561,31129601,31391745,31850497,33161217,33554433,33685505,34275329,34734081,35127297,36044801,36306945,36569089,37224449,37486593,37879809,38207489,38469633,39190529,45613057],"perform":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4653057,4849665,4980737,5046273,5111809,5439489,6881281,6946817,7798785,9109505,14352385,22937601,23986177,27918337,42336257,42467329,45875201,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58261505,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59637761,59703297,59768833,59899905,60227585,60358657,60489729,60555265,61145091,61472769],"power":[61145089],"processing":[24969217,25493505,26083329,26542081,26607617,26935297,28311553,29491201,29949953,30736385,32178177,35848193,39321601,59441153,60686338],"proc":[3407873,5046273,9568262,58785793,59768833],"ptr":[15728641,15794177,16580609,19202049],"params":[7143425,8060929,8126465,9109505,9437185,9502721,9961473,10092545,10158081,10354689,10616833,10747905,11141121,11272193,11796481,12124161,12386305,12517377,12713985,12779521,13041665,13500417,13697025,14221313,14286849,14614529,15400961,15990785,16646145,17891329,19136513,19922945,21626881,21757953,21889025,22282241,23003137,23199745,23592961,24248321,24903681,42401793,56360961],"programmatic":[3735560,4587528,6291464,6357000,6553608,7208968,7536648,8323073,8650753,8716296,8978440,11927554,12320770,12845058,14024706,14942210,15597570,15925250,16842754,18350082,18612226,19070978,19660802,19988482,20643842,22478850,23265282,31064068,32047108,33423364,34209796,34734082,35127298,36044801,38207490,39124993,39190530,40173569,41287681,41811969,45613057,58195976,58327048,58392585,60096521,60817416,60882952,61407241,61538313,61603848],"physical":[39911425,49872898,59244545],"private":[45023233],"promises":[61145090],"privateaccess":[59965441],"propert":[52822017,53280769],"propertychanged":[131073,196609,262145,589830,54067201,56426497,57999361],"propagation":[38404097,42074113,52035586,56098818,58261505,60817409],"performance":[5242881,26476545,38010881,39321601,55377921,55705601,61145092],"parser":[60620804],"protocol":[23134209,23724033],"packages":[9699329,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12582913],"promise":[2949129,16252933,17104900,17825797,18546692,19333125,19726340,20054023,20512773,21299204,38862857,59441153,61079561,61145090,61341698],"populates":[3080193,5111809,18415617,23658497,58654721,58982401],"possibilities":[49610753,50790401],"propertychangedeventhandler":[589832],"pass":[8388609,9306113,9568257,61669377],"provides":[3014669,4521997,5177345,9109505,13631489,13828097,19398657,23789569,31195137,36634625,38010892,39256065,39321601,39976961,40566786,44302337,50921473,55246849,55705613,56229889,56426497,56492033,57278465,57671681,57999361,58195969,58523649,58720257,58785793,58851329,59310082,59768833,60227598,60489730,60882945,61014017,61145089,61603841],"processed":[24969217,25493505,26083329,26542081,26607617,26935297,28311553,29491201,29949953,30736385,32178177,35848193,52035585,56098817],"page":[983041,41943044],"processes":[24444929,24969217,25493505,25559041,25821185,26017793,26083329,26542081,26607617,26935297,27525121,28311553,28704769,28966913,29491201,29556737,29949953,30736385,30998529,31391745,32178177,33095681,34930689,35848193],"possible":[13631489,23789569,59965441],"parent":[7077889,7143425,8060929,52035585,54067201,56098817],"propertybag":[131073,196610,262145,589825,1769486,3276809,4259854,5373953,10944517,11599877,16121858,16318472,16515074,16973831,17039363,17629190,17694722,18284546,18808834,19595266,20185094,31719433,34537480,38010881,42663938,43188230,43253762,45809672,48431106,49152002,54067228,56426521,57999388],"permitted":[38404097,39059457,40632321,42074114,42205185,43057153,43909121,44957697,45088769,45154306,46268417,46465025,47775745,50724865,51314690,54460417,58195969,58261505,58327041,58392577,60096513,60817410,60882945,61407233,61538305,61603841],"platforms":[47382529,61145089],"preventing":[59441154],"passing":[9699329,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12255233,12582913,15728641,15794177,16580609,19202049,55836673],"present":[13631489,14548993,15466497,15532033,16187393,16908289,22216705,22806529,23068673,23789569,23920641,24641537,50593793,61210625],"paramarray":[7143425,8060929,8126465,9109505,9437185,9502721,9961473,10092545,10158081,10354689,10616833,10747905,11141121,11272193,11796481,12124161,12386305,12517377,12713985,12779521,13041665,13500417,13697025,14221313,14286849,14614529,15400961,15990785,16646145,17891329,19136513,19922945,21626881,21757953,21889025,22282241,23003137,23199745,23592961,24248321,24903681,42401793,56360961],"profiler":[1179649,39321601,55902209,56033281],"past":[50266113,50855937,52756481],"part":[44433409,50659329],"platform":[16252929,18546689,19333121,21299201,47382529],"property":[131074,196610,262145,589827,1769479,2621446,2686982,2818054,3014658,3145734,3211270,3276807,3407878,3670022,4128774,4259846,4521992,4915202,5046278,5177350,5373954,5898242,6160386,7143427,8060931,8519685,9175041,9371653,9633798,9830401,10027013,10551301,10878977,10944513,11534342,12255233,13565953,13828100,14614533,14811140,15335428,15663108,16121860,16318466,16515073,16973826,17039364,17170436,17629186,17694724,17891333,18284549,18808837,19398660,19595270,20185090,21626885,23527428,24117252,24182788,24903685,25296900,31719427,33357827,34537477,35323907,35782659,35913731,35979267,36241411,36438019,36700163,36896771,36962307,37027844,37289987,37814276,38797316,39059458,39518212,39583749,39845892,40042503,40108036,40239108,40501252,40632322,40828932,40894468,40960004,41025540,41091075,41156612,41353221,41549829,41615364,41680902,42074114,42139652,42205186,42270724,42336263,42401799,42663942,42729476,42795014,42860548,42926084,42991622,43057157,43188229,43253766,43319300,43384837,43450373,43515910,43581444,43646980,43712516,43843588,43909122,43974660,44040196,44105732,44171271,44236804,44302340,44433413,44498948,44564484,44630020,44761093,44826628,44892164,44957698,45023237,45088770,45154309,45219845,45285380,45350916,45481988,45547524,45678596,45809668,45875207,45940740,46006276,46071813,46268418,46333958,46399492,46465029,46530564,46661636,46727172,46792709,46989316,47054853,47120388,47185924,47251461,47316999,47382533,47448068,47513604,47579140,47644676,47710213,47775746,47841284,47906821,48037892,48103428,48168965,48234501,48300036,48431110,48496644,48562180,48627716,48693252,48758789,48824324,48889862,48955396,49020932,49086468,49152007,49217541,49283076,49348613,49414149,49479684,49545220,49610758,49676293,49741828,49807364,49872900,49938437,50003969,50069508,50135044,50200582,50266116,50331652,50397188,50462724,50528261,50659333,50724869,50790406,50855940,50921477,50987013,51052550,51118084,51183621,51249157,51314693,51380228,51445765,51511301,51642373,51707910,51773444,51838981,51904516,51970052,52035589,52101126,52232196,52297733,52363268,52494342,52559877,52625413,52690948,52756484,52822023,52887557,52953092,53018628,53149700,53215236,53280774,53346308,53411847,53542916,53608452,53739524,53805061,53936134,54001669,54067214,54132740,54263812,54329349,54394885,54460421,54525956,54591493,54657028,54722564,54788100,54853637,54919172,54984708,55050244,55181316,55443461,55508996,55574533,55640068,55705602,55771142,55967749,56033284,56098821,56164356,56295429,56360967,56426510,56557572,56623109,56688645,56819717,56885254,57081860,57344004,57409542,57475076,57606148,57737220,57868292,57999374,58195970,58327042,58392578,58785798,58916874,59375626,59506692,59637762,59768838,59834378,60096514,60162058,60227596,60293130,60358660,60424202,60751882,60817410,60882946,61014026,61145090,61407234,61538306,61603842,61669378],"pairs":[45744129,58654721],"provider":[8519681,9109505,9633793,10027009],"provide":[3014657,4521985,7143425,8060929,26476545,38535169,39059457,39321601,39976961,40566785,40632321,42074113,42205185,43581441,43909121,44957697,45088769,45744129,46268417,47185921,47382529,47775745,54067201,55377924,55705601,58195969,58327041,58392577,58654721,60096513,60227585,60817409,60882945,61407233,61538305,61603841],"provided":[2752513,8519681,9109505,9371649,9633793,9961473,10027009,10092545,10158081,10551297,10747905,10944513,11141121,11534337,57540609,60686341],"predicate":[4259842,11272198,11468806,12451846,12779526,36765698,37683202,54067204],"profil":[37093381,38141953,39321601,48562177,49217537,49807361,50855937,52756481,53215233,53673989,55115777,56754177],"pause":[50593793,61145089],"predate":[52690945,53149697,53542913,54263809],"parameter":[7471105,7929857,7995393,8585217,9240577,9699329,9895937,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12255233,12582913,16252929,17104897,17825793,18153473,18546689,18874369,19005441,19333121,19726337,20054017,20512769,21299201,38273025,43122689],"prepared":[45023233]} \ No newline at end of file +{"presentation":[15269889,16384001,18219009,19464193,22085633,22740993,26542081,26804225,28639233,29360129,35258369,36372481,36896769,37027841,38731777,39387137,39649281,39714817,41287681,41680897,41943041,42205185,42270721,42401793,42532865,42991617,43778049,44040193,44302337,44498945,44761089,45219841,45481985,45875201,46530561,47316993,48234497,49086465,49217537,50331649,50528257,50593793,52101121,52297729,52953089,53149697,54132737],"point":[10223617,57737217,58130433,60293121,61407233,61669378,62193665,63045633,64684033,65273857,67764226,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"present":[15269889,15728641,16187393,16384001,18219009,19464193,22872065,23855105,26542081,26804225,28639233,29360129,77660161,78118913,79233028],"propagation":[59834369,60293121,73924610,74448898,75366401,76087297],"platform":[67895297],"page":[458753,61603844],"process":[16580609,23003137,43843585,44564481,45613057,49283073,51380225,71041026,71827457,72220674,73400321,77791234],"polluting":[61734913,61931521],"policy":[70778881,74383361,77791233],"preventing":[77791234],"proc":[3538945,4521985,10944518,75956225,77987841],"patching":[80412675],"provider":[9633793,9699329,10813441,11993089],"params":[7995393,8978433,9109505,9633793,10027009,10158081,10354689,10485761,10747905,10878977,11337729,11468801,11599873,12713985,12976129,13041665,13369345,13762561,14352385,14417921,14680065,15007745,15138817,15925249,16056321,16121857,16252929,17760257,20381697,20447233,20512769,21692417,22413313,22544385,23789569,24117249,24903681,25362433,25821185,28049409,28114945,61079553,69926913],"prepares":[3866625,4325377,5111809,5242881,5439489,5701633,6946817,34406401,39976961,45285377,51707905,72417281,74514433,75890689,76742657,77266945,78577665,79626241,80478209],"populates":[3014657,3407873,19726337,24707073,72548353,78970881],"propertychangedeventhandler":[1114120],"power":[76939265],"protocol":[41549825,43188225],"parameter":[8060929,8192001,8323073,8781825,10092545,10420225,10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,13959169,14221313,15204353,17039361,17170433,17956865,18415617,18808833,19398657,19922945,20054017,21233665,21430273,25231361,26935297,41353217,46989313],"profiler":[393217,49545217,66715649,80740353],"particular":[3211265,17891329,20250625,21102593,22609921,76414977],"pause":[76939265,78118913],"perform":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8519681,9633793,9895937,15532033,24444929,39190529,40501249,44171265,64421889,68878337,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75169793,75366401,75431937,75628545,75759617,75956225,76152833,76349441,76480513,76546049,76742657,76939268,77266945,77332481,77398017,77529089,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79429633,79626241,79691777,79888385,80019457,80084993,80216065,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81330177],"propertybag":[589826,720897,1114113,1376257,1966094,2883598,3080201,6422529,12582917,13107205,17498114,17694726,18481158,18939907,19529730,19660808,19791874,20840450,20971527,21889026,22347778,45547521,53084168,54394886,55705608,55967753,59310082,60686338,63242242,65732610,71368732,74121244,75628569],"preparing":[31457281,32505857,33619969,34471937,34668545,34734081,34799617,35061761,35782657,37158913,38141953,38469633,38600705,39976961,43384833,43450369],"paramarray":[7995393,8978433,9109505,9633793,10027009,10158081,10354689,10485761,10747905,10878977,11337729,11468801,11599873,12713985,12976129,13041665,13369345,13762561,14352385,14417921,14680065,15007745,15138817,15925249,16056321,16121857,16252929,17760257,20381697,20447233,20512769,21692417,22413313,22544385,23789569,24117249,24903681,25362433,25821185,28049409,28114945,61079553,69926913],"platforms":[67895297,76939265],"physical":[55246849,69730306,77398017],"possibilities":[62128129,71237633],"passing":[10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,13959169,14221313,14876673,15204353,16318465,16973825,18874369,19070977,19136513,20905985,22020097,78249985],"prevent":[71041025,72220673],"predicate":[2883586,12451846,13369350,13565958,13762566,43974658,50462722,74121220],"profiles":[7077889,11010049,35389441,35520513,37289985,38338561,39124993,42467329,71565313,74055681,75366401,76087297],"progid":[3735560,5373960,8716296,8847367,9175047,9306120,9502728,9830408,11010056,11206664,11403272,13238280,13697032,13828104,15400968,15597576,15859720,17301512,18546697,19202056,20119561,20316169,20578313,20774921,21495817,23527433,25100297,42270727,45219847,45350916,47710212,48168964,50593799,51183620,52953095,53149703,54132743,75104264,76087304,77856776,78512136,79953928,80281608,81002504,81068040,81264648],"provide":[3342337,5963777,7995393,9109505,47120385,48103425,49545217,52232193,53673985,57737217,58130433,60293121,60358657,61407233,62193665,62324737,62980097,63045633,64684033,65273857,67043329,67895297,69533697,72548353,74121217,74776580,75104257,76087297,77856769,78512129,78970881,79953921,80084993,80281601,80543745,81002497,81068033,81264641],"proxy":[51707905],"permitted":[57278466,57737217,58130433,59834369,60293122,60817409,61407233,62193665,63045633,63963138,64684033,65273857,66387969,69533697,71827457,73400321,75104257,75366401,76087298,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"processing":[36175873,37552129,38207489,40108033,40435713,43122689,44040193,48037889,48365569,49217537,49545217,49807361,54460417,77791233,79757314],"path":[9175041,10747906,55508993,63635457,76873732],"predate":[64094209,66584577,67829761,69402625],"provides":[3342349,5570561,5963789,9633793,16711681,18219009,23199745,26542081,33882113,41615361,42663937,43712513,45547532,49545217,51118081,51707912,52232193,53673986,54001665,58261505,58392577,65798145,68943873,69337089,71368705,72417281,72613889,74514433,75169793,75431937,75628545,75956225,76480514,76546049,76742657,76939265,77266945,77594625,77856769,77987841,78577665,78708737,79036417,79626241,79953921,80085006,80478209,80543757,80674818,80805889,81068033,81199105],"post":[77791233],"port":[7077890,38731778,39256066,39649282,40304642,40828932,42336258,43778050,44498946,44892162,45481988,47972356,49086466,50921474,55836676,58720258,61800450,71696390,75366406,76087300,76546050],"populate":[8585217,8847361,10944513,11075585,13959169,19726337,24707073],"pairs":[60358657,62980097,72548353,78970881],"previously":[7077900,11010060,36175873,36241409,36372481,37552129,37945345,38207489,38273025,39387137,39518209,40108033,40239105,40435713,43122689,43515905,43581441,44040193,44433409,48037889,48365569,49217537,49741825,49807361,50003974,51642374,52625409,54460417,54853638,57212934,75366412,76087308],"provided":[3211265,9633793,9699329,10027009,10289153,10485761,10813441,10878977,11141121,11468801,11993089,12582913,12779521,13041665,76414977,79757317],"programming":[8060929,8192001,8323073,8781825,10092545,10420225,17039361,17170433,17956865,18415617,18808833,19398657,19922945,20054017,21233665,25231361,26935297],"propertynames":[53608449,54525953,56885249,59244545,60751873,62521349,62783489,63897601,64356353,65339396,67633153,73138177,74645505,75497473,76283905,77135873,78184449,79495169,80084993,81199105],"packages":[10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,14221313,15204353],"public":[3,393219,524291,655363,327683,786435,917507,983043,1114115,2359299,5832707,6029315,6225923,6291459,6356995,6422531,6488067,6619139,6684675,6815747,6881283,7143427,7208963,7274499,7405571,7471107,7536643,7602179,7667715,7733251,7798787,7929859,7995395,8060931,8126467,8192003,8257539,8323075,8388611,8454147,8519683,8585219,8650755,8781827,8847363,8912899,8978435,9043971,9109507,9175043,9371651,9437187,9568259,9633795,9699331,9764867,9961475,10027011,10092547,10158083,10223619,10289155,10354691,10420227,10485763,10551299,10616835,10682371,10747907,10813443,10878979,10944515,11075587,11141123,11272195,11337731,11468803,11534339,11599875,11665411,11730947,11796483,11862019,11927555,11993091,12058627,12124163,12189699,12255235,12386307,12451843,12517379,12582915,12648451,12713987,12779523,12845059,12910595,12976131,13041667,13107203,13369347,13565955,13631491,13762563,13893635,13959171,14221315,14614531,15138819,15204355,15990787,17039363,17170435,17367043,17498115,17694723,17956867,18087939,18284547,18415619,18481155,18546691,18612227,18808835,18939907,19005443,19267587,19398659,19529731,19660803,19726339,19791875,19922947,19988483,20054019,20119555,20316163,20381699,20578307,20709379,20774915,20840451,20971523,21037059,21102595,21233667,21299203,21430273,21495811,21561347,21626883,21692419,21823491,21889027,21954563,22151171,22216707,22347779,22413315,22478851,22544387,22609923,22675459,22806531,22872067,22937603,23003139,23134211,23199747,23330819,23396355,23527427,23592963,23658499,23789571,23855107,23920643,24051715,24117251,24182787,24313859,24379395,24444931,24510467,24576003,24641539,24707075,24903683,25100291,25165827,25231363,25296899,25362435,25427971,25624579,25690115,25755651,25821187,25886723,25952259,26017795,26083331,26279939,26476547,26542083,26607619,26738691,26804227,26869763,26935299,27066371,27197443,27262979,27328515,27394051,27525123,27656195,27787267,27852803,27918339,27983875,28049411,28114947,28246019,28311555,28442627,28508163,28573699,28639235,28704771,28770307,28835843,28901379,28966915,29032451,29097987,29229059,29294595,29360131,29425667,29491203,29556739,29622275,29818883,29884419,29949955,30015491,30081027,30146563,30212099,30277635,30343171,30408707,30474243,30539779,30605315,30670851,30736387,30801923,30867459,30932995,30998531,31064067,31129603,31195139,31260675,31326211,31391747,31457283,31522819,31588355,31719427,31784963,31850499,31916035,31981571,32047107,32112643,32178179,32309251,32374787,32440323,32505859,32571395,32636931,32702467,32768003,32833539,32899075,32964611,33030147,33095683,33226755,33292291,33357827,33423363,33488899,33554435,33619971,33685507,33751043,33816579,33882115,33947651,34013187,34078723,34144259,34209795,34275331,34340867,34471939,34537475,34603011,34668547,34734083,34799619,34865155,34930691,35061763,35127299,35192835,35258371,35323907,35389443,35454979,35520515,35586051,35651587,35717123,35782659,35848195,35913731,35979267,36044803,36110339,36175875,36241411,36306947,36372483,36438019,36503555,36569091,36634627,36700163,36765699,36831235,36896771,36962307,37027843,37093379,37158915,37224451,37289987,37355523,37421059,37486595,37552131,37617667,37683203,37748739,37814275,37879811,37945347,38010883,38076419,38141955,38207491,38273027,38338563,38404099,38469635,38535171,38600707,38666243,38731779,38797315,38862851,38928387,39059459,39124995,39190531,39256067,39321603,39387139,39452675,39518211,39583747,39649283,39714819,39780355,39845891,39911427,39976963,40042499,40108035,40173571,40239107,40304643,40370179,40435715,40501251,40566787,40632323,40697859,40763395,40828931,40894467,40960003,41025539,41091075,41222147,41287683,41353217,41418755,41484291,41549827,41615363,41680899,41811971,41877507,41943043,42008579,42074115,42139651,42205187,42336259,42401795,42467331,42532867,42598403,42729475,42795011,42926083,42991619,43057155,43122691,43188227,43253763,43319299,43384835,43450371,43515907,43581443,43712515,43778051,43843587,44040195,44171267,44236803,44302339,44367875,44433411,44498947,44564483,44761091,44892163,44957699,45023235,45088771,45416451,45481987,45613059,45744131,45809667,45875203,46137347,46333955,46465027,46530563,46792707,46858243,46989313,47054851,47120387,47185923,47251459,47316995,47513603,48037891,48234499,48365571,48889859,48955395,49086467,49217539,49283075,49414147,49741827,49807363,49872899,50135043,50331651,50528259,50659331,50724867,50790403,50921475,50987011,51118083,51380227,51511299,51970051,52101123,52297731,52428803,52559875,52625411,54198275,54460419,54591491,54919171,54984707,55508995,55771139,57016323,57344003,57475075,58392579,58458115,58916867,59179011,59310083,59441155,59768835,59965443,60096515,60162051,60489731,60555267,60620803,60686339,60817411,60948483,61341699,61669379,61734915,61931523,62324739,62390275,62521347,62586883,62717955,62849027,62914563,63242243,63373315,63438851,63504387,63569923,63635459,63700995,63766531,63963139,64028675,64094211,64159747,64225283,64487427,64749571,64815107,64880643,64946179,65011715,65077251,65142787,65536003,65601539,65732611,65798147,65994755,66060291,66125827,66191363,66256899,66322435,66453507,66584579,66650115,66715651,66912259,66977795,67174403,67239939,67371011,67436547,67502083,67567619,67698691,67829763,67895299,67960835,68026371,68091907,68288515,68354051,68419587,68550659,68616195,68681731,68747267,68878339,68943875,69009411,69074947,69140483,69206019,69271555,69337091,69402627,69468163,69599235,69664771,69730307,69795843,69861379,69926915,69992451,70057987,70123523,70189059,70254595,70320131,70385667,70451203,70516739,70713347,70778883,70844419,70909956,70975491,71041027,71106563,71172099,71237635,71303171,71368708,71434243,71499779,71565315,71630851,71696387,71761923,71827459,71892995,71958531,72024067,72089603,72155139,72220675,72286211,72351747,72417284,72482819,72548356,72613891,72679427,72744963,72810499,72876035,72941571,73007107,73072643,73138179,73203715,73269251,73334787,73400323,73531396,73596931,73662467,73793539,73859075,73924611,73990148,74055683,74121220,74186755,74252291,74317827,74383363,74448899,74514436,74579971,74645507,74711043,74842116,74907651,74973187,75038724,75104260,75169796,75235331,75300867,75366403,75431939,75497475,75563011,75628547,75694083,75759620,75825155,75890691,75956228,76021763,76087300,76152835,76218371,76283907,76349443,76414979,76480515,76546052,76611587,76677123,76742659,76808195,76873731,76939267,77004803,77070339,77135875,77201411,77266947,77332483,77398019,77463555,77529091,77594627,77660163,77725699,77791235,77856771,77922307,77987843,78053379,78118915,78184451,78249987,78315523,78381059,78446596,78512131,78577668,78643203,78708739,78774275,78839811,78905347,78970884,79036419,79101955,79167492,79233027,79298563,79364099,79429635,79495171,79560707,79626244,79691779,79757315,79822851,79888387,79953924,80019459,80084996,80150531,80216068,80281604,80347139,80412675,80478212,80543748,80609283,80674820,80740355,80805891,80871427,80936963,81002500,81068036,81133571,81199107,81264644,81330179],"performs":[2097153,2752513,2818049,3276801,3473409,3538945,3735554,3997697,4063233,4259841,4390913,4521985,5373955,5570561,5963777,7077890,8716291,9306115,9502723,9633793,9830403,11010051,11206659,11403267,15532033,15990785,21757953,24444929,24510465,25296897,39190529,40501249,43319297,44171265,46465025,46923777,51904513,56164353,56623105,70320129,72744961,73138177,74645505,75104259,75366402,75497473,75956225,76087299,76283905,77135873,77856771,77987841,78184449,78512130,79495169,79953923,80084993,80281603,80936961,81002499,81068035,81199105,81264643],"prepared":[34406401,39976961,45285377,54198273],"properties":[1966081,2883585,3080193,3801089,4456450,4784130,4980738,5767169,8454146,8978434,9699329,10158081,10289153,10354690,10813441,10878977,11141121,11337729,11468801,11993089,12582913,12779521,13172737,13238273,13434881,13500417,13697025,13828097,13959169,14024705,14286850,14352386,14417922,14745601,14811137,15073281,15335426,15400961,15466498,15597569,15794178,15859713,15925250,15990785,16711684,17235969,17301505,17760258,17825793,17891329,18087937,18284545,18546689,19202049,19988481,20119553,20250625,20316161,20381698,20512770,20578305,20774913,21102593,21495809,21692418,21889025,22216705,22478849,22544386,22609921,22937601,23199748,23265281,23461889,23527425,23592961,24117250,24182785,24379393,24903682,24969217,25034753,25100289,26017794,26411009,26476546,27066370,27131905,27459585,27983874,28180483,29687809,32243715,33882113,34668545,35323905,37158913,38666241,38928385,39321603,39911425,41615361,43712513,45547523,46792705,48103426,48693249,49545217,49676289,49872897,51118081,51707906,52690947,52756482,53084162,53280770,53411841,53542914,53608450,53805058,53936130,54001666,54394882,54525954,54657026,55050241,55246850,55574533,55640066,55705602,55902210,56426498,56492034,56557570,56819714,56885250,57540610,57606146,57671682,57737218,58130434,58261506,58589186,59113474,59244546,59375618,59834370,60030978,60227586,60293122,60358658,60751874,60817410,61014018,61210628,61276162,61407234,61538306,61800450,61734913,61931521,61997058,62193666,62390273,62455810,62783490,62980098,63045634,63897602,64356354,64684034,65273858,65470466,65863682,66322433,66387970,66519041,66781186,67371009,67633154,68157442,69074946,69337089,69533698,69992450,70582274,70713345,71172097,71303173,71368706,71761921,71958529,72024065,72548353,73138177,73269250,73728002,73990145,74121218,74317825,74645506,74711041,74842114,74907649,74973186,75038721,75104257,75169793,75235329,75300865,75366401,75431939,75497473,75563009,75628546,75694082,75759617,76021761,76087297,76152833,76283905,76349441,76414980,76480513,76546049,77135874,77201410,77332481,77398017,77529089,77856769,78184449,78512129,78577668,78839809,78905346,78970881,79167490,79298561,79364097,79495169,79691777,79888385,79953921,80019457,80084993,80216066,80281601,80347137,80674817,81002497,81068033,81133569,81199105,81264641],"performance":[6356993,45547521,47120385,49545217,74776577,76939269,80543745],"parent":[7929857,7995393,9109505,33619973,35127301,38600709,40370181,73924609,74121217,74448897],"passed":[8585217,10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,13959170,14221313,15204353,15990785,51707906,76349441,77529089,80412673,81330177],"persists":[458753],"promise":[3670025,17039365,17170437,17956869,18415620,19398660,20054023,21233668,25231365,26935300,54263817,69861378,76939266,77791233,78774281,79233028],"possible":[7340051,9895955,18219009,26542081,27525121,27918337,28246017,28508161,28704769,28770305,28835841,29491201,29556737,29949953,30081025,30212097,30343169,30408705,30474241,30605313,30867457,31129601,31195137,31260673,31326209,31588353,31784961,31850497,31916033,32571393,32702465,32964609,33030145,33095681,33357825,33816577,33947649,34340865,34537473,34603009,35586049,35848193,51052563,54067219,76349459,77529107,78446593],"parameters":[6225921,6291457,6356994,6422529,6488065,6619137,6684673,6815745,7143425,7208961,7405569,7536641,7602177,7667713,7733250,7798785,7929858,7995393,8060929,8192001,8323074,8388610,8454145,8519681,8585219,8650753,8781825,8847361,8912898,8978433,9043969,9109505,9175041,9437185,9568257,9633793,9699329,9764865,9961474,10027009,10092545,10158082,10223618,10289153,10354689,10420226,10485761,10551298,10616833,10682369,10747906,10813441,10878978,10944514,11075587,11141121,11272193,11337729,11468801,11534337,11599873,11665409,11730946,11796481,11862017,11927554,11993089,12058625,12124162,12386306,12451841,12517378,12713985,12779521,12845058,12910594,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631490,13697025,13762561,13828097,13893634,13959170,14024705,14155777,14221314,14286850,14352386,14417922,14483457,14548993,14680065,14745601,14811137,14876674,14942209,15007745,15073281,15138817,15204354,15269889,15335426,15400961,15466498,15532033,15597569,15728641,15794178,15859713,15925250,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973826,17039361,17170433,17235969,17301505,17498113,17563649,17629185,17694721,17760258,17825793,17891330,17956866,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18546689,18677761,18743297,18808833,18874370,18939905,19005441,19070977,19136514,19202049,19267585,19333121,19398658,19464193,19529729,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250626,20316161,20381698,20447233,20512770,20578305,20643841,20709377,20774913,20840449,20905986,20971521,21037057,21102594,21168129,21233665,21364737,21430273,21495809,21561345,21626881,21692418,21954561,22020098,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544386,22609922,22675457,22740993,22872065,22937601,23003137,23068673,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23724033,23789569,23855105,23920641,23986177,24051713,24117250,24182785,24248321,24313857,24379393,24444929,24641537,24707073,24772609,24903682,24969217,25034753,25100289,25165825,25231362,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25952257,26017794,26148865,26214401,26279937,26345473,26411009,26476546,26542081,26607617,26673153,26738689,26804225,26869761,26935298,27000833,27066370,27131905,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787266,27852801,27918337,27983874,28049409,28114945,28246017,28180481,28311553,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474242,30539777,30605314,30670849,30736385,30801921,30867457,30932994,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850498,31916033,31981569,32047105,32112641,32178178,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768002,32833537,32899073,32964609,33030145,33095681,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882114,33947649,34013185,34078721,34209793,34275329,34340865,34406401,34471937,34537473,34603010,34668545,34734081,34799617,34865153,34930689,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36306945,36438017,36372481,36503553,36569089,36634625,36765697,36896769,36962305,37027841,37158913,37224449,37289985,37355521,37421057,37552129,37617666,37748737,37814274,37945345,38010881,38076417,38141953,38207489,38273025,38469633,38535169,38600705,38666241,38731777,38797313,38862850,38928385,39059457,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40501249,40435713,40566786,40632321,40828929,40894465,40960001,41025537,41222145,41287681,41353217,41418753,41615362,41680897,41746433,41877505,41943041,42008577,42074113,42139650,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42729473,42795009,42860545,42991617,43057153,43122689,43188225,43253761,43384833,43450369,43515905,43581441,43712514,43778049,43843585,44040193,44171265,44302337,44367873,44433409,44498945,44564481,44630018,44761089,44892161,44957697,45023233,45088769,45219841,45285377,45481985,45416449,45613057,45744129,45809665,45875201,46137345,46530561,46792705,46858241,46989313,47054849,47120385,47251457,47316993,47513601,48037889,48234497,48365569,48889857,49086465,49217537,49283073,49414145,49741825,49807361,49872897,50331649,50528257,50593793,50659329,50921473,50987009,51118082,51380225,51970049,52101121,52297729,52559873,52625409,52953089,53149697,54132737,54460417,54591490,54919169,54984705,57016321,59572225,60686337,61079553,66912257,69337089,69926913,70909953,72417281,73531393,74514433,75431937,75890690,76742657,77266945,77725697,78053378,78184449,78249985,78577665,78643202,79036418,79298561,79822849,80478209,80609282],"propertyindices":[53608449,54525953,56885249,59244545,60489733,60751873,62783489,63111172,63897601,64356353,67633153,73138177,74645505,75497473,76283905,77135873,78184449,79495169,80084993,81199105],"pending":[11010049,38404097,76087297,79233026],"pattern":[77266945,78577665],"promis":[20054017],"processed":[36175873,37552129,38207489,40108033,40435713,43122689,44040193,48037889,48365569,49217537,49807361,54460417,73924609,74448897],"processes":[36044801,36175873,37552129,37748737,38076417,38207489,40042497,40108033,40435713,42401793,43122689,44040193,45744129,45875201,46858241,47513601,48037889,48365569,49217537,49807361,50987009,51970049,54460417,54984705],"promises":[76939266],"position":[4063234,4259842,23068674,24838146,26148866,28377090,70320130,80936962],"place":[16711681,23199745,76939265],"profile":[393217,327681,6160387,7077891,11010051,35389444,35520518,35979269,37289990,38338561,39124993,41549827,42467332,42729477,43188227,48431107,49545219,53346307,53805057,59834369,60293121,62586881,64028673,64487425,64946177,65142785,66256898,66715649,67436545,68550658,69271553,70189058,70451201,71434242,71565314,71761922,71892994,72941569,73007105,74055682,74186753,75366404,76087300,80019460,80150530,80347137,80740353],"progress":[71827457,73400321],"programmatic":[3735560,5373960,8716296,8847361,9175041,9306120,9502728,9830408,11010056,11206664,11403272,13238274,13697026,13828098,15400962,15597570,15859714,17301506,18546690,19202050,20119554,20316162,20578306,20774914,21495810,23527426,25100290,42270722,45219842,45350916,47710212,48168964,50593794,51183620,51576833,52953089,53149697,54132738,55443457,59047937,60424193,75104265,76087304,77856776,78512136,79953928,80281609,81002505,81068040,81264649],"pass":[8388609,10944513,11075585,14876673,18874369,19136513,20905985,27000833,29163521,79822849,80412673,80609281],"parser":[79560708],"profil":[49545217,53805061,57540609,65142785,66256897,67436545,70189057,71434241,71761921,72941569,80019461,80347137],"private":[51707909,54198273,72417281,74514433,76742657,79626241,80478209],"ptr":[14876673,16318465,16973825,18874369,19070977,19136513,20905985,22020097],"periodically":[58982401,65601537],"past":[68550657,70189057,71434241],"part":[56033281,62717953,75431937],"particularly":[60817409,66387969],"propert":[75235329,75563009],"propertychangedeventargs":[1114114],"protected":[5505027,6750211,7012355,17563651,21430276,21757953,22085635,22740995,23724035,33161219,34406403,34996227,38993923,41353220,42270723,45219843,45285379,46989316,50593795,52953091,53149699,54132739],"procedure":[3735553,5373953,8716289,9306113,9502721,9830401,11010049,11206657,11403265,16056322,28049410,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"propertychanged":[589825,720897,1114118,1376257,71368705,74121217,75628545],"paths":[52756481,54657025,55508993,63635457,69992449,79888385],"precedence":[6619137,6684673,6815745,8650753,62128129,71237633],"privateaccess":[78446593],"property":[589826,720898,1114115,1376257,1966087,2097158,2752518,2818054,2883590,3080199,3276806,3342338,3473414,3538950,3801096,3997702,4390918,4456456,4521990,4784136,4980744,5242888,5570566,5963784,5767176,6422530,7143426,7995395,8585217,9109507,9437186,9699333,10289157,10616833,10813446,11141125,11862017,11993093,12189698,12582913,12779526,13959169,15007749,16711684,17498118,17629188,17694722,18350084,18481154,18939908,19005441,19333124,19529732,19660802,19791876,20447237,20643844,20840453,20971522,21889025,21954564,22347781,22413317,22675460,23199748,23265284,23461892,23920644,24969220,25034756,25559046,25624577,25690116,25821189,26214405,26279937,26345477,26411012,26673158,26869761,27131907,27459588,27590662,27656193,27721733,27787265,27852801,28180481,28442625,28573697,29032449,29097985,29229057,29294593,29425665,29622273,29687811,29753349,29818881,29884417,30015489,30146561,30277633,30539780,30670849,30736385,30801921,30932993,30998529,31064065,31522820,31653893,31719425,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32636932,32768001,32833537,33226756,33685508,33882118,34078721,34209793,34275329,35454979,35651585,36634628,38010883,38666247,39911434,41615363,43712518,45940739,46071811,46268419,46399491,46661635,46727171,46792709,47382531,47579139,48300035,48627715,48693251,48824323,49348611,49676291,49872904,51118083,51707908,53084165,53411843,53608452,54198277,54329347,54394885,54525956,55050243,55181315,55508996,55705604,55771140,55967747,56033285,56098819,56229893,56295427,56360965,56688646,56885252,56950788,57081859,57147397,57278469,57344005,57475076,57737218,57802755,57868293,57999364,58064899,58130434,58195972,58327044,58392580,58458116,58523655,58785796,58851331,58916869,58982404,59179012,59244548,59310086,59441156,59506692,59572230,59637764,59703300,59768836,59899908,59965444,60030981,60096517,60162053,60293122,60489734,60555268,60620804,60686343,60751876,60817413,60882948,60948484,61079559,61145092,61341700,61407234,61472772,61669382,61734917,61865988,61931525,62062597,62128134,62193666,62259207,62324740,62390277,62521350,62586885,62652421,62717957,62783492,62849029,62914564,63045634,63111174,63176708,63242246,63307780,63373316,63438852,63504388,63569924,63635461,63700996,63766532,63832068,63897604,63963141,64028676,64094212,64159751,64225284,64290821,64356356,64421895,64487428,64552965,64618501,64684034,64749572,64815109,64880646,64946180,65011716,65077253,65142788,65208324,65273858,65339398,65404932,65536005,65601540,65732614,65667076,65798149,65929220,65994756,66060292,66125828,66191364,66256901,66322437,66387973,66453509,66519045,66584580,66650118,66715652,66846724,66912262,66977796,67043332,67108868,67174404,67239940,67305477,67371013,67436548,67502085,67567621,67633156,67698693,67764230,67829764,67895301,67960836,68026372,68091909,68222980,68288516,68354053,68419590,68485124,68550660,68616196,68681732,68747268,68812804,68878343,69009412,69074948,69140485,69206021,69271557,69402628,69468165,69533698,69599237,69664772,69730308,69795844,69926919,70057989,70123524,70189060,70254596,70385668,70451204,70516740,70647812,70713349,70778884,70844420,70975493,71041030,71106564,71237638,71303176,71368718,71434244,71499780,71565317,71630852,71696388,71827461,71892996,72089604,72155142,72220678,72286215,72351748,72482820,72810501,72876036,72941572,73007108,73072644,73138186,73203716,73269256,73334788,73400325,73465860,73596932,73662469,73728005,73793540,73859076,73924613,74055685,74121230,74186756,74252293,74383364,74448901,74579972,74645514,74842116,74907653,74973192,75104258,75235335,75431944,75497482,75563014,75628558,75694088,75825156,75956230,76087298,76218372,76283914,76611589,76939267,77070341,77135882,77463557,77660167,77725697,77856770,77922309,77987846,78053380,78184458,78315524,78381061,78512130,78577672,78643204,79167492,79364097,79429634,79495178,79953922,80085004,80216068,80281602,80412674,80543746,81002498,81068034,81199114,81264642]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_113.json b/docs/Reference/fti/FTI_113.json index dc9ba2103..baad23023 100644 --- a/docs/Reference/fti/FTI_113.json +++ b/docs/Reference/fti/FTI_113.json @@ -1 +1 @@ -{"qux":[12255233],"qualified":[1703937,3801089,8126465,9437185,10878977,12124161,12517377,13041665,13500417,13565953,13697025,14286849,19136513,19922945,23199745,24248321,51576833,55902209]} \ No newline at end of file +{"qux":[13959169],"qualified":[1638401,4718593,4915201,7340033,8978433,9895937,10354689,11599873,11862017,12713985,14352385,15925249,17760257,19005441,20512769,21692417,22544385,24117249,24903681,76349441,77529089,78839809,79364097,80740353],"queryproperty":[4456450,4784130,4980738,27721733,29753349,48824322,73269250,74973186,75694082],"query":[27721730,29753346,48824321]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_114.json b/docs/Reference/fti/FTI_114.json index e2afeb8e0..dfd14c244 100644 --- a/docs/Reference/fti/FTI_114.json +++ b/docs/Reference/fti/FTI_114.json @@ -1 +1 @@ -{"relies":[47382529,59441153],"referenced":[5046273,7077889,58785793],"resource":[1572865,5242889,25231362,27459586,27852802,28114946,28639234,28835842,29097986,29425666,29687810,29884418,30408706,31850498,33816582,38338566,39321601,50200577,53936129,58130433,58261510,58589185,60817414,61145089],"receive":[47316993,53411841,53477377,54591489,54722561,56950785],"removeelement":[3407873,5046273,10158084,58785793,59768833],"recently":[25165825,38731777],"replacement":[47382529],"randomt":[11141122],"removed":[9371649,10027009,10158081,14811137,15335425,17694721,18284545,23527425,24117249,59179009,61145089],"resetting":[2621441,2686977,2818049,3145729,3211265,3670017,3735553,4128769,4521985,4587521,4980737,5177345,6291457,6356993,6553601,7208961,7536641,8716289,8978433,24576001,24707073,30212097,36110337,36831233,40763393,58195969,58261505,58327041,58392577,58916865,59375617,59834369,60096513,60162049,60227585,60293121,60424193,60751873,60817409,60882945,61014017,61407233,61538305,61603841],"reclaim":[30539777],"removes":[1769475,2621442,2686978,2752515,2818050,3145730,3211266,3276803,3407875,3670018,4128770,4259843,4521986,5046275,5177346,9371649,10027009,10158081,13631489,14811137,15335425,16187393,16515073,17694721,18284545,23068673,23527425,23789569,24117249,35323906,35913730,35979266,54067203,56426499,57540611,57999363,58785795,58916866,59375618,59768835,59834370,60162050,60227586,60293122,60424194,60751874,61014018],"requests":[6029313,6488065,7274497],"recommended":[39059457,40042497,40632321,42074113,42205185,42795009,43909121,44105729,44171265,44957697,45088769,46268417,47579137,47775745,48889857,51511297,53805057,54329345,55967745,56295425,56623105,58195969,58327041,58392577,60096513,60817409,60882945,61145089,61407233,61538305,61603841],"running":[2293766,2949128,7471105,7929857,7995393,8585217,9240577,9895937,16252929,17104897,17825793,18546689,19333121,19726337,20512769,21299201,31784962,32505860,38862856,40042497,44171265,44433409,45154305,46333953,50659329,51052545,51314689,59047942,61079560],"relative":[50266114,50855938,52756482,59572225],"registered":[3735568,4587536,6291472,6357008,6553616,7208976,7536656,8323073,8650753,8716304,8978448,11927554,12320770,12648450,12845058,13107202,13369346,14024706,14090242,14155778,14876674,14942210,15597570,15925250,16777218,16842754,17235970,17563650,17760258,18087938,18350082,18612226,18743298,19070978,19660802,19988482,20643842,20774914,21364738,21495810,22413314,22478850,23265282,31064072,32047112,33423368,34209800,58195984,58327056,58392592,60096528,60817424,60882960,61407248,61538320,61603856],"request":[7208961,26869761,60817409],"reserved":[65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6029313,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,8060929,7995393,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13631489,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19726337,19660801,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20381697,20316161,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26148865,26083329,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35520513,35454977,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36372481,36306945,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38469633,38404097,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40697857,40632321,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909121,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775745,47841281,47906817,47972353,48037889,48103425,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55377921,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"retrieves":[10878977,13565953,38010881,50003969],"rely":[46333953,51052545],"recursion":[50724865,54460417],"retrieved":[39059457,40632321,42074113,42205185,43450369,43909121,44957697,45088769,46268417,47775745,49414145,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"removeproperty":[3407874,5046274,9371653,10027013,35323906,58785794,59768834],"rethrown":[12910593],"return":[5242881,5505025,6094849,6029314,6225921,6422529,6488066,6750209,6946817,7012353,7077889,7143425,7274498,7471105,7602177,7929857,8060929,7995393,8126466,8257537,8323073,8388611,8454145,8519681,8585217,8650753,8912898,9043969,9109505,9175042,9240577,9306115,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10878977,10944513,11075585,11141121,11206657,11337729,11534337,11599873,11665409,11730945,12058625,12189697,12255233,12582913,12910594,13172738,13565953,13631490,13893634,14221314,14548994,14614529,14745602,14811137,15073282,15335425,15400961,15532034,15663105,15794179,15859713,15990785,16056321,16252929,16449537,16580611,16646145,16711681,17039361,17104897,17301505,17367041,17432577,17498113,17694721,17825793,18022401,18153473,18219009,18284545,18481153,18546689,18677761,19005441,19333121,19464194,19529729,19595265,19726337,20054017,20316161,20447234,20512769,21233666,21299201,21626881,21757954,22085634,22282241,22544385,22806530,23003137,23134209,23461889,23527425,23592961,23789570,24051713,24117249,24379393,24444929,24641538,24772609,24838145,24969217,25165825,25296897,25362433,25493505,25559041,25624577,25755649,25821185,25952257,26017793,26083329,26345473,26411009,26542081,26607617,26804225,26935297,27066369,27131905,27197442,27394049,27525121,27656193,27721729,27787265,27983873,28049409,28180481,28246017,28311553,28377089,28442625,28573697,28704769,28901377,28966913,29032449,29294593,29491201,29556737,29622273,29753345,29949953,30081025,30146561,30343169,30736385,30801921,30867458,30998529,31195137,31260675,31326209,31391745,31588354,31653889,31981569,32112642,32178177,32636929,32768001,32964610,33095681,33947651,34013185,34930689,35520513,35848193,36569089,37879809,38731777,39059458,39452674,40042497,40632322,41680897,41746433,42074114,42205186,42336258,42401793,43778049,43909122,44171265,44957698,45088770,45875202,46268418,47054849,47775746,49152001,50003969,51445761,51642369,53805057,54329345,55771137,55967745,56295425,56360961,56492034,56623105,57278465,58064897,58195970,58327042,58392578,59637762,60096514,60817410,60882946,61407234,61538306,61603842,61669377],"readonly":[1114114,1376258,1441794,1507330,39845889,40501249,40960001,41025537,41615361,42139649,42663937,42729473,42860545,42991617,43253761,43515905,43646977,43712513,43974657,44040193,44105729,44236801,44302337,44498945,44564481,44761089,44826625,44892161,45285377,45350913,45481985,45547521,45940737,46006273,46399489,46727169,46989313,47448065,47513601,47579137,47841281,48037889,48103425,48168961,48431105,48562177,48627713,48693249,48758785,48955393,49020929,49086465,49217537,49348609,49479681,49545217,49676289,49741825,49807361,49872897,49938433,50069505,50135041,50266113,50331649,50397185,50855937,50921473,51183617,51445761,51707905,51970049,52297729,52363265,52494337,52625409,52756481,53018625,53215233,53608449,53739521,53805057,54132737,54329345,54394881,54657025,54788097,54919169,54984705,55050241,55181313,55312385,55508993,55640065,55967745,56033281,56164353,56295425,56557569,56623105,56688641,56819713,56885249,56950785,57081857,57409537,57606145,57868289],"reference":[65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6029314,6160385,6225921,6291457,6356993,6422529,6488066,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274498,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,8060929,7995393,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830402,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255236,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13631490,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19726337,19660801,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20381697,20316161,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789570,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26148865,26083329,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35520513,35454977,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36372481,36306945,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38076417,38141953,38207489,38273025,38338561,38469633,38404097,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059458,39124993,39190529,39256065,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40697857,40632322,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353219,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,42008577,42074114,42139649,42205186,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909122,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957698,45023233,45088770,45154305,45219843,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268418,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775746,47841281,47906817,47972353,48037889,48103425,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610754,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790402,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55377921,55312386,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195970,58261505,58327042,58392578,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096514,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817410,60882946,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407234,61472771,61538306,61603842,61669377],"results":[13434881,39321601,45154305,50200577,51314689,53936129,60620801,60686337,61407233,61538305,61603841],"regardless":[12910593,52822018,53280769],"removepropertynocheck":[1769473,3276801,4259841,5373953,16318465,18284548,54067201,56426497,57999361],"runtime":[65538,720897,917505,3014657,4521985,4980737,5111809,7208962,9764865,10092545,10223617,10878977,11141121,13565953,13828097,19398657,24838145,25231361,25624577,25690113,25952257,26148865,26214401,26673153,26738689,26804227,27262977,27328513,27459585,27590657,27656195,27787267,27852801,28114946,28180481,28508161,28639233,28835842,28901379,29097986,29163521,29229057,29360129,29425665,29622275,29687809,29818881,29884418,30015489,30408706,31129601,31850498,33816588,38404098,38993921,39321605,39387137,40042497,42074114,44171265,45023233,50200579,50724868,50987009,51249153,51773441,52035586,52101121,52559873,53936130,54460418,54657025,54984705,55574529,55705601,56098819,58261522,58589186,58654721,58851329,59179009,59244545,59441155,60227585,60686337,60817412],"responsible":[52494337],"relevant":[7077889],"runtimeheapsizesampleinterval":[42074113,51249156,60817409],"response":[38404097,39321601,42074113,51773441,53346305,58261505,59441153,60817409],"recompilation":[4980742,7208966,24444930,25559042,25821186,26017794,27525122,28049409,28442625,28704770,28966915,29556738,29949953,30998531,31391746,32178177,32768001,33095682,34013185,34930691,35192835,35848193,36372483,36569089,37879809,38666243,39321601,39714819,58261510,59703297,60620802,60817414],"remarks":[1179649,5242881,5373953,6094849,6029313,6225921,6488065,6815745,7143425,7274497,7405569,7864321,8060929,8126465,8257537,8323073,8388609,8454145,8519681,8650753,8847361,8912897,9043969,9109505,9175041,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10878977,10944513,11075585,11141121,11206657,11337729,11534337,11665409,11730945,11927553,12058625,12189697,12255233,12320769,12582913,12648449,12713985,12845057,12910593,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13631490,13762561,13828098,13893633,13959169,14024705,14090241,14155777,14286849,14417921,14483457,14548993,14680065,14745601,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15466497,15532033,15597569,15728641,15794177,15859713,15925249,16187393,16252929,16318465,16515073,16580609,16777217,16842753,16908289,17235969,17367041,17563649,17760257,17891329,17956865,18087937,18153474,18284545,18350081,18546689,18612225,18743297,18808833,18874369,18939905,19005442,19070977,19136513,19202049,19333121,19398658,19464193,19529729,19660801,19791873,19922945,19988481,20054018,20119553,20250625,20316161,20447233,20643841,20709377,20774913,20971521,21037057,21102593,21233665,21299201,21364737,21430273,21495809,21823489,21889025,22085633,22216705,22413313,22478849,22544385,22609921,22806529,23068673,23134209,23199745,23265281,23396353,23724033,23789570,23920641,24248321,24444929,24641537,24838145,24903681,24969217,25100289,25165825,25362433,25493505,25559041,25624577,25755649,25821185,25952257,26017793,26083329,26279937,26411009,26476545,26542081,26607617,26673153,26804225,26869761,27000833,26935297,27066369,27197441,27525121,27590657,27656193,27983873,28049409,28114946,28180481,28246017,28311553,28377089,28573697,28704769,28770305,28835842,28901377,28966913,29097986,29229057,29294593,29360129,29491201,29556737,29622273,29818881,29884418,29949953,30015489,30081025,30343169,30408706,30474241,30539777,30736385,30801921,30867457,30998529,31129601,31260673,31391745,31588353,31653889,31850498,31916033,31981569,32112641,32178177,32964609,33095681,34013185,34734081,34930689,35127297,35520513,35848193,36044801,37879809,38207489,38273025,38731777,39190529,39452673,39583745,40042497,41353217,41549825,42336257,42795009,43057153,43122689,43384833,43450369,43778049,44171265,44367873,44433409,44761089,45023233,45154305,45219841,45613057,45678593,45875201,46071809,46333953,46465025,46530561,46792705,47054849,47251457,47316993,47382529,47710209,47906817,48168961,48234497,48758785,48889857,49217537,49348609,49414145,49610753,49676289,49938433,50200577,50266113,50528257,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51183617,51249153,51314689,51445761,51511297,51642369,51707905,51838977,51904513,52035585,52101121,52166657,52297729,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53149697,53280769,53411841,53477377,53542913,53805057,53870593,53936129,54001665,54067201,54263809,54329345,54394881,54460417,54591489,54722561,54853633,54919169,55312385,55443457,55574529,55836673,55967745,56033281,56098817,56295425,56492033,56623105,56688641,56819713,57081857,57278465,57475073,57540609,58392577,58720257,59113473,59506689,59768833,60096513,60358657,60555265,60751873,60817409,60882945,61407233,61472769,61538305,61603841],"requesting":[6029313,6488065,7274497],"reassignment":[54853633,55443457],"reclaims":[52101121],"runtimeheapsizeviolationpolicy":[42074113,50200577,51773444,60817409],"read":[1769475,3276803,3670017,4259843,5373954,5898241,12255235,13828097,16056325,16318466,16515073,16711681,16973825,17432577,18284545,18808833,19398657,36634625,39256065,44302337,46858241,50921473,54067203,56426499,56950785,57278465,57540609,57999363,59310081,60489729,60751873],"restricted":[7929857,8585217,9240577,9895937,13303809,13959169,22609921,23396353,32505857,33619969,35717121,40042497,44171265,59637761],"resumed":[50724865,54460417],"returning":[3407873,5046273,8257537,58785793,59768833],"resumes":[7208961,26279937,60817409],"removing":[47710209,48234497,52559873],"rank":[7602183],"requirement":[40042497,44171265,59572225],"root":[5111809,37093377,48168961,48562178,48758785,49348609,49676289,49938433,51183617,52297729,53673985,56819713,58654721,59572225,59965441],"returned":[13631491,23789571,24969217,25493505,26083329,26542081,26607617,26935297,28311553,29491201,29949953,30736385,32178177,35848193,61669377],"remove":[589825,720897,917505,1769473,2752514,3276801,4259841,9371651,10027011,10158083,14811137,15335425,17694728,18284546,23527425,24117249,35323905,54067201,56426497,57540610,57999361],"remote":[59179009,61145089],"returns":[1572865,1638401,1703938,1769473,1900545,1835009,1966081,2031617,2097153,2359297,2490372,2555908,2621442,2686978,2752513,2818050,2162689,2228225,2883588,3014658,3080193,3211266,3276801,3342340,3407876,3473409,3538948,3604482,3670018,3801090,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521986,4587521,4653057,4784130,4849668,4980739,5046275,5111810,5439489,6291457,6356993,6553601,6881283,7208963,7536641,7798785,8388611,8716289,8978433,9306115,9568259,10223617,12910593,13631489,15728641,15794177,16580609,17367041,18153473,18677761,19005441,19202049,20054017,20316161,22544386,23134209,23789569,24379393,25165825,26345473,27787265,28246017,30474241,30801922,31260673,31653890,32899074,33226753,33947649,35520513,37421058,37945346,38010881,38600706,38731777,39649282,41549825,43778050,44761089,45678593,46792705,47054850,47251457,49217537,50724865,50921473,51576834,51642370,51707906,51904513,52494337,52625409,53084161,53477380,53673986,53870593,54067201,54394881,54460417,54722564,55115777,55312388,55705602,55836673,55902210,56229889,56426497,56492035,56688641,56754177,57016322,57212929,57540609,57671681,57933825,57999361,58130433,58195969,58261507,58392577,58523649,58589185,58654722,58720259,58785795,58851329,58982401,59113476,59244545,59310081,59375618,59506692,59703297,59768836,59834370,59899905,60096513,60162050,60227586,60358660,60424194,60489729,60555265,60751874,60817411,60882945,61407233,61472769,61538305,61603841],"release":[18874370,30539777,38273026,43122690,59179009,61145089],"relaxes":[59572225],"required":[6029313,6488065,7274497,9830401,13828097,19398657,58392577,60096513,60882945],"releases":[4063233,4587523,6291459,6356995,6553603,7208963,7536643,8716291,8978435,18874370,19791873,30539777,36110338,36831234,38273026,40763394,43122690,47382529,58195971,58392579,59703297,60096515,60817411,60882947,61407235,61538307,61603843],"random":[11141125],"restore":[43450369,49414145],"reason":[37617665,53608450,55115777],"references":[30539777],"reduces":[46333953,51052545],"restrictions":[39059457,40632321,42074113,42205185,43057154,43909121,44957697,45088769,46268417,46465026,47775745,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"retain":[9699329,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12582913],"represent":[7143426,8060930,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13303809,13369345,13500417,13697025,13828097,13959169,14024705,14090241,14155777,14286849,14417921,14483457,14876673,14942209,15007745,15138817,15269889,15597569,15925249,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19136513,19398657,19660801,19922945,19988481,20119553,20643841,20709377,20774913,21037057,21364737,21430273,21495809,21889025,22413313,22478849,22609921,23199745,23265281,23396353,24248321,25100289,50528257,51838977,54067202,60555265],"releasing":[2621441,2686977,2818049,3145729,3211265,3670017,3735553,4128769,4521985,4587521,4980737,5177345,6291457,6356993,6553601,7208961,7536641,8716289,8978433,24576001,24707073,30212097,36110337,36831233,40763393,58195969,58261505,58327041,58392577,58916865,59375617,59834369,60096513,60162049,60227585,60293121,60424193,60751873,60817409,60882945,61014017,61407233,61538305,61603841],"result":[655361,1376257,3407873,4390913,6029313,7274497,8257537,8388612,9043969,9109505,9175041,9633793,9699329,10289153,10420225,10485761,10616833,10682369,10747905,11075585,11206657,11337729,11534337,11665409,12058625,12189697,12255234,12582913,13172738,13631491,13893634,14548994,14745602,15073282,15400961,15532034,15859713,15990785,16646145,17104897,17825793,18546689,19333121,19464194,19529729,20447234,21233666,22085634,22282241,22806530,23003137,23592961,23789571,24641538,24969218,25493506,26083330,26476546,26542082,26607618,26935298,27197441,28311554,29491202,29949954,30736386,30867457,31588354,31653889,32112641,32178178,32899073,32964610,35848194,38010881,39059457,39452674,40632321,42074113,42205185,42336257,42795009,43909121,44957697,45088769,45875201,46268417,47054851,47775745,48889857,51642371,56492034,58195969,58327041,58392577,59768833,60096513,60686337,60817409,60882945,61145089,61407233,61538305,61603841],"runtimes":[24444929,25559041,25821185,26017793,27525121,28704769,29556737,31391745,33095681,39321601,58851329],"rejection":[59441153],"readbytes":[2621441,2686977,2818049,3211265,3670017,16711684,17432580,59375617,59834369,60162049,60424193,60751873],"resolution":[61145089],"rejected":[47316993,53411841,53477377,54591489,54722561,56950785],"related":[46071809,57147393],"reflection":[5242881,39059458,40632322,42074114,42205186,43909122,44957698,45088770,45154307,46268418,46333956,47775746,47906817,51052548,51314691,54001665,58195970,58327042,58392578,60096514,60817410,60882946,61407234,61538306,61603842],"retrieve":[41549825,47251457],"reclaimed":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,19791873,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"redirected":[1],"rights":[65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6029313,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,8060929,7995393,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13631489,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19726337,19660801,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20381697,20316161,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26148865,26083329,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35520513,35454977,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36372481,36306945,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38469633,38404097,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40697857,40632321,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909121,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775745,47841281,47906817,47972353,48037889,48103425,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55377921,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"released":[52101121],"ref":[458753,1245185,4194305,4653057,7077889,8257537,12255234,24969217,25493505,26083329,26542081,26607617,26935297,28311553,29491201,29949953,30736385,31326209,32178177,35848193,52166657,52428801,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55246850,55312385,55705601,55836674,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,58982401,59047937,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60030977,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61079553,61276161,61407233,61472769,61538305,61603841],"resourc":[59965443],"reaches":[61145089],"removal":[10944513],"replace":[6094856,6225928],"runtim":[7208961,25362433,26411009,27066369,27983873,28049409,28377089,28573697,29229057,29294593,30343169,31981569,34013185,37879809,38404099,42074114,50200578,51380225,51773441,52101121,53346305,53936130,58261507,60686337,60817411],"representation":[3604482,3735553,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,13631489,17367041,20316161,23134210,23724033,23789569,28246017,38010881,42795009,43778049,45744129,48889857,53673986,58195969,58327041,58392577,58654721,59310081,60096513,60817409,60882945,61407233,61538305,61603841],"remainder":[31588353,32964609],"requested":[6029314,6488066,7274498,13762561,13893633,14680066,14745602,21102593,21233665,21823490,22085634,24444930,24772609,25493506,26083329,26411009,27394050,27525121,27721730,28311553,28377090,28573698,29556738,29753345,30736386,31981569,33095681,41943041,59572225],"range":[7143425,8060929,8126465,9830401,15728641,15794177,16580609,19202049],"represents":[1179649,1572865,1638401,1769473,1900545,1835009,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3080193,3276801,3342337,3407873,3473409,3538945,3604481,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6029314,6291457,6356993,6488065,6553601,6750209,6881281,7012353,7143425,7208961,7274498,7536641,7798785,8060929,8716289,8978433,11599873,13631489,16252929,17104897,17825793,18546689,18677762,19333121,19726337,20054017,20512769,21299201,22544386,23789569,24379394,30801922,31195137,31653890,38010896,38535172,39321607,39976964,40566787,41615361,45481985,45744129,46202881,48365569,49020929,50003969,52166657,53084162,53477377,53673986,53870594,54067203,54722561,55115778,55312385,55705601,55836673,55902209,56033281,56229889,56426497,56492034,56754178,57016321,57212930,57278466,57540609,57671681,57933826,57999361,58064897,58130434,58195969,58261506,58327041,58392578,58458113,58523649,58589185,58654722,58720257,58785793,58851329,58916865,58982402,59113473,59244545,59310081,59375617,59506689,59703298,59768833,59899906,60096514,60162049,60227585,60293121,60358657,60489729,60555266,60751873,60817410,60882945,61014017,61145089,61407234,61472770,61538306,61603841],"replaces":[41353217,45219841],"require":[13828098,19398658],"representing":[9502721,10354689],"rootnode":[37093377,48562180,53673985],"retrieval":[13434881,14614529,21626881],"refers":[8126465,8454145,9437185],"restrict":[13303809,13959169,22609921,23396353],"resources":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2621441,2686977,2818049,2162689,2228225,2883585,3014657,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063234,4128769,4259841,4325377,4390913,4456449,4521986,4587524,4653057,4849665,4980738,5046273,5111809,5177345,5439489,6291460,6356996,6553604,6881281,7208964,7536644,7798785,8716292,8978436,18874372,19791873,24576001,24707073,30212097,30539777,36110339,36831235,38010881,38273028,39059459,40042497,40632323,40763395,41549825,42074115,42205187,43122692,43909123,44171265,44433412,44957699,45088771,46071809,46268419,47251457,47775747,48168962,48758786,49348610,49676289,49938433,50659332,51183617,51576833,52297729,53084161,53477377,53673985,53870593,54067201,54722561,54853633,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,56819714,57212929,57671681,57933825,57999361,58130433,58195975,58261506,58327044,58392583,58523649,58589185,58654721,58720257,58785793,58851329,58916865,59113473,59244545,59310081,59375617,59506689,59703298,59768833,59834369,59899905,59965441,60096519,60162049,60227586,60293121,60358657,60424193,60489729,60555265,60751873,60817415,60882951,61014017,61407239,61472769,61538311,61603847],"runaway":[51511297],"representative":[7077889],"retrievable":[52822017,53280769],"remain":[52035585,52822017,53280769,56098817],"replaced":[131073,196609,262145,589825,54067201,56426497,57999361],"restriction":[2293764,3735554,4587522,6291458,6356994,6553602,7208962,7536642,7929858,8585218,8716290,8978434,9240578,9895938,13303809,13959169,22609921,23396353,32505860,33619970,35717122,39059458,40042498,40632322,42074114,42205186,43450371,43909122,44171266,44957698,45088770,46268418,47775746,49414147,58195972,58327044,58392580,59047940,60096516,60817412,60882948,61407236,61538308,61603844],"reside":[61210625],"resolve":[6029313,6488065,7274497]} \ No newline at end of file +{"rank":[7733255],"response":[49545217,59834369,60293121,70778881,74383361,75366401,76087297,77791233],"requesting":[7405569,9043969,10682369],"recompilation":[7077894,11010054,36044802,37748738,38076418,38273025,39387137,40042499,41418753,42401794,43122689,43515905,44302337,45744130,45875203,46858242,47513602,49217537,49545217,50003971,50987011,51642371,51970050,54460417,54853635,54984706,57016321,57212931,71172097,75366406,76087302,79560706],"range":[7995393,8585217,8978433,9109505,14876673,16318465,16973825,18874369,19070977,19136513,20905985,22020097],"restore":[56360961,62849025],"recommended":[57737217,58130433,58523649,60293121,61407233,61669377,62193665,63045633,63569921,64159745,64684033,65273857,67764225,68091905,68485121,69533697,70975489,73662465,74252289,75104257,76087297,76939266,77463553,77856769,77922305,78512129,79953921,80281601,81002497,81068033,81264641],"readonly":[2,786434,917506,2359298,55771137,56950785,57147393,57475073,58195969,58327041,58392577,58458113,58785793,59179009,59310081,59506689,59637761,59703297,59965441,60030977,60096513,60489729,60555265,60948481,61145089,61472769,61865985,62390273,62521345,62586881,62914561,63111169,63176705,63242241,63307777,63373313,63438849,63569921,63832065,64028673,64487425,64880641,64946177,65011713,65142785,65208321,65339393,65404929,65732609,65798145,65929217,66060289,66125825,66191361,66256897,66322433,66519041,66715649,66846721,66977793,67108865,67239937,67371009,67436545,67502081,67960833,68026369,68091905,68222977,68419585,68485121,68550657,68616193,68681729,68747265,68812801,69206017,69271553,69599233,69664769,69730305,69795841,70057985,70123521,70189057,70385665,70451201,70516737,70647809,70713345,70844417,71106561,71434241,71499777,71630849,71696385,72089601,72351745,72482817,72941569,73072641,73203713,73334785,73465857,73596929,73662465,73728001,73793537,73859073,74186753,74252289,74579969,74907649,75038721,75825153,76021761,76218369,76349441,77463553,77529089,77922305,78315521,78381057,79364097],"removepropertynocheck":[1966081,2883585,3080193,6422529,19660801,20840452,71368705,74121217,75628545],"resourc":[78446595],"releasing":[2097153,2752513,2818049,3276801,3473409,3735553,3997697,4063233,4259841,4390913,5373953,5570561,5963777,7077889,8716289,9306113,9502721,9830401,11010049,11206657,11403265,24510465,25296897,46465025,51904513,56164353,56623105,70320129,73138177,74645505,75104257,75366401,75497473,76087297,76283905,77135873,77856769,78184449,78512129,79495169,79953921,80084993,80281601,80936961,81002497,81068033,81199105,81264641],"readonlyspan":[2818049,3276801,3473409,3997697,4390914,4915202,7340035,9895939,16842757,22282245,23986181,26869767,28704775,30081031,35651591,41222151,44826625,49020929,51052546,51249153,51445762,54067202,73138177,74645505,75497473,76349443,77135873,77529091,78184450,79364098],"regardless":[15990785,75235330,75563009],"resolution":[76939265],"relative":[68550658,70189058,71434242,76873729],"registered":[3735568,5373968,8716304,8847361,9175041,9306128,9502736,9830416,11010064,11206672,11403280,13172738,13238274,13434882,13500418,13697026,13828098,14745602,14811138,15073282,15400962,15597570,15859714,17235970,17301506,17825794,18087938,18284546,18546690,19202050,19988482,20119554,20316162,20578306,20774914,21495810,22216706,22478850,22937602,23527426,23592962,24182786,25100290,45350920,47710216,48168968,51183624,75104272,76087312,77856784,78512144,79953936,80281616,81002512,81068048,81264656],"reclaimed":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,21757953,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"runtim":[11010049,36241409,36372481,37945345,38273025,39387137,39452673,39518209,40239105,43515905,43581441,44433409,49741825,52625409,59834371,60293122,70778881,71041026,72155137,72220674,72876033,74383361,75366403,76087299,79757313],"removing":[56229889,66453505,67698689],"returned":[18219011,26542083,36175873,37552129,38207489,40108033,40435713,43122689,44040193,48037889,48365569,49217537,49807361,51707905,54460417,79364097,80412673],"readbytes":[2818050,3276802,3473410,3997698,4390914,16449541,16646149,18153477,18677765,47906818,53215234,73138178,74645506,75497474,77135874,78184450],"runaway":[70975489],"relevant":[7929857],"representing":[10158081,11337729],"runtimeheapsizesampleinterval":[60293121,72810500,76087297],"remainder":[43843585,44564481],"resource":[851969,6357001,35192834,35258370,36896770,39649282,40960002,41877506,42336258,42991618,44761090,47054850,47972358,49086466,49545217,50921474,55836678,71041025,72220673,74711041,75366406,76087302,76152833,76939265],"rejected":[62259201,65077249,72286209,73990145,74842113,76021761,79233027],"represents":[393217,851969,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4849665,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7405569,7798785,7864321,7995393,8716289,9043970,9109505,9306113,9502721,9764865,9830401,10682370,11010049,11206657,11403265,13107201,17039361,17170433,17956865,18219009,18415617,19398657,20054017,21233665,21299202,24576002,25231361,26083330,26542081,26935297,33619969,35127297,38600705,40370177,40697858,41484290,42663937,45547536,48103428,49545223,51707923,52232196,53673987,59179009,60358657,62455809,62980097,65404929,66715649,68943873,69337090,70320129,70909954,71172098,71303169,71368705,71761922,72024065,72089601,72417281,72548354,72613889,72679425,73138177,73269249,73531394,73990145,74121219,74317825,74514433,74711042,74842113,74973185,75038721,75104258,75169793,75300865,75366402,75431938,75497473,75628545,75694081,75759617,75890689,75956225,76087298,76152833,76283905,76349441,76414977,76480513,76546049,76742657,76939265,77266945,77332482,77398017,77529089,77725697,77856769,77987841,78053377,78184449,78249985,78512129,78577665,78643201,78708738,78905345,78970882,79036417,79101953,79167489,79298561,79364097,79495169,79626241,79691778,79822849,79888386,79953921,80019458,80084993,80216065,80281602,80347138,80478209,80543745,80609281,80674817,80740353,80805889,80871426,80936961,81002498,81068033,81199105,81264642,81330178],"retrieval":[13303809,15007745,22413313,77660161],"requiredargcount":[32505861,33619973,34013189,34471941,34668549,35782661,36110341,36438021,37355525,38141957,38469637,38928389,40370181,44957701],"resumed":[71827457,73400321],"resumes":[11010049,36700161,76087297],"running":[2490374,3670024,8060929,8192001,8323073,8781825,10092545,10420225,17039361,17170433,17956865,18415617,19398657,21233665,25231361,26935297,50397186,52166660,54263816,56033281,56688641,57278465,58523649,62717953,63963137,64159745,66650113,76677126,78774280],"referenced":[4521985,7929857,75956225],"required":[5767170,7405569,8585217,9043969,10682369,16711681,23199745,32505858,33619970,34013186,34471938,34668546,35782658,36110338,36438018,37355522,38141954,38469634,38928386,40370178,44957698,50069508,52494340,53739522,56754178,58654722,72417282,74514434,75431939,79626244,80281601,80478212,81002497,81068033],"removal":[12582913],"requests":[7405569,9043969,10682369],"reduces":[56688641,66650113],"representation":[3735553,5373953,6160386,8716289,9306113,9502721,9830401,11010049,11206657,11403265,15663105,18219009,23658497,26542081,41549826,43188225,45547521,48955393,52428801,60358657,61669377,62980097,67764225,72548353,75104257,76087297,76480513,77856769,78512129,78970881,79953921,80019458,80281601,81002497,81068033,81264641],"runtime":[655361,983041,1310722,3014657,3342337,3407873,5963777,7077889,9568257,10878977,11010050,11468801,11665409,11862017,16711681,19005441,23199745,35192833,35258369,35389441,36896769,37027841,37093377,37289985,38338561,38535169,38731777,39124993,39256067,39452673,39649281,40304641,40763393,40828931,40960001,41680897,41811969,41877506,42205185,42336257,42532865,42991618,43253761,43778051,44498945,44761090,44892161,45481987,47054850,47316993,47972364,49086466,49545221,50724867,50921474,54198273,58523649,59834370,60293122,61014017,61800449,64159745,67698689,70516737,71041027,71565313,71827460,72155137,72220674,72548353,72810497,73400322,73596929,73924610,74055681,74383361,74448899,75366418,76087300,76152834,76546049,77004801,77398017,77791235,78970881,79757313,80084993,80543745],"replaced":[589825,720897,1114113,1376257,71368705,74121217,75628545],"refers":[8454145,8978433,10354689],"representative":[7929857],"relaxes":[76873729],"recently":[35979265,42729473],"reclaims":[72155137],"release":[21430274,41353218,46989314,51511297,76939265,77004801],"related":[63635457,72744961],"require":[16711682,23199746],"result":[917505,1179649,3538945,4915222,5177345,8388612,8912897,9043969,9633793,10223617,10485761,10551297,10616833,10682369,10747905,10813441,11730945,11927553,12124161,12386305,12517377,12779521,12845057,12910593,13631489,13893633,13959170,14155778,14221313,14680065,15204353,15728642,16121857,16252929,16580609,17956865,18022402,18219011,19398657,19464194,19857410,21037058,21364738,22872066,23003137,23265281,23789569,24313858,24969217,25231361,25362433,25427970,25559041,26345473,26542083,26738690,26935297,27000837,28114945,28377089,28639234,29163525,30539777,32636929,33292291,33751043,34865155,34930691,35717123,36175874,36306947,36569091,36831234,37224451,37421059,37552130,37683202,38207490,38797315,38862851,39583747,40108034,40435714,40566788,40697857,41222147,42008579,42795011,43122690,43843586,44040194,44367875,44564482,45088770,45416451,45547521,45613057,46137347,47120386,48037890,48365570,49217538,49283073,49807362,51380225,51445780,51707905,52887553,53280770,54460418,57737217,57868291,58130433,60293121,61407233,61669377,62193665,63045633,64421889,64684033,65273857,67764225,68878337,69140483,69533697,70385667,75104257,76087297,76939265,77856769,77987841,78512129,78708738,79364120,79757313,79822853,79953921,80281601,80609285,81002497,81068033,81264641],"ref":[524289,1441793,5308417,7929857,8912897,12320769,13959170,36175873,37552129,38207489,40108033,40435713,43122689,44040193,48037889,48365569,49217537,49807361,54460417,54591489,68943873,69992449,70909953,71172097,71368705,71761921,71958529,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76677121,76742657,77201409,77266945,77332481,77398017,77529089,77594626,77856769,77987841,78249986,78577665,78708737,78774273,78970881,79036417,79167489,79298561,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80805889,80871425,81002497,81068033,81264641,81330177],"root":[3014657,3407873,53805057,57147393,62390273,65142786,66519041,67502081,69206017,70713345,72548353,74907649,76873729,78381057,78446593,78970881,80019457],"redirected":[196609],"released":[72155137],"results":[13303809,49545217,57278465,63963137,71041025,72220673,75104257,79560705,79757313,79953921,81264641],"request":[11010049,38404097,76087297],"rethrown":[15990785],"releases":[4587521,5373955,8716291,9306115,9502723,9830403,11010051,11206659,11403267,21430274,21757953,41353218,46989314,51511297,51904514,56164354,56623106,67895297,71172097,75104259,76087299,77856771,79953923,80281603,81002499,81068035,81264643],"relies":[67895297,77791233],"remarks":[393217,6291457,6356993,6422529,6619137,6684673,6815745,7208961,7405569,7995393,8388609,8454145,8585217,8650753,8847361,8912897,8978433,9043969,9109505,9175041,9568257,9633793,9699329,9961473,10027009,10158081,10223617,10289153,10354689,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11075585,11141121,11272193,11337729,11468801,11665409,11730945,11862017,11927553,11993089,12124161,12386305,12517377,12582913,12779521,12845057,12910593,13041665,13172737,13238273,13303809,13434881,13500417,13631489,13697025,13828097,13893633,13959169,14024705,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14745601,14811137,14876673,14942209,15073281,15204353,15269889,15335425,15400961,15466497,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16187393,16318465,16384001,16515073,16580609,16711682,16973825,17104897,17235969,17301505,17760257,17825793,17891329,18022401,18087937,18219010,18284545,18546689,18808834,18874369,19005441,19070977,19136513,19202049,19464193,19660801,19857409,19922946,19988481,20054018,20119553,20250625,20316161,20381697,20447233,20512769,20578305,20774913,20840449,20905985,21037057,21102593,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21889025,22020097,22216705,22347777,22478849,22544385,22609921,22872065,22937601,23003137,23199746,23527425,23592961,23658497,23855105,24117249,24182785,24313857,24379393,24576001,24641537,24903681,25100289,25427969,25624577,25821185,25886721,26017793,26279937,26476545,26542082,26607617,26738689,26804225,26869761,27066369,27656193,27787265,27852801,27983873,28442625,28573697,28639233,29032449,29097985,29229057,29294593,29360129,29425665,29622273,29818881,29884417,30015489,30146561,30277633,30670849,30736385,30801921,30932993,30998529,31064065,31719425,31981569,32047105,32112641,32178177,32309249,32374785,32440321,32768001,32833537,33882113,34078721,34209793,34275329,34406401,34668545,35323905,35389441,35520513,35651585,35979265,36044801,36175873,36241409,36372481,36700161,37093377,37158913,37289985,37552129,37748737,37879809,37945345,38076417,38207489,38273025,38404097,38535169,38666241,38928385,39059457,39256065,39387137,39452673,39518209,39780353,39911425,39976961,40042497,40108033,40239105,40304641,40435713,40632321,40697857,40763393,40828929,41353217,41484289,41549825,41615361,41680897,41877506,42139649,42205185,42270721,42401793,42467329,42532865,42729473,42991618,43122689,43188225,43319297,43515905,43581441,43712513,43778049,43843585,44040193,44433409,44498945,44564481,44761090,45088769,45219841,45285377,45481985,45613057,45744129,45875201,46333953,46792705,46858241,46989313,47054850,47120385,47513601,48037889,48365569,48955393,49086466,49217537,49283073,49741825,49807361,49872897,50135041,50593793,50921474,50987009,51118081,51380225,51511297,51970049,52428801,52625409,52953089,53149697,54132737,54198273,54460417,54984705,56033281,56229889,56360961,56688641,57147393,57278465,57344001,57868289,58523649,58916865,58982401,60096513,60162049,60817409,60882945,61669377,61734913,61931521,62062593,62128129,62259201,62390273,62586881,62717953,62849025,63635457,63963137,64094209,64159745,64290817,64421889,64487425,64552961,64815105,64880641,65077249,65536001,65601537,65798145,66256897,66387969,66453505,66519041,66584577,66650113,66715649,67305473,67502081,67567617,67698689,67764225,67829761,67895297,68091905,68354049,68419585,68550657,68878337,69140481,69206017,69271553,69337089,69402625,69468161,69599233,70057985,70189057,70254593,70385665,70451201,70713345,70975489,71041025,71237633,71434241,71565313,71827457,71892993,72155137,72220673,72286209,72810497,73400321,73662465,73924609,73990145,74055681,74121217,74252289,74448897,74842113,74907649,75038721,75104257,75235329,75431937,75563009,75759617,76087297,76414977,76611585,77070337,77266945,77463553,77922305,77987841,78184449,78249985,78381057,78577665,78708737,79167489,79298561,79888385,79953921,80216065,80281601,80805889,80871425,81002497,81068033,81264641,81330177],"restricted":[8192001,8323073,10092545,10420225,17891329,20250625,21102593,22609921,52035585,52166657,55377921,58523649,64159745,79429633],"represent":[7995394,9109506,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14286849,14352385,14417921,14745601,14811137,15073281,15335425,15400961,15466497,15597569,15794177,15859713,15925249,16711681,17235969,17301505,17760257,17825793,17891329,18087937,18284545,18546689,19202049,19988481,20119553,20250625,20316161,20381697,20512769,20578305,20774913,21102593,21495809,21692417,22216705,22478849,22544385,22609921,22937601,23199745,23527425,23592961,24117249,24182785,24379393,24903681,25100289,26017793,26476545,27066369,27983873,60162049,64552961,64815105,67305473,74121218,80871425],"return":[6291457,6356993,7208961,7405570,7536641,7602177,7733249,7798785,7929857,7995393,8060929,8192001,8323073,8388611,8454145,8519681,8585217,8781825,8847361,8912897,8978434,9043970,9109505,9175041,9568257,9633793,9699329,9764865,9961474,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616834,10682370,10747905,10813441,10878977,10944513,11075587,11141121,11272193,11337729,11468801,11665409,11730945,11862017,11927553,11993089,12124161,12386305,12517377,12582913,12779521,12845057,12910593,13041665,13107201,13631489,13893633,13959169,14090241,14155778,14221313,14680065,14876675,15007745,15204353,15663105,15728642,15990786,16056322,16121857,16252929,16449537,16580609,16646145,16777217,16842753,16908289,16973827,17039361,17170433,17432577,17498113,17629185,17956865,18022402,18153473,18219010,18415617,18677761,18743297,18808833,18939905,19005441,19136515,19333121,19398657,19464194,19595265,19791873,19857410,19922945,20054017,20185089,20643841,20840449,21037058,21168129,21233665,21299201,21364738,21954561,22020099,22282241,22413313,22675457,22872066,23003137,23068673,23265281,23658497,23789569,23986177,24248321,24313858,24576001,24772609,24838145,24969217,25231361,25362433,25427970,25493505,25559042,25624577,25690113,26083329,26148865,26279937,26345473,26411009,26542082,26673153,26738690,26869761,26935297,27000834,27328513,27459585,27525122,27590657,27656193,27721729,27787265,27852801,27918338,28049410,28114945,28246018,28180481,28377089,28442625,28508162,28573697,28639234,28704770,28770306,28835842,28901377,29032449,29097985,29163522,29229057,29294593,29425665,29491202,29556738,29622273,29753345,29818881,29884417,29949954,30015489,30081026,30146561,30212098,30277633,30343170,30408706,30474242,30539777,30605314,30670849,30736385,30801921,30867458,30932993,30998529,31064065,31129602,31195138,31260674,31326210,31391745,31588354,31719425,31784962,31850498,31916034,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32571394,32636929,32702466,32768001,32833537,32964610,33030146,33095682,33226753,33357826,33488897,33816578,33947650,34078721,34209793,34275329,34340866,34537474,34603010,35389441,35520513,35586050,35651585,35848194,35979265,36044801,36175873,36241409,36372481,36634625,37093377,37289985,37486593,37552129,37748737,37945345,38076417,38207489,38273025,39256065,39387137,39518209,40042497,40108033,40173569,40239105,40435713,40697857,40828929,40894465,41025537,41156609,41287681,41418753,41484289,41549825,42074113,42139651,42205185,42401793,42467329,42598401,42663937,42729473,42926081,43057153,43122689,43515905,43581441,43778049,43843586,44040193,44302337,44433409,44564482,44630019,45023233,45088770,45481985,45613058,45744129,45875201,46333953,46858241,47513601,48037889,48365569,48955393,49217537,49283074,49741825,49807361,50659329,50724865,50987009,51380226,51970049,52428801,52625409,54460417,54591489,54984705,57016321,57737218,57868289,58130434,58523649,59572225,60293122,60686337,61079553,61407234,62193666,63045634,64159745,64421890,64684034,65273858,66912257,68091905,68878338,69140481,69337089,69533698,69926913,70057985,72679425,73662465,74252289,75104258,76087298,77463553,77725697,77856770,77922305,78053377,78512130,78708738,79036417,79429634,79822850,79953922,80281602,80412673,80609282,81002498,81068034,81264642],"resolve":[7405569,9043969,10682369],"recursion":[71827457,73400321],"requested":[7405570,9043970,10682370,14155778,14483458,16515073,21037058,21364737,21626882,26607617,26738689,36175873,38207489,40894466,42074114,43057153,43581442,44433410,45023233,45744130,47513602,48037890,49741825,49807362,51970049,52625409,54984705,61603841,76873729],"runtimes":[36044801,37748737,38076417,42401793,45744129,46858241,47513601,49545217,51970049,54984705,76546049],"reside":[79233025],"removeproperty":[3538946,4521986,10289157,11993093,47579138,75956226,77987842],"random":[10878981],"reclaim":[51511297],"readable":[4456449,4784129,4980737,24248323,73269249,74973185,75694081],"requirement":[58523649,64159745,76873729],"reassignment":[76611585,77070337],"rootnode":[53805057,65142788,80019457],"restriction":[2490372,3735554,5373954,8192002,8323074,8716290,9306114,9502722,9830402,10092546,10420226,11010050,11206658,11403266,17891329,20250625,21102593,22609921,52035586,52166660,55377922,56360963,57737218,58130434,58523650,60293122,61407234,62193666,62849027,63045634,64159746,64684034,65273858,69533698,75104260,76087300,76677124,77856772,78512132,79953924,80281604,81002500,81068036,81264644],"reason":[56819713,74186754,80347137],"removeelement":[3538945,4521985,13041668,75956225,77987841],"rely":[56688641,66650113],"resetting":[2097153,2752513,2818049,3276801,3473409,3735553,3997697,4063233,4259841,4390913,5373953,5570561,5963777,7077889,8716289,9306113,9502721,9830401,11010049,11206657,11403265,24510465,25296897,46465025,51904513,56164353,56623105,70320129,73138177,74645505,75104257,75366401,75497473,76087297,76283905,77135873,77856769,78184449,78512129,79495169,79953921,80084993,80281601,80936961,81002497,81068033,81199105,81264641],"rejection":[77791233],"replace":[6291464,7208968],"read":[1966083,2883587,3080195,4390914,5767172,6422530,7143425,13959171,16449537,16646145,16711681,16777222,16842753,18153473,18677761,18743302,19660802,20840449,20971521,21889025,22282241,22347777,23199745,23986177,28704769,30081025,33882113,41222145,46792705,47906817,49872897,50266115,51118081,53215233,54001665,58261505,58392577,58589185,64618500,65798145,69337089,71368707,74121219,75431940,75628547,76021761,76414977,76480513,78184450,80674817],"returns":[851969,1638402,1703937,1769476,1835009,1900545,1966081,2031620,2162689,2228225,2293761,2555905,2621441,2686977,2818052,2883585,2949124,3014658,3080193,3145732,3211265,3276804,3342338,3407874,3473412,3538948,3604481,3866625,3932161,3997700,4128769,4194305,4325377,4390916,4521987,4653060,4587521,4718594,4849665,4915202,5046276,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963778,5898242,5767169,6094849,6160386,6553603,6946817,7077891,7340034,7864321,8388611,8716289,9306113,9502721,9830401,9895938,10944515,11010051,11075587,11206657,11403265,11665409,14876673,15663105,15990785,16318465,16973825,18219009,18808833,18874369,19070977,19136513,19922945,20054017,20905985,21299201,22020097,23658497,24576002,26083329,26542081,35979265,37486593,40632321,40697858,41484290,41549825,42139649,42729473,42860545,44630017,45547521,46202884,46333953,48758786,48955394,49938436,50724865,52428801,52887554,53477378,57868290,58982401,60096513,61734913,61931521,62586881,64880642,65536001,65601537,65798145,66256897,68419585,68943873,69140482,69271553,69599233,70909953,71172097,71368705,71761921,71827457,72417281,72548354,72613889,73138180,73400321,73531393,73990148,74121217,74514433,74645508,74711041,74842116,75038724,75104257,75169793,75366403,75431937,75497476,75628545,75759620,75956227,76087299,76152833,76349442,76414977,76480513,76546049,76742657,77135876,77266945,77332481,77398017,77529090,77856769,77987844,78184452,78249985,78577665,78708739,78839810,78970882,79101954,79167492,79364098,79626241,79691777,79888385,79953921,80019458,80084994,80216068,80281601,80347137,80478209,80543746,80674817,80740354,80805891,80871425,81002497,81068033,81264641,81330177],"retrievable":[75235329,75563009],"replaces":[62062593,67567617],"restrict":[17891329,20250625,21102593,22609921],"replacement":[67895297],"reflection":[6356993,56688644,57278467,57737218,58130434,58916865,60293122,61407234,62193666,63045634,63963139,64290817,64684034,65273858,66650116,69533698,75104258,76087298,77856770,78512130,79953922,80281602,81002498,81068034,81264642],"retain":[10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,14221313,15204353],"returning":[3538945,4521985,8912897,75956225,77987841],"runtimeheapsizeviolationpolicy":[60293121,71041025,74383364,76087297],"recurring":[77266945,78577665],"references":[51511297,60162049,64552961],"reference":[1,393217,131073,524289,589825,262145,655361,720897,327681,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2818049,2490369,2293761,2359297,2752513,2424833,2686977,2555905,2883585,2621441,2949121,3014657,3080193,3145729,3211265,3276801,3407873,3342337,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4653057,4587521,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5832705,5963777,5898241,5767169,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405570,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8519681,8454145,8585218,8650753,8781825,8716289,8847361,8912897,8978433,9043970,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10616833,10682370,10747905,10813441,10551297,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13107201,13041665,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959172,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18284545,18219010,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25362433,25427969,25493505,25559041,25624577,25690113,25296897,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542082,26607617,26673153,26738689,26804225,26869761,26935297,27000833,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28246017,28180481,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33947649,33882113,34013185,34144257,34209793,34078721,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36306945,36438017,36372481,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38404097,38469633,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40501249,40435713,40566785,40632321,40697857,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,41943041,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909121,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45285377,45350913,45416449,45481985,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775745,47841281,47906817,47972353,48037889,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55312385,55377921,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56754177,56688641,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737218,57802753,57868289,57933825,57999361,58064897,58130434,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293122,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407234,61472769,61538305,61669377,61800449,61734913,61865985,61931521,61997057,62062595,62128130,62193666,62259201,62324737,62390273,62455809,62521345,62586881,62652417,62717953,62783489,62849025,62914561,62980097,63045634,63111169,63176705,63242241,63307777,63373313,63438849,63504385,63569921,63635457,63700993,63766529,63832065,63897601,63963137,64028673,64094209,64159745,64225281,64290817,64356353,64421889,64487425,64552961,64618497,64684034,64749569,64815105,64880641,64946177,65011713,65077249,65142785,65208321,65273858,65339393,65404929,65470465,65536001,65601537,65732609,65667073,65798145,65863681,65929217,65994753,66060289,66125825,66191361,66256897,66322433,66387969,66453505,66519041,66584577,66650113,66715649,66781185,66846721,66912257,66977793,67043329,67108865,67174401,67239937,67305473,67371009,67436545,67502081,67567619,67633153,67698689,67764225,67829761,67895297,67960833,68026369,68091905,68157441,68222977,68288513,68354049,68419585,68485121,68550657,68616193,68681729,68747265,68812801,68878337,68943873,69009409,69074945,69140481,69206017,69271553,69337089,69402625,69468161,69533698,69599233,69664769,69730305,69795841,69861377,69926913,69992449,70057985,70123521,70189057,70254593,70320129,70385665,70451201,70516737,70582273,70647809,70713345,70778881,70844417,70909953,70975489,71041025,71106561,71237634,71172097,71303169,71368705,71434241,71499777,71565313,71630849,71696385,71761921,71827457,71892993,71958529,72024065,72089601,72155137,72220673,72286209,72351745,72417281,72482817,72548353,72613889,72679425,72744961,72810497,72876033,72941569,73007105,73072641,73138177,73203713,73269249,73334785,73400321,73465857,73596929,73531393,73662465,73728001,73793537,73859073,73924609,73990145,74055681,74121217,74186753,74252289,74317825,74383361,74448897,74514433,74579969,74645505,74711041,74776577,74842113,74907649,74973185,75038722,75104258,75169793,75235329,75300865,75366401,75431937,75497473,75563009,75628545,75694081,75759617,75825153,75890689,75956225,76021761,76087298,76152833,76218369,76283905,76349441,76414977,76480513,76546049,76611585,76677121,76742657,76808193,76873729,76939265,77004801,77070337,77135873,77201409,77266945,77332481,77398017,77463553,77529089,77594625,77660161,77725697,77791233,77856770,77922305,77987841,78053377,78118913,78184449,78249985,78315521,78381057,78446593,78512130,78577665,78643201,78708737,78774273,78839809,78905345,78970881,79036418,79101953,79167489,79233025,79298561,79364097,79429633,79495169,79560705,79626241,79691777,79757313,79822849,79888385,79953922,80019457,80084993,80150529,80216065,80281602,80347137,80412673,80478209,80543745,80609281,80674817,80740353,80805889,80871425,80936961,81002498,81068034,81133569,81199105,81264642,81330179],"retrieves":[11862017,19005441,45547521,77725697],"retrieved":[56360961,57737217,58130433,60293121,61407233,62193665,62849025,63045633,64684033,65273857,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"responsible":[68419585],"remove":[655361,983041,1114113,1966081,2883585,3080193,3211266,10289155,11993091,13041667,17629185,19333121,19791880,20840450,21954561,22675457,47579137,71368705,74121217,75628545,76414978],"remote":[76939265,77004801],"receive":[62259201,65077249,72286209,73990145,74842113,76021761],"restrictions":[57737217,58130433,60293121,60817410,61407233,62193665,63045633,64684033,65273857,66387970,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"reaches":[76939265],"remain":[73924609,74448897,75235329,75563009],"removed":[10289153,11993089,13041665,17629185,19333121,19791873,20840449,21954561,22675457,76939265,77004801],"retrieve":[61734913,61931521],"removes":[1966083,2097154,2752514,2818050,2883587,3080195,3211267,3276802,3473410,3538947,3997698,4390914,4521987,5570562,5963778,10289153,11993089,13041665,15269889,17629185,18219009,19333121,19791873,20840449,21889025,21954561,22675457,26542081,26804225,45940738,47579138,56098818,71368707,73138178,74121219,74645506,75497474,75628547,75956227,76283906,76414979,77135874,77987843,78184450,79495170,80084994,81199106],"randomt":[10878978],"resources":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3276801,3342337,3407873,3473409,3538945,3604481,3735553,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4521985,4587522,4653057,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373956,5439489,5570561,5636097,5701633,5963778,5767169,6094849,6160385,6553601,6946817,7077890,7340033,7864321,8716292,9306116,9502724,9830404,9895937,11010052,11206660,11403268,21430276,21757953,24510465,25296897,41353220,45547521,46465025,46989316,51511297,51707905,51904515,56033284,56164355,56623107,57147394,57737219,58130435,58523649,60293123,61407235,61734913,61931521,62193667,62390273,62717956,63045635,63635457,64159745,64684035,65273859,66519041,67502082,68943873,69206018,69533699,70320129,70713345,70909953,71172098,71368705,71761921,72417281,72548353,72613889,73138177,73531393,73990145,74121217,74514433,74645505,74711041,74776577,74842113,74907649,75038721,75104263,75169793,75366402,75431937,75497473,75628545,75759617,75956225,76087303,76152833,76283905,76349441,76480513,76546049,76611585,76742657,77135873,77266945,77332481,77398017,77529089,77856775,77987841,78184449,78249985,78381058,78446593,78512132,78577665,78708737,78839809,78970881,79167489,79364097,79495169,79626241,79691777,79888385,79953927,80019457,80084994,80216065,80281607,80347137,80478209,80543745,80674817,80740353,80805889,80871425,80936961,81002503,81068039,81199105,81264647,81330177]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_115.json b/docs/Reference/fti/FTI_115.json index a45d915c0..5c62dedcf 100644 --- a/docs/Reference/fti/FTI_115.json +++ b/docs/Reference/fti/FTI_115.json @@ -1 +1 @@ -{"smart":[61669377],"stale":[60686338],"standards":[61669377],"scenarios":[42795009,48889857,50200577,53936129],"system":[2031620,6815747,7143427,7405571,7864323,8060931,8126469,8257537,8650753,8847364,8912897,9043969,9306115,9437188,9568259,9699330,9830405,10289154,10354689,10420226,10485762,10616838,10682370,10878977,11075586,11141121,11206658,11337730,11665410,12058626,12189698,12255234,12582914,12910595,13565953,13631492,23789572,30670853,51576834,52428801,53084161,53477378,53673985,53870597,54067201,54722562,55115777,55246849,55312386,55705602,55836673,55902210,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654724,58720257,58785793,58851330,58982401,59047937,59113474,59244545,59310081,59506690,59572225,59703297,59768833,59899905,60030977,60096513,60227586,60358658,60489729,60555265,60817409,60882945,61079553,61145089,61276161,61407233,61472769,61538305,61603841],"speed":[14352385,22937601,23986177,27918337,42467329],"scriptexception":[42729476,45744129,46006278,46202881,48365569,49545222,58458113,58654721,58982401],"sbyte":[3407873,5046273,10289159,58785793,59768833,60751873],"state":[327681,30539777,52035585,56098817,58654721],"scriptengine":[2293763,2949124,4587522,6291503,6357039,6553647,7209011,7536687,7995397,8585221,8716339,8978479,9895941,13434885,16252933,16842753,17235969,17760257,17825797,18087937,18612225,18743297,18874369,18939905,19070977,19136513,19333125,19398657,19464193,19529729,19660801,19791873,19922945,19988481,20119553,20250625,20316161,20447233,20512773,20643841,20709377,20774913,20971521,21037057,21102593,21233665,21364737,21430273,21495809,21757953,21823489,21889025,22085633,22151177,22216705,22413313,22478849,22609921,22740997,22806529,23068673,23199745,23265281,23396353,23789569,23920641,23986177,24248321,24576001,24641537,25100289,31784961,32374785,32505858,33030145,33423361,33488897,33882113,34209793,34471939,34603009,35258369,35717121,36110337,38010881,38862852,39059479,40632343,40960006,42074137,42205207,42795009,43450369,43909143,44171265,44630017,44957719,45088770,45219841,45875201,46268441,46333953,46465025,47054849,47185921,47579137,48234497,48758785,49283073,49741825,50659329,50790401,51183617,51314689,51838977,51904513,52494343,52953089,53411841,54001665,54525953,55050246,58195976,58392647,59047939,60096583,60817489,60883025,61079556,61407303,61538375,61603911],"shared":[720897,917505,1114113,1376257,1441793,1507329,7471105,7929857,7995393,8585217,9240577,9895937,16252929,17104897,17825793,18153473,18546689,19005441,19333121,19726337,20054017,20512769,21299201,31326209,42860545,44498945,45547521,46071809,46792705,47382529,47448065,48037889,52494337,53018625,54853633,55443457,61210626],"scheme":[10616833],"serializeobjectstate":[327681,58654721],"similar":[8257537,8912897,10878977,13565953,15859713,19529729,26476545,27197441,30867457,31588353,32112641,32964609,42336257,45875201,59637761],"starttimestamp":[37093377,50855940,53673985],"summarizes":[13631489,23789569],"statement":[12910593,13238273,13762561,14680065,15204353,15466497,15859713,16187393,16908289,18939905,19529729,20250625,21102593,21823489,22216705,23068673,23920641,27197441,30867457,31588354,32112641,32964610],"setproperty":[2621442,2686978,2818050,3145730,3211266,3407874,3670018,4128770,4521986,5046274,5177346,9633797,11534341,17170437,17891333,24182790,24903686,35782658,36962306,37289986,58785794,58916866,59375618,59768834,59834370,60162050,60227586,60293122,60424194,60751874,61014018],"simpler":[47382529],"segment":[59572225],"synchronous":[33685505,34734081,37224449,38207489,39124994,40173570,45613057,58392578,60096514,60882945],"searched":[7077889],"suitable":[25362433,26411009,27066369,27983873,28049409,28377089,28573697,29294593,30343169,31981569,34013185,37879809,60686337],"successfully":[6029313,6488065,7274497,12910593,14811137,15335425,17694721,23527425,24117249,24838145,25165825,25624577,25755649,30081025,38731777],"syncinvoker":[31522821,32309253,33161221,33685509,34144261,34734085,35454981,36306949,37224453,38207493,39059457,40632321,42205185,43909121,44957697,45613061,46268417,50069508,58392577,60096513,60882945,61407233,61538305,61603841],"statements":[13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16187393,16908289,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537,31588353,32964609],"shallow":[1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"strictly":[43057153,46465025,61472769],"schedule":[50593793,61145089],"server":[3735560,4587528,6291464,6357000,6553608,7208968,7536648,8323073,8650753,8716296,8978440,11927554,12320770,12845058,13369346,14090242,14876674,15925250,16842754,17563650,18087938,18612226,18743298,19988482,20643842,21495810,22413314,31064068,32047108,33423364,34209796,58195976,58327048,58392585,60096521,60817416,60882953,61407240,61538312,61603848],"sourceinfo":[6029318,6488070,7274501],"search":[1310721,5505025,6422529,6946818,41222145,41943041,43843586,45416449,46071810,53870593,60030977],"source":[1900545,2097154,2162689,2228226,6750210,7012354,7733249,17301510,17498118,18219014,19857409,21692417,38010884,39321601,40304641,45744129,51576833,52232194,55377921,56229890,57212930,57671683,57933827,58654721,61669377],"specifies":[8323073,8454145,8650753,38010887,39321601,39583745,43384833,45023233,50266113,50593793,50855937,52756481,53477377,54198274,54722561,55312385,56950787,57147396,58064897,58589185,59113473,59179012,59441154,59506689,59572229,59637763,59965445,60358657,60620801,61145105,61669386],"specifier":[6029318,6488070,7274501,13172741,13238277,13762565,13893637,14680069,14745605,20250630,20447238,21102598,21233670,21823494,22085638,24051717,24444933,24772613,25493509,25559045,26017797,26083333,26411013,26542085,26935301,27066373,27394053,27525125,27721733,28311557,28377093,28573701,29032453,29294597,29556741,29753349,30736389,31981573,33095685],"setpropertynocheck":[1769473,3276801,4259841,5373953,16318465,18808836,54067201,56426497,57999361],"specified":[1572866,1638401,1703937,1769474,1835009,1900545,1966081,2031620,2097154,2293767,2359297,2490370,2555906,2621442,2686978,2752515,2818050,2162689,2228226,2883586,2949124,3014659,3211266,3276802,3342338,3407902,3473409,3538946,3604481,3670020,3735601,3801089,3866625,3932161,3997697,4063233,4259846,4325377,4390913,4456449,4521986,4587570,4653057,4849666,4980755,5046306,5111809,5242881,5439489,5570561,5767169,5832705,6291506,6357042,6553650,6750209,6815746,6881281,6946817,7012353,7143425,7209022,7405570,7536690,7602177,7798785,7864321,7929858,7995393,8126465,8257538,8388609,8454145,8519681,8585219,8650754,8716338,8847363,8912899,8978482,9043970,9175041,9240578,9306116,9568257,9633794,9699329,9764865,9830401,9895939,9961473,10092547,10223617,10289153,10354690,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878979,11075585,11141123,11206657,11272193,11337729,11468801,11534338,11665409,11730945,11927555,12058625,12124161,12189697,12255235,12320770,12386305,12517377,12582913,12648449,12713985,12845058,12910593,13041665,13107202,13172737,13238273,13303809,13369346,13500418,13565955,13697025,13631491,13762562,13828097,13893634,13959169,14024705,14090243,14155778,14286850,14548995,14614529,14680066,14745602,14876675,14942210,15007745,15073282,15204354,15269889,15466498,15532034,15597570,15663105,15728641,15794177,15859713,15925251,16056321,16252929,16187395,16384001,16580609,16711681,16777217,16842754,16908291,17039362,17235970,17301505,17432577,17498113,17563650,17760258,17825793,18087939,18219009,18350081,18612226,18743299,18939906,19070978,19136513,19202049,19333121,19398657,19464194,19529729,19660802,19922945,19988483,20250625,20381697,20447233,20512769,20643843,20774913,20905985,21037057,21102594,21233666,21364737,21495810,21561345,21626881,21823490,21889025,22020097,22085634,22216706,22347777,22413314,22478849,22609921,22675457,22740993,22806530,22872065,23068675,23199746,23265281,23396353,23461889,23789571,23855105,23920643,24248322,24444929,24510465,24641539,24772609,25034753,25100289,25231361,25296897,25493505,25624577,25690113,25755649,25821185,25886721,26083329,26214401,26411009,26607617,26673153,26738689,26804225,27197441,27394049,27459585,27525121,27590657,27656193,27721729,27852801,28114945,28180481,28311553,28377089,28442625,28508161,28573697,28639233,28835841,28901377,29097985,29163521,29360129,29425665,29556737,29622273,29687809,29753345,29884417,30015489,30343169,30408705,30670851,30736385,30867457,30998529,31064080,31129601,31457282,31588354,31784961,31850497,31981569,32047120,32112641,32178177,32309249,32374785,32440321,32505862,32571394,32833537,32899073,32964610,33030146,33095681,33161217,33292296,33423376,33488897,33554433,33619970,33685505,33751042,33816587,33882114,34078721,34209808,34275329,34340865,34406401,34471937,34603009,34668546,34734081,34799618,34865156,35061761,35127297,35192835,35258376,35454977,35586050,35651591,35717122,36044801,36175876,36306945,36372488,36503553,36765698,37158914,37224449,37355521,37486593,37552129,37683202,37748737,38076417,38207489,38338571,38469633,38666244,38862852,39124996,39190529,39714824,40173572,40370181,41025537,41287684,41418753,41549825,41680897,41811972,41877506,42401793,42729473,43646977,45613057,45744130,46006273,46202882,46727169,46858241,47251457,48365571,49545217,50135041,50200577,50724865,51511297,51576835,51707905,52101121,52625409,53084161,53477378,53673985,53870596,53936129,54067208,54460417,54722562,55115777,55312386,55705603,55771137,55836673,55902209,56229889,56360961,56426498,56492033,56754177,57212929,57540612,57671682,57933826,57999362,58130434,58196019,58261534,58327089,58392630,58458115,58523649,58589185,58654725,58720257,58785826,58851329,58982404,59047943,59113475,59179009,59244545,59310081,59375618,59506697,59703297,59768862,59834370,59899905,60096566,60162050,60227586,60358659,60424194,60489729,60555265,60686337,60751876,60817481,60882995,61079556,61145094,61407286,61472769,61538358,61603891,61669379],"samples":[37093377,38404098,42074114,49217542,50987009,51249153,52887553,53673985,55574529,58261506,60817410],"securely":[41549825,47251457],"stringdictt":[9437186,12255234],"scriptengineexception":[327682,5111810,16384006,18415617,18677761,19267590,19857414,20381702,32571401,38010881,43712513,44236801,44892161,45481985,45744130,46006273,46727169,58654734],"simply":[49610753,50790401],"simultaneously":[24838145,25624577,25755649,30081025],"selector":[8126466,9306114],"scriptmemberflags":[22347781,22872069,24510469,25034757,35651588,38010881,50462727,59506692,59637764],"scriptinterruptedexception":[3080194,20840454,21692422,22020102,22675462,23658497,24379393,34799625,38010881,46202882,47513601,48103425,48627713,49020929,49545217,50135041,52035585,56098817,58982414],"standard":[8323073,8650753,11927553,12320769,12845057,14024705,14942209,15597569,15925249,16842753,18350081,18612225,19070977,19660801,19988481,20643841,22478849,23265281,34734081,35127297,36044801,38207489,39190529,41484290,41549825,45613057,47251457,48037894,52428802],"synchronously":[61407233,61538305,61603841],"script":[327681,524289,1179650,1900545,2097153,2293769,2424833,2555905,2621449,2686985,2818057,2162689,2228225,2883585,2949135,3080193,3145738,3211273,3342337,3407877,3538945,3670025,3735595,4063233,4128777,4521994,4587566,4784132,4849665,4980758,5046276,5111809,5177354,5242881,5570564,5636097,6291503,6357039,6553647,6750210,6881284,7012354,7209026,7471106,7536687,7733249,7864321,7929859,7995397,8126465,8388613,8454145,8519681,8585222,8716336,8978480,9109505,9240579,9306117,9371649,9437185,9502721,9568261,9633793,9699330,9830406,9895942,9961473,10027009,10092546,10158081,10289154,10354689,10420226,10485762,10551297,10682370,10747905,10878977,10944513,11075586,11141122,11206658,11337730,11534337,11665410,11927555,12058626,12189698,12320771,12582914,12648451,12713988,12845059,12910597,13041668,13107203,13172740,13238275,13303813,13369347,13434885,13500420,13565953,13631505,13697028,13762562,13828105,13893635,13959173,14024707,14090243,14155779,14286852,14417923,14483460,14548999,14614529,14680066,14745603,14811137,14876675,14942211,15007748,15073286,15138820,15204357,15269892,15335425,15400961,15466501,15532038,15597571,15663105,15859715,15925251,15990785,16187401,16252933,16384001,16515073,16646145,16777219,16842756,16908294,17104898,17170433,17235972,17367045,17563651,17760260,17825797,17891329,17956866,18087940,18153475,18284545,18350083,18415617,18546690,18612228,18677761,18743300,18808833,18874370,18939910,19005443,19070980,19136517,19267585,19333125,19398666,19464199,19529732,19660804,19726338,19791874,19857409,19922949,19988484,20054017,20119556,20250628,20316166,20381697,20447237,20512773,20578305,20643844,20709381,20774916,20840449,20905986,20971523,21037061,21102595,21168129,21233668,21299202,21364740,21430277,21495812,21561349,21626882,21692417,21757953,21823491,21889029,22020097,22085636,22151170,22216710,22282242,22347784,22413316,22478852,22609926,22675457,22740994,22806535,22872069,23003138,23068682,23199749,23265284,23330817,23396358,23461893,23527426,23592962,23658497,23789586,23855108,23920647,23986177,24051715,24117250,24182786,24248325,24379393,24444930,24510471,24576001,24641544,24707073,24772610,24903682,24969223,25034756,25100293,25296898,25362441,25427969,25493508,25559043,25755649,25821189,25886724,25952260,26017795,26083332,26279938,26411014,26476551,26542085,26607623,26673154,26804232,26869761,26935301,27066375,27131908,27197443,27394050,27525122,27590658,27656200,27721730,27983880,28049416,28114946,28180484,28246021,28311556,28377094,28442628,28573702,28704772,28770306,28835842,28901384,28966917,29032451,29097986,29294599,29360130,29491206,29556738,29622280,29753346,29818882,29884418,29949958,30015490,30081025,30146565,30277633,30343177,30408706,30474242,30539781,30736388,30867459,30998533,31064072,31129602,31195137,31260674,31391749,31588355,31784963,31850498,31916033,31981574,32047112,32112643,32178182,32309249,32374789,32440322,32505862,32571393,32636930,32768003,32833537,32899074,32964611,33030146,33095682,33226754,33292296,33423369,33488901,33619970,33685505,33882114,33947650,34013191,34078724,34209801,34275329,34471939,34603011,34668545,34734081,34799617,34930692,35061764,35127297,35192844,35258377,35454977,35520514,35586049,35651593,35717123,35848197,35913730,35979267,36044803,36110338,36241410,36372484,36438019,36503553,36569092,36700162,36831233,36896771,36962306,37027845,37224449,37289987,37355525,37552130,37617670,37748741,37814277,37879816,38010907,38207489,38273025,38338572,38404098,38469633,38535170,38600706,38666252,38797317,38862861,38928386,39059478,39190529,39321605,39452680,39518214,39649282,39714820,39780353,39845889,39976966,40042498,40239109,40370183,40435714,40566788,40632342,40763394,40828929,40960001,41156613,41353221,41418754,41549825,41680897,41746435,42008578,42074133,42205207,42401793,42467329,42598402,42729474,42795010,42991617,43122690,43450370,43515905,43581441,43646978,43712514,43778055,43909141,43974658,44105730,44171267,44236801,44367875,44433412,44630018,44695554,44892162,44957717,45023234,45088789,45154308,45219846,45481985,45547525,45613059,45678597,45744133,45875201,45940737,46006275,46202885,46268439,46333954,46399489,46465025,46530562,46596097,46727171,46923780,47054853,47120390,47185922,47251457,47316994,47513602,47579139,47644678,47710211,47775763,47841281,47906817,47972354,48103425,48168964,48234500,48365572,48496641,48627714,48758789,48824325,48889857,48955393,49020929,49283074,49348612,49414145,49545219,49610756,49676299,49741826,49938440,50069506,50135043,50200577,50397185,50462722,50528259,50593796,50659333,50724865,50790405,51052545,51183626,51314693,51511298,51642372,51838980,51904518,52035587,52297739,52494340,52559874,52822017,52953091,53280769,53411843,53477380,53608449,53739521,53805058,53936129,54001666,54067201,54132737,54329346,54460417,54525953,54591491,54722564,54788098,54919169,55050242,55115782,55377923,55312385,55508993,55771138,55902210,55967746,56033281,56098819,56229890,56295426,56360962,56492034,56623106,56819717,56885250,56950790,57016325,57081857,57212930,57344002,57409538,57540612,57606146,57671681,57737218,57802754,57868290,57933825,58064899,58196037,58261528,58327103,58392644,58458117,58654727,58720261,58785798,58916879,58982406,59047946,59113476,59179010,59375630,59441155,59506701,59637762,59703300,59768840,59834382,59899905,59965445,60096580,60162062,60227600,60293135,60358660,60424206,60555265,60620803,60686340,60751886,60817510,60883016,60948482,61014032,61079567,61145099,61210625,61341697,61407304,61472769,61538376,61603915,61669383],"scriptobject":[4521986,13631489,21626881,22282241,23003137,23527425,23592961,23789569,24117249,24182785,24707073,24903681,25296897,35979265,36438017,36896769,37289985,38010881,47644674,48168967,48758791,49348616,55050241,55771137,56360961,56819720,56885249,57409537,60227590],"sole":[393217,655361,786433,851969,1114113,1376257,1441793,1507329,56492033,58720257,60555265,61472769],"scriptfunc":[6750213,7012357,8388614,9306117,9568261,9830405],"strongly":[3407885,5046285,8388609,9306113,9568257,9699330,10289154,10420226,10485762,10616835,10682370,11075586,11206658,11337730,11665410,12058626,12189698,12255233,12582914,58785805,59768845],"setelement":[3407873,5046273,10747908,58785793,59768833],"safety":[46333953,51052545],"specific":[2752514,8126465,8454145,9437186,12713985,13041665,13500417,13697025,13631490,14286849,14483457,15007745,15138817,15269889,19136513,19922945,20709377,21037057,21430273,21889025,23199745,23789570,24248321,25100289,38535169,42795009,45744129,46333953,48889857,51052545,55377921,57540610,58654721,60751873,61669377],"safely":[17956865,20971521,26279937,26869761,28770305,44367873],"sync":[851969,1507329,6881281,30474241,31260673,31916033,35520513,39649281,50069505,58720257],"setting":[3014657,4521985,5570562,21561346,22347778,23855106,24510466,25886722,35651588,37552129,38928385,39059457,40042497,40632321,41418753,42008577,42074113,42205185,42598401,42795009,43909121,43974657,44171265,44433409,44957697,45088769,46268417,46923777,47316993,47775745,47972353,48889857,50659329,52035585,52822017,53280769,53411841,53477377,54722561,55705601,56098817,56950788,57606145,58195969,58327041,58392577,59113474,59506693,60096513,60227585,60358658,60817409,60882945,61407233,61538305,61603841],"selecting":[11272193,11468801,12451841,12779521],"selects":[11927553,13107201,13303809,13500417,13828097,14090241,14155777,14286849,14876673,14942209,15007745,15269889,15597569,15925249,17235969,17760257,18087937,18743297,19070977,19398657,19660801,19988481,20643841,21037057,22609921,23199745,24248321,25100289,25165825,25231361,25690113,26214401,26673153,26804225,27590657,27656193,28114945,28508161,28639233,28835841,28901377,29097985,29163521,29360129,29425665,29622273,29687809,29884417,30015489,32309249,32833537,33685505,34275329,34734081,35127297,35454977,36044801,36503553,37224449,38207489,38469633,38731777,39190529,45613057,60620802],"start":[37617666,50855937,54919169,55115778,57081857],"sub":[4915201,5308417,5373953,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6160385,6619137,6684673,6815745,7340033,7405569,7667713,7733249,7864321,8192001,8781825,8847361,10813441,11010049,11272193,11403265,11468801,11796481,11862017,11927553,11993089,12124161,12320769,12386305,12451841,12517377,12648449,12713985,12779521,12845057,12976129,13041665,13107201,13238273,13303809,13369345,13434881,13500417,13697025,13762561,13828097,13959169,14024705,14090241,14155777,14286849,14352385,14417921,14483457,14680065,14876673,14942209,15007745,15138817,15204353,15269889,15466497,15597569,15728641,15925249,16121857,16187393,16318465,16384001,16515073,16777217,16842753,16908289,16973825,17170433,17235969,17563649,17629185,17760257,17891329,17956865,18087937,18350081,18415617,18612225,18743297,18808833,18874369,18939905,19070977,19136513,19202049,19267585,19398657,19660801,19791873,19857409,19922945,19988481,20119553,20185089,20250625,20381697,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21364737,21430273,21495809,21561345,21692417,21823489,21889025,21954561,22020097,22151169,22216705,22347777,22413313,22478849,22609921,22675457,22740993,22872065,22937601,23068673,23199745,23265281,23330817,23396353,23658497,23724033,23855105,23920641,23986177,24182785,24248321,24313857,24510465,24576001,24707073,24903681,25034753,25100289,25231361,25427969,25690113,25886721,26148865,26214401,26279937,26476545,26673153,26738689,26869761,27000833,27262977,27328513,27459585,27590657,27852801,27918337,28114945,28508161,28639233,28770305,28835841,29097985,29163521,29229057,29360129,29425665,29687809,29818881,29884417,30015489,30212097,30277633,30408705,30474241,30539777,30605313,31129601,31522817,31850497,31916033,32243713,32309249,32702465,32833537,33161217,33226753,33554433,33685505,34144257,34275329,34734081,35127297,35454977,36044801,36306945,36503553,37224449,37486593,38207489,38273025,38469633,39190529,42467329,43122689,44367873,44695553,45613057,52166657],"sum":[9830403],"second":[9306113,9568257],"stripped":[11730945],"stripping":[47710209,48234497,52559873],"scripts":[39780353,45547521,46333953,50200577,50724865,51052545,51511297,53936129,54460417,59899905,61145089],"scriptid":[37617665,55115777,57737220],"sampl":[38141954,49807361,50266113,56754178],"sealedattribute":[51576833,52428801,53477377,54722561,55115777,55246849,55312385,55902209,56754177,57212929,57933825,58261505,58589185,58851329,59047937,59506689,60030977,60817409,61079553,61276161],"special":[50528257,51838977,60555265,61472769],"send":[65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6029313,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,8060929,7995393,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13631489,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19726337,19660801,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20381697,20316161,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26148865,26083329,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35520513,35454977,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36372481,36306945,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38469633,38404097,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40697857,40632321,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909121,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775745,47841281,47906817,47972353,48037889,48103425,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55377921,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"suppressextensionmethodenumeration":[42074113,52822020,60817409],"schema":[23134209,23724033],"semicolon":[22740993,34734081,35127297,36044801,38207489,39190529,41222146,42270721,43843585,45416449,45613057,46071809,53870594,60030977],"sensitive":[31588353,32964609,61145089],"store":[6094849,6225921,16056321,16711681,17301505,17432577,17498113,18219009],"sourcemapuri":[40304641,51576833,52232196],"space":[51511297,53149697,53542913,54263809],"sort":[1310721],"stringify":[61145089],"soft":[38404097,42074113,50200577,53936129,58261505,60817409],"selectively":[41549825,47251457],"suppressinstancemethodenumeration":[42074113,52822017,53280772,60817409],"scripting":[8323074,8650754,38010881,43057153,46465025,55377921,55705601],"scriptmemberattribute":[3538946,20905990,21561350,22347782,22872070,23330822,23855110,24510470,25034758,35651601,38010881,46923778,50462721,53477377,54591489,59113473,59506710,60358657],"structures":[38010881,39321601,61145089],"serialization":[18415617,19857409,21692417,23658497],"snapshot":[4980737,7208961,27000836,29229060,58261505,60817409],"short":[60751873],"stores":[1835009,1966081,6094849,6225921,53084161,58523649],"streaming":[19857409,21692417],"serialized":[327682,19857410,21692418,32571393,34799617,58654723,58982401],"stack":[1179649,3735553,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,17367044,20316164,28246020,38404097,42074113,43778052,45744129,50724869,54460421,56033281,58195969,58261505,58327041,58392577,58654721,60096513,60817410,60882945,61407233,61538305,61603841],"suppresses":[59965441,61145089],"structs":[13631489,23789569,53477377,55312385,59113473],"suppressfinalize":[19791873],"stringcontents":[36634625,52363268,60489729],"starting":[2752513,37093377,50855937,53673985,57540609],"sorry":[983041,41943041],"stacktrace":[45744129,58654721],"sets":[1769473,2621442,2686978,2818050,3145730,3211266,3276801,3407875,3670018,4128770,4259841,4521986,5046275,5177346,9633793,10747905,11534337,17170433,17891329,18808833,24182785,24903681,34537473,35389441,35782658,36700162,36896770,36962306,37027842,37289986,37814274,38404102,38797314,38993926,39059464,39518210,39583745,39780353,40108033,40239106,40304644,40632328,40697857,40828929,41156610,41222149,41549825,41680897,42074124,42205192,42270721,42401793,42532865,43188225,43319297,43384833,43843585,43909128,44630017,44957704,45023233,45088775,45416450,45678593,45744131,45809665,46071809,46268424,46530561,46661633,46792705,46858241,46923778,47054849,47120386,47251457,47316993,47644674,47775751,48824322,49152001,49610753,50200577,50462721,50528257,50724865,50790401,50987009,51118081,51249153,51380225,51511297,51576836,51642369,51773441,51838977,51904513,52101121,52232193,52690945,52887553,52953089,53084161,53149697,53346305,53411841,53542913,53870597,53936129,54067202,54263809,54460417,54591489,55443457,55574529,55771137,56360961,56426498,57344001,57540609,57999362,58195975,58261510,58327047,58392584,58523649,58589190,58654723,58785795,58916868,59375620,59441154,59506690,59768835,59834372,59899905,60030978,60096520,60162052,60227588,60293124,60424196,60751876,60817420,60882952,61014020,61276161,61407240,61538312,61603848],"single":[3407873,5046273,11075591,13828097,15859713,19398657,19529729,27197441,30867457,31588353,32112641,32964609,58785793,59768833],"specify":[3014665,4521993,52690945,53149697,53542913,54263809,55705609,60227593],"subclasses":[47316993,53411841],"stringdocument":[3473410,21954565,36634626,38010881,50921474,51445762,51970049,52363265,59310081,60489736],"servername":[8323079,8650759,11927557,12320773,12845061,13369349,14090245,14876677,15925253,16842758,17563653,18087942,18612230,18743302,19988486,20643846,21495814,22413318],"sealed":[16121857,16842753,17039361,17235969,17694721,17760257,18087937,18612225,18743297,18939905,19070977,19136513,19398657,19464193,19595265,19660801,19922945,19988481,20119553,20250625,20447233,20643841,20709377,20774913,21037057,21102593,21233665,21364737,21430273,21495809,21757953,21823489,21889025,22085633,22216705,22413313,22478849,22609921,22806529,23003137,23068673,23199745,23265281,23396353,23789569,23920641,24248321,24576001,24641537,25100289,30212097,30474241,31260673,31916033,35520513,42663937,42795010,43253761,43450370,43712513,44171266,44236801,44630018,44892161,45219842,45481985,45875202,46006273,46333954,46465026,46727169,47054850,47185922,47513601,48103425,48234498,48627713,49020929,49152002,49283074,49545217,49741825,50135041,50659330,50790402,51314690,51838978,51904514,52428801,52953090,53411842,53477378,54001666,54525954,54722562,55115778,55246849,55312386,56754178,57212930,57933826,58261506,58589186,58851330,59047937,59506690,60030977,60817410,61079553,61276161],"selected":[4259842,9764865,10092545,10223617,10878977,11141121,11272193,11468801,12451841,12779521,13565953,13828097,15466497,15532033,19398657,22216705,22806529,36765698,37683202,54067204,54198273,57147393,59179009,59572225,59637761,59965441,61145089,61669377],"serializableattribute":[58654724,58982404],"select":[8126465,9306113],"significant":[13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16187393,16908289,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537,61145089],"settings":[2031617,6029319,6488071,6815745,7274502,7405569,7864321,8192001,8847361,30670849,38010881,38404097,39059457,40108033,40632321,40828930,40894465,41222145,41549825,42074113,42205185,42270721,42926081,43319297,43843585,43909121,44630018,44957697,45088769,45416449,46071809,46268417,46792705,47382529,47775745,51380226,53870593,56950785,58195969,58261505,58327041,58392577,60030977,60096513,60817409,60882945,61407233,61538305,61603841],"searches":[1835009,1966081,5505025,6422529,53084161,58523649],"step":[12910593],"signature":[9830401],"sample":[4325379,4980737,7208961,10616833,26148866,27262978,37093377,38141955,39321602,49217543,49807362,50266114,50987009,51249153,52887553,53673985,54198273,55574529,56754184,58261505,60817409],"sourceindex":[17301509,17498117,18219013],"slower":[50200577,53936129],"systemexception":[58654721],"serves":[1572865,1638401,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2162689,2228225,3014657,3276801,3407873,3473409,3604481,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,53084161,53673985,53870593,54067201,55115777,55705601,55836673,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59244545,59310081,59703297,59768833,59899905,60096513,60227585,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"scriptusageattribute":[4849666,25427974,25886726,37552133,38010881,42598401,46923777,47316993,47972354,53411841,53477377,54722566,57606145,59113473,59506694,60358666],"syntactic":[13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16187393,16908289,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537],"streamingcontext":[5111809,18415624,19857413,21692421,23658503,32571393,34799617,58654722,58982401],"site":[983041],"size":[6029313,6488065,7274497,35389441,37027842,37814274,38404099,38797314,38993924,39583746,39780353,39911431,40239106,40697857,41156610,42074115,43384834,44826630,45023234,45350918,49086466,49479682,49872898,50200582,50331650,51249155,51511298,51773442,52690946,52887555,53084161,53149698,53346306,53542914,53936134,54263810,55640066,56164354,56557570,58261507,58523649,58589188,59244551,59375618,59834370,59899905,60162050,60424194,60751874,60817411],"scriptable":[7143425,8060929,38010882,54067202,57540609],"struct":[7077889,8257537,31326210,38010881,51576834,53477380,54722564,55312391,55836674,55902210,59113476,60358660],"separate":[26673153,27590657,28114945,28835841,29097985,29360129,29818881,29884417,30015489,30408705,31129601,31850497],"strings":[8126465,9306114,9568257,10354689],"searchpath":[41222145,43843588,53870593],"scope":[54853633],"stringt":[8126467,9306115,9437190,9568258,10354690,10878978,12255236],"syntax":[589825,720897,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,4915201,5242881,5308417,5373953,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6422529,6488065,6619137,6684673,6750209,6815745,6946817,7012353,7077889,7143425,7274497,7340033,7405569,7471106,7602177,7667713,7733249,7864321,7929858,7995394,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585218,8650753,8781825,8847361,8912897,9043969,9109505,9175041,9240578,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895938,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828098,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252930,16318465,16384001,16515073,16449537,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104898,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825794,17891329,17956865,18022401,18087937,18153474,18219009,18284545,18350081,18415617,18481153,18546690,18612225,18677761,18743297,18808833,18874369,18939905,19005442,19070977,19136513,19202049,19267585,19333122,19398658,19464193,19529729,19595265,19660801,19726338,19791873,19857409,19922945,19988481,20054018,20119553,20185089,20250625,20316161,20381697,20447233,20512770,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299202,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30736385,30801921,30867457,30998529,31129601,31195137,31260673,31326209,31391745,31522817,31588353,31653889,31850497,31916033,31981569,32112641,32178177,32243713,32309249,32636929,32702465,32768001,32833537,32964609,33095681,33161217,33226753,33554433,33685505,33947649,34013185,34144257,34275329,34734081,34930689,35127297,35520513,35454977,35848193,36044801,36306945,36503553,36569089,37224449,37486593,37879809,38207489,38273025,38469633,38731777,39190529,39452673,39583745,39845889,40042497,40108033,40501249,40828929,40894465,40960001,41025537,41353217,41549825,41615361,41680897,41746433,42139649,42270721,42336257,42401793,42467329,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,45023233,45154305,45219841,45285377,45350913,45481985,45547521,45613057,45678593,45875201,45940737,46006273,46071809,46333953,46399489,46465025,46530561,46661633,46727169,46792705,46989313,47054849,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47710209,47841281,47906817,48037889,48103425,48168961,48234497,48300033,48431105,48496641,48562177,48627713,48693249,48758785,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540610,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"set":[3014658,3407873,4521986,5046273,9633795,9830401,10616838,10747907,10878977,11534339,13565953,17170434,17891330,18808834,18874370,24182786,24903682,25362433,26411009,27066369,27983873,28049409,28377089,28573697,29294593,30343169,31981569,34013185,35782657,36962305,37289985,37879809,38273026,39583749,40042501,40108036,40828932,40894469,41222146,41353221,41549828,41680901,42270724,42336261,42401797,42795014,42926085,43057157,43122690,43319300,43384837,43450374,43581444,43843588,44171270,44433412,44630021,45023236,45154309,45219846,45678596,45875206,46071812,46333959,46465030,46530564,46661636,46792708,47054853,47185925,47251460,47316996,47382532,47710213,47906821,48234502,48300036,48496644,48889861,49152006,49283077,49414149,49610756,50200582,50462724,50528260,50659333,50724869,50790405,50987012,51052550,51118084,51249156,51314694,51380228,51511301,51642372,51773444,51838981,51904517,52035588,52101124,52232196,52559877,52690948,52822021,52887556,52953093,53149700,53280772,53346308,53411845,53542916,53870594,53936134,54001670,54263812,54460421,54525957,54591492,54853637,55443461,55574532,55705602,55771141,56098820,56360965,57344004,57475076,57737220,58785793,59768833,60227586,61145091],"stored":[12255233,24444929,24969217,25493505,25559041,25821185,26017793,26083329,26542081,26607617,26935297,27525121,28311553,28704769,28966913,29491201,29556737,29949953,30736385,30998529,31391745,32178177,33095681,34930689,35848193,57540609],"scriptaccess":[5570565,21561349,22347781,23855109,24510469,25886725,35651588,37552129,38010881,41418753,43974662,47316999,53411848,56950788,57606150,59113473,59506692,60358657],"smaller":[60620801],"specifying":[6029313,6488065,7274497,13172737,13238273,13762561,13893633,14680065,14745601,20250625,20447233,21102593,21233665,21823489,22085633,24051713,24444929,24772609,25493505,25559041,26017793,26083329,26411009,26542081,26935297,27066369,27394049,27525121,27721729,28311553,28377089,28573697,29032449,29294593,29556737,29753345,30736385,31981569,33095681,52166657,57278465],"subsequent":[5111809,6029313,6488065,7274497,13434881,54853633,55443457,58654721],"satisfy":[55312385],"structure":[524289,1048577,1179649,1703937,3801089,5767170,5832706,6029313,6488065,7274497,15073281,15204353,18939905,19464193,21954561,23461889,25821185,26607617,28049409,28442625,30343169,30998529,31326209,32178177,36634625,38010881,39256065,39321601,40304641,41877507,45285377,46661633,47251457,50003969,51118081,51576836,51707905,51970049,52166657,52232193,52625409,55836673,55902210,57278465,59310081,60489729],"serializationinfo":[3080193,5111810,18415625,19857413,21692421,23658504,32571393,34799617,58654723,58982402],"selectort":[8126466],"significantly":[50200577,53936129],"scriptexceptionasobject":[43646980,45744129,46202881,46727174,48365569,50135046,58458113,58654721,58982401],"setvalue":[9306115,9568259,13828097,19398657],"suppress":[52822017,53280769],"safe":[38010881,57999361,60817409],"simulate":[41353217,45219841],"supports":[2949122,3014657,4521985,10944513,13828097,18153474,19005442,19398657,26804225,27656193,28901377,29622273,31588353,32964609,38010881,39059457,40632321,42205185,43909121,44957697,46268417,49676289,49938433,51183617,52297729,54853636,55705601,57344001,58392577,59506689,60096513,60227585,60882945,61079554,61407233,61538305,61603841],"settimerresolution":[61145089],"subroutine":[47054849,51642369,56492033],"string":[1572865,1638401,1769473,1835010,1900545,1966081,2031624,2097153,2359297,2490369,2555905,2621443,2686979,2752522,2818051,2162689,2228225,2883585,3014657,3080193,3145731,3211267,3276801,3342337,3407879,3473410,3538945,3604481,3670019,3735619,3866625,3932161,3997697,4063233,4128771,4259846,4325377,4390913,4456449,4521988,4587588,4653057,4849665,4980770,5046284,5111809,5177347,5439489,5832710,5898247,6029319,6160391,6291525,6357061,6488071,6553669,6815757,6881281,6946822,7143430,7209059,7274502,7405581,7536709,7798785,7864333,8060934,8126478,8257537,8323082,8388610,8519686,8650762,8716356,8847366,8912897,8978500,9043969,9306116,9371654,9437194,9568258,9633798,9699329,9830403,10027014,10289153,10354690,10420225,10485761,10551302,10616834,10682369,10813446,10878978,11075585,11141121,11206657,11272198,11337729,11468806,11534342,11599877,11665409,11927571,12058625,12124172,12189697,12255234,12320787,12386310,12517382,12582913,12648455,12713985,12845075,12910595,13041683,13107207,13172745,13238279,13303815,13369357,13500435,13565953,13631502,13697037,13762567,13828102,13893641,13959175,14024717,14090253,14155783,14221317,14286861,14417927,14483463,14549006,14614534,14680071,14745609,14876685,14942221,15007751,15073288,15138817,15204358,15269889,15335430,15466502,15532040,15597581,15859724,15925267,16121862,16187404,16384006,16646149,16777223,16842777,16908300,16973831,17039366,17235977,17367048,17563661,17629191,17694726,17760265,17891334,18087953,18284549,18350093,18612249,18677769,18743313,18808837,18939912,19070993,19136537,19398664,19464202,19529743,19595270,19660817,19922961,19988505,20119561,20250633,20316168,20381702,20447243,20643865,20709385,20774921,20905990,21037057,21102601,21233675,21364745,21495825,21430273,21561350,21626887,21757959,21823497,21954567,21889025,22020102,22085643,22151182,22216712,22347782,22413329,22478865,22544393,22609929,22675462,22741004,22806538,22872070,23068688,23134213,23199769,23265297,23396361,23461894,23592966,23789586,23920656,24051719,24117255,24248337,24379401,24444935,24641554,24772615,24838150,24903687,24969228,25100297,25165829,25362446,25493511,25559047,25624582,25755654,25821191,26017799,26083335,26411015,26542087,26607622,26673158,26738694,26935303,27066375,27131910,27197456,27394055,27459590,27525127,27590662,27721735,27983879,28049415,28180486,28246025,28311559,28377095,28442630,28508166,28573703,28639238,28704775,28901382,28966926,29032455,29097990,29163526,29294599,29425670,29491206,29556743,29622278,29753351,29884422,29949964,30081030,30146572,30343175,30670855,30736391,30801929,30867472,30932994,30998535,31064080,31129606,31391758,31457283,31588367,31653897,31719426,31850502,31981575,32047120,32112656,32178182,32374790,32440322,32571394,32768006,32964623,33030147,33095687,33161222,33292300,33357826,33423376,33488902,33554438,33619970,33685510,33816582,33882115,34013191,34078726,34209808,34275334,34340866,34471939,34603010,34668547,34734098,34799618,34930695,35061766,35127314,35192848,35258380,35323906,35586051,35651588,35717122,35782658,35848198,35913729,35979265,36044815,36241409,36306950,36372492,36438017,36569100,36634626,36700161,36765698,36896769,36962305,37027841,37158915,37224454,37289985,37355526,37486598,37617665,37683202,37748742,37814273,37879822,38076418,38207506,38338566,38469638,38666256,38731781,38797313,39124997,39190546,39452674,39518209,39714828,40173573,40239105,40370179,41091074,41156609,41287685,41811973,41877505,42139654,42270727,42401799,42663943,43515910,43712519,43778058,43843591,44105734,44236807,45613071,45744129,46071815,46858245,47120385,47513607,47579142,47644673,47841286,48103431,48431110,48693254,48824321,48955398,49152006,49741831,50003973,50921473,51445761,51576833,51707911,51970049,52363273,53084161,53215238,53477377,53608455,53673985,53805063,53870600,54067208,54132742,54329351,54591495,54657030,54722561,54984710,55115778,55312385,55508998,55705601,55836673,55967751,56229889,56295431,56360968,56426511,56492033,56623111,56754177,57212929,57409542,57540635,57671681,57868294,57933825,57999363,58130433,58196039,58261544,58327107,58392650,58523650,58589185,58654724,58720257,58785804,58851329,58916868,58982403,59113473,59244545,59310081,59375620,59506693,59703297,59768839,59834372,59899905,60096586,60162052,60227589,60293124,60358657,60424196,60489731,60555265,60751876,60817513,60883012,61014020,61407306,61472769,61538378,61603908,61669377],"successful":[8257537,42795009,48889857],"started":[39845890,44892162,45744129,46202881,48365569,48627714,58458113,58654721,58982401],"support":[8519681,9109505,9371649,9633793,9699329,9961473,10027009,10092546,10158081,10289153,10420225,10485761,10551297,10682369,10747905,10944513,11075585,11141121,11206657,11337729,11534337,11665409,12058625,12189697,12255233,12582913,13631489,23789569,38010881,39059457,40632321,41353217,42074113,42205185,43909121,44957697,45088769,45219841,46268417,47775745,47906817,48300033,50528257,51838977,54001665,54525953,55377921,57540609,58195969,58327041,58392577,60096513,60555265,60817409,60882945,61145092,61407233,61538305,61603841,61669377],"serialize":[3080193,5111809,18415617,23658497,58654721,58982401,60817409],"scriptname":[37617665,55115777,57868292],"stream":[4980737,7208961,27000844,29229068,36634625,39256065,44302343,50921480,57278470,58261505,59310081,60489729,60817409],"shares":[25952257,26804225,27656193,28180481,28901377,29622273],"synchronization":[30474241,31260673,61145089],"systems":[61145089],"supported":[22740994,34471937,34734082,35127298,36044802,38207490,39124993,39190530,40173569,41222145,41287681,41811969,42270721,45023233,45613058,53870593,58195969,58392577,59965442,60096513,60882945,61407233,61538305,61603841],"static":[720898,917506,1114115,1376259,1441795,1507331,3407873,5046273,7471107,7929859,7995395,8126465,8454145,8585219,9240579,9437185,9764865,9895939,11730949,12713985,13041665,13500417,13565953,13697025,14286849,14483457,15007745,15138817,15269889,16252931,17104899,17825795,18153475,18546691,19005443,19136513,19333123,19726339,19922945,20054019,20512771,20709377,21037057,21299203,21430273,21889025,23199745,24248321,25100289,31326211,39059457,40632321,42074113,42205185,42860547,43581442,43909121,44498947,44957697,45088769,45547523,46071811,46268417,46792707,47185922,47382531,47448067,47775745,48037891,52428801,52494339,53018627,54853635,55246849,55443459,58195969,58327041,58392577,58785793,59047937,59768833,60030977,60096513,60817409,60882945,61079553,61276161,61407233,61538305,61603841]} \ No newline at end of file +{"span":[2818051,3276803,3473411,3997699,4390918,16777224,16842755,18153480,18677768,22282243,23986179,26869761,28704769,30081025,35651585,41222145,44826625,47906818,49020929,50266114,51249153,53215234,73138179,74645507,75497475,77135875,78184454],"supports":[3342337,3670018,5963777,12582913,16711681,18808834,19922946,23199745,34471937,39256065,39845889,40828929,43450369,43778049,43843585,44564481,44957697,45481985,45547521,57737217,62193665,62390273,63045633,64684033,65273857,66519041,69009409,69533697,70713345,72417281,74514433,74907649,75104257,76611588,78774274,79167489,79953921,80084993,80281601,80543745,81002497,81068033,81264641],"stringcontents":[54001665,73072644,80674817],"server":[3735560,5373960,8716296,8847361,9175041,9306120,9502728,9830408,11010056,11206664,11403272,13172738,13238274,13434882,13500418,13697026,13828098,17235970,17301506,18087938,18284546,18546690,20316162,20578306,21495810,22478850,23592962,45350916,47710212,48168964,51183620,75104264,76087304,77856776,78512136,79953928,80281609,81002505,81068041,81264648],"setdynamicproperty":[3801090,5242882,23461893,25034757,31522821,33685509,46727170,55050242,71303170,78577666],"speed":[15532033,24444929,39190529,40501249,44171265],"step":[15990785],"scriptfunc":[7798789,8388614,8585221,9764869,10944517,11075589],"scriptinterruptedexception":[1245186,3407874,21823494,23724038,24707073,25755654,26083329,27262982,45547521,54788105,59179009,59965441,60948481,62980098,72351745,72548366,73334785,73793537,73924609,74448897],"space":[66584577,67829761,69402625,70975489],"setter":[38666246,39911430,78643201],"sync":[262145,786433,6553601,40632321,42139649,43319297,46333953,53477377,71630849,80805889],"selectively":[61734913,61931521],"stringdocument":[3604482,23330821,45547521,54001666,65798146,70057986,72482817,73072641,76480513,80674824],"setasyncenumeratorfactory":[5767170,36503557,37814277,47775746,75431938],"snapshot":[7077889,11010049,39059460,39452676,75366401,76087297],"serialize":[3014657,3407873,19726337,24707073,72548353,76087297,78970881],"selecting":[12451841,13369345,13565953,13762561],"scriptaccess":[6488069,23396357,24051717,25165829,25952261,28966917,45547521,47448065,55312388,57933825,62259207,63373318,71499782,72286216,75759617,76021764,79167492,80216065],"search":[65537,7536641,7602177,8519682,25559041,26345473,26411009,27459585,27721729,28180481,29753345,32243713,33226753,36634625,52756481,54657025,55508994,61603841,63635458,69992449,78053377,79888385],"syntactic":[14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,18022401,18219009,19464193,19857409,21037057,21364737,21561345,21626881,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129],"sensitive":[43843585,44564481,76939265],"scriptable":[7995393,9109505,45547522,74121218,75431937,76414977],"servername":[8847367,9175047,13172741,13238277,13434885,13500421,13697029,13828101,17235973,17301509,18087942,18284550,18546694,20316166,20578310,21495814,22478854,23592966],"schedule":[76939265,78118913],"scripts":[56688641,57475073,59375617,66650113,70975489,71041025,71827457,72220673,73400321,76939265,77332481],"stripped":[11272193],"safe":[45547521,71368705,76087297],"separate":[38535169,40304641,40763393,41680897,41877505,42532865,42991617,44498945,44761089,47054849,49086465,50921473],"stores":[2162689,2228225,6291457,7208961,75169793,79691777],"scenarios":[61669377,67764225,71041025,72220673],"signed":[29229057,30212097,30867457,32374785,42795009],"sub":[5505025,5832705,6029313,6225921,6422529,6488065,6619137,6684673,6750209,6815745,6881281,7012353,7143425,7274497,7471105,7667713,8126465,8257537,8650753,9371649,9437185,11534337,11599873,11796481,12058625,12189697,12255233,12451841,12648449,12713985,12976129,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13762561,13828097,14024705,14286849,14352385,14417921,14483457,14548993,14614529,14745601,14811137,14942209,15073281,15138817,15269889,15335425,15400961,15466497,15532033,15597569,15794177,15859713,15925249,16187393,16318465,16384001,16515073,16711681,17104897,17235969,17301505,17367041,17563649,17694721,17760257,17825793,17891329,18087937,18284545,18350081,18481153,18546689,18612225,18874369,19070977,19202049,19267585,19529729,19660801,19726337,19988481,20119553,20250625,20316161,20381697,20447233,20512769,20578305,20709377,20774913,20905985,20971521,21102593,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,22085633,22151169,22216705,22347777,22478849,22544385,22609921,22740993,22806529,22937601,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23724033,23855105,23920641,24051713,24117249,24182785,24379393,24444929,24510465,24641537,24707073,24903681,24969217,25034753,25100289,25165825,25296897,25559041,25755649,25821185,25886721,25952257,26017793,26148865,26214401,26345473,26476545,26607617,26804225,27000833,27066369,27131905,27197441,27262977,27394049,27983873,28311553,28966913,29163521,29360129,29687809,30539777,31457281,31522817,31653889,31981569,32505857,32636929,32899073,33161217,33292289,33423361,33554433,33619969,33685505,33751041,33882113,34013185,34144257,34406401,34471937,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35454977,35717121,35782657,35913729,36110337,36306945,36438017,36503553,36569089,36700161,36765697,36831233,36896769,36962305,37027841,37158913,37224449,37355521,37421057,37617665,37683201,37814273,37879809,38010881,38141953,38338561,38404097,38469633,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39321601,39452673,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40304641,40370177,40501249,40566785,40632321,40763393,40960001,41091073,41222145,41353217,41615361,41680897,41746433,41811969,41877505,41943041,42008577,42270721,42336257,42532865,42795009,42860545,42991617,43188225,43253761,43319297,43384833,43450369,43712513,44171265,44236801,44367873,44498945,44761089,44892161,44957697,45219841,45285377,45416449,45809665,46137345,46465025,46530561,46792705,46989313,47054849,47120385,47185921,47251457,47316993,47644673,48234497,48889857,49086465,49414145,49872897,50135041,50331649,50528257,50593793,50790401,50921473,51118081,51511297,52101121,52297729,52559873,52953089,53149697,54132737,54919169,75890689,78053377,78643201,79298561,79822849,80609281],"sum":[8585219],"summarizes":[18219009,26542081],"scriptengineexception":[1507330,3014658,17563654,19267590,19726337,20709382,21299201,23134214,45547521,46006281,58458113,60358658,60555265,67239937,69664769,71106561,72089601,78970894],"scriptengine":[2490371,3670020,5373954,8716339,8781829,9306159,9502767,9830447,10092549,10420229,11010099,11206703,11403311,13303813,17039365,17170437,17956869,18087937,18284545,18546689,19988481,20119553,20316161,20381697,20578305,20774913,21037057,21102593,21430273,21495809,21561345,21626881,21692417,21757953,22085641,22216705,22478849,22544385,22609921,22740997,22872065,22937601,23003137,23199745,23527425,23592961,23658497,23855105,24117249,24182785,24313857,24379393,24444929,24641537,24903681,25100289,25231365,25427969,25296897,25886721,26017793,26476545,26542081,26607617,26738689,26804225,27066369,27983873,28049409,28639233,29360129,45547521,47841281,48168961,48496641,50397185,51183617,51314689,51773441,52166658,52363267,54263812,54722561,55377921,56164353,57409537,57737240,58130434,58785798,58916865,60162049,60293146,60620801,60817409,61669377,62193688,62324737,62390273,62717953,62849025,63045656,63569921,63963137,64159745,64684056,64815105,65273880,65601537,65994753,66125830,66453505,66650113,67502081,67567617,68288513,68419591,68878337,69140481,69533722,69795841,70254593,71237633,72286209,75104328,76087378,76677123,77856776,78774276,79953992,80281672,81002568,81068114,81264712],"subclasses":[62259201,72286209],"setundefined":[4915201,37683204,79364097],"selectort":[8978434],"searches":[2162689,2228225,7536641,7602177,75169793,79691777],"schema":[41549825,43188225],"start":[56819714,64487425,70189057,70451201,80347138],"settings":[1835009,6619137,6684673,6815745,7274497,7405575,8650753,9043974,10682375,45678593,45547521,52756481,54657025,55508993,57737217,58130433,59768833,59834369,59899906,60293121,61341697,61407233,61931521,62193665,63045633,63504385,63635457,64225281,64684033,64749569,65273857,65536001,65994754,67895297,69533697,69992449,72876034,75104257,75366401,76021761,76087297,77856769,78512129,79888385,79953921,80281601,81002497,81068033,81264641],"selected":[2883586,9568257,10878977,11468801,11665409,11862017,12451841,13369345,13565953,13762561,15728641,16187393,16711681,19005441,22872065,23199745,23855105,43974658,50462722,72744961,74121220,76873729,76939265,77004801,78446593,79429633,80150529,80412673],"suppressfinalize":[21757953],"synchronous":[41943041,42270721,45219841,51576834,52297729,53149697,55443458,80281602,81002498,81068033],"store":[6291457,7208961,16449537,16646145,16777217,16842753,16908289,18153473,18677761,18743297,20185089,21168129,22282241,23986177],"subroutine":[57868289,69140481,78708737],"structures":[45547521,49545217,51707905,76939265],"suppressextensionmethodenumeration":[60293121,75235332,76087297],"settled":[79233025],"standards":[80412673],"structure":[393217,327681,1572865,1638401,4718593,4915201,6225922,7340033,7405569,7667714,9043969,9895937,10682369,14942209,18022401,21561345,23330817,24313857,25624577,26279937,26869761,27328513,27525121,27656193,27787266,27852801,27918337,28246017,28377089,28442625,28508161,28573697,28704769,28770305,28835841,28901377,29032449,29097985,29229057,29294593,29425665,29491201,29556737,29622273,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474242,30605313,30670849,30736385,30801921,30867457,30932994,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31588353,31719425,31784961,31850497,31916033,32047105,32112641,32178177,32309249,32374785,32440321,32571393,32702465,32768001,32833537,32964609,33030145,33095681,33292289,33357825,33488897,33751041,33816577,33947649,34209793,34078721,34275329,34340865,34537473,34603010,34865153,34930689,35586049,35651585,35717121,35848193,36306945,36569089,36831233,37224449,37421057,37683201,38797313,38862850,39518209,39583745,40173569,40566785,41222145,41418753,42008577,42795009,43515905,44105731,44367873,45416449,45547521,46137345,46858241,48365569,49545217,50987009,51052545,51445761,51707905,53280769,54001665,54067201,54460417,54591489,58261505,59113473,59441153,60227585,61538305,61734913,62914561,63438849,63766529,64880641,65011713,66060289,67174401,68026369,68681729,69337089,69599233,70385665,72482817,76349442,76480513,77529090,77725697,78184449,78249985,78839812,79298561,79364098,80674817,80740354],"short":[27656195,27852801,28770305,30801921,31326211,33292291,33357827,34209795,34537473,34865153,78184449],"struct":[7929857,8912897,27787266,30474242,30932994,34603010,38862850,45547521,54591490,73990148,74842116,75038727,75759620,76349442,77529090,78184450,78249986,78839810,79364098,80216068,80740354],"shared":[1,655361,786433,917505,983041,2359297,5242881,5439489,8060929,8192001,8323073,8781825,10092545,10420225,17039361,17170433,17956865,18415617,18808833,19398657,19922945,20054017,21233665,25231361,26935297,31981569,34406402,39780353,45285378,51707906,54591489,55771137,57475073,63635457,65536001,67895297,67960833,68419585,68616193,70123521,76611585,77070337,77266947,78315521,78577667,79233026],"site":[458753],"size":[7405569,9043969,10682369,53608450,54198274,55246855,55640065,56885250,57344002,59244546,59375617,59506694,59834371,60293123,61014020,61145094,61997057,62783490,64094210,64356354,66191362,66584578,66977794,67829762,68354051,68747266,69402626,69468162,69730306,70778882,70844418,70975490,71041030,72220678,72810499,73138178,73203714,73859074,74383362,74645506,75169793,75366403,75497474,76087299,76152836,77135874,77332481,77398023,78184450,79691777],"stale":[79757314],"synchronization":[40632321,42139649,76939265],"suppressinstancemethodenumeration":[60293121,75235329,75563012,76087297],"support":[9633793,9699329,10027009,10289153,10485761,10813441,10551297,10878977,11141121,11468802,11730945,11927553,11993089,12124161,12386305,12517377,12582913,12779521,12845057,12910593,13041665,13631489,13893633,13959169,14221313,15204353,18219009,26542081,45547521,51707906,57737217,58130433,58916865,60162049,60293121,60620801,61407233,62062593,62193665,63045633,64290817,64552961,64684033,64815105,65273857,65667073,67305473,67567617,69533697,74776578,75104257,76087297,76414977,76939268,77856769,78512129,78577665,79953921,80281601,80412673,80871425,81002497,81068033,81264641],"serializeobjectstate":[1245185,1507329,72548353,78970881],"smart":[80412673],"scriptexception":[58458118,59965446,60358657,62455809,62980097,68812804,72548353,78905345,78970881],"scriptusageattribute":[5046274,27197446,28966918,45547521,47448069,53542913,62259201,63373313,65863681,68157442,72286209,73990145,74842118,75759617,79167494,80216074],"strings":[8978433,10158081,10944513,11075586],"stringt":[8978435,10158082,10354694,10944514,11075587,11862018,13959172],"stringify":[76939265],"simpler":[67895297],"slower":[71041025,72220673],"stacktrace":[60358657,62980097,72548353,78970881],"sealed":[17498113,18087937,18284545,18546689,18939905,19529729,19791873,19988481,20119553,20316161,20381697,20578305,20774913,21037057,21102593,21495809,21561345,21626881,21692417,22216705,22478849,22544385,22609921,22872065,22937601,23199745,23527425,23592961,23855105,24117249,24182785,24313857,24379393,24641537,24903681,25100289,25362433,25427969,25296897,26017793,26476545,26542081,26607617,26738689,26804225,27066369,27983873,28049409,28639233,29360129,33226753,35454977,36634625,38010881,40632321,42139649,43319297,46333953,46465025,58458113,58916866,59179009,59965441,60162050,60555265,60620802,60686338,60817410,60948481,61669378,62324738,62717954,62849026,63242241,63963138,64159746,64815106,65601538,65732609,65994754,66322433,66453506,66650114,67239937,67371009,67567618,68288514,68878338,69140482,69664769,69795841,69992449,70254594,70909954,71106561,71237634,71761922,71958529,72089601,72286210,72351745,73334785,73531394,73793537,73990146,74514434,74842114,75038722,75366402,76087298,76152834,76546050,76677121,77201409,77594625,78774273,79167490,79626242,80347138],"suppress":[75235329,75563009],"securely":[61734913,61931521],"successful":[8912897,61669377,67764225],"scope":[76611585],"stripping":[56229889,66453505,67698689],"scriptexceptionasobject":[60358657,60555270,60948486,62455809,62980097,70647812,72548353,78905345,78970881],"stored":[13959169,36044801,36175873,37552129,37748737,38076417,38207489,40042497,40108033,40435713,42401793,43122689,44040193,45744129,45875201,46858241,47513601,48037889,48365569,49217537,49807361,50987009,51970049,54460417,54984705,76414977],"setproperty":[2097154,2752514,2818050,3276802,3473410,3538946,3997698,4390914,4456450,4521986,4784130,4980738,5570562,5963778,10813445,12779525,18350085,20447237,23920646,25821190,26214405,31653893,46399490,48300034,48627714,49348610,73138178,73269250,74645506,74973186,75497474,75694082,75956226,76283906,77135874,77987842,78184450,79495170,80084994,81199106],"samples":[53805057,59834370,60293122,66256902,68354049,71565313,72810497,74055681,75366402,76087298,80019457],"strictly":[60817409,66387969,81330177],"scriptmemberflags":[25165829,25952261,27394053,28311557,45547521,55312388,63700999,79167492,79429636],"succeeded":[27525122,27918338,28246018,28508162,28704770,28770306,28835842,29491202,29556738,29949954,30081026,30212098,30343170,30408706,30474242,30605314,30867458,31129602,31195138,31260674,31326210,31588354,31784962,31850498,31916034,32571394,32702466,32964610,33030146,33095682,33357826,33816578,33947650,34340866,34537474,34603010,35586050,35848194],"serializationinfo":[3014658,3407874,17563653,19726345,23724037,24707081,46006273,54788097,72548355,78970883],"sealedattribute":[69992449,70909953,71761921,71958529,73531393,73990145,74514433,74842113,75038721,75366401,76087297,76152833,76349441,76546049,76677121,77201409,77529089,77594625,78774273,78839809,79167489,79364097,79626241,80347137,80740353],"system":[1835012,6619139,6684675,6815748,7995395,8585221,8650755,8912897,8978437,9109507,9175041,9961473,10158081,10223617,10354692,10747910,10551298,10878977,10944515,11075587,11730946,11862017,11927554,12124162,12386306,12517378,12845058,12910594,13631490,13893634,13959170,14221314,15204354,15990787,18219012,19005441,26542084,45678597,68943873,69992449,70909953,71172097,71368705,71761921,71958529,72417281,72548356,72613889,73531393,73990146,74121217,74514433,74711041,74842114,75038722,75104257,75169793,75366401,75431937,75628545,75759618,75956225,76087297,76152833,76349442,76480513,76546050,76677121,76742657,76873729,76939265,77201409,77266945,77332481,77398017,77529090,77594625,77856769,77987841,78249985,78577665,78708737,78774273,78839810,78970884,79167490,79364098,79626241,79691777,79888389,79953921,80019457,80084994,80216066,80281601,80347137,80478209,80543746,80674817,80740354,80805889,80871425,81002497,81068033,81264641,81330177],"script":[393218,1245185,1507329,1572865,1703937,1769473,2097161,2293761,2424833,2490377,2555905,2686977,2752522,2818057,2949121,3014657,3145729,3276809,3407873,3473417,3538949,3670031,3735595,3997705,4390921,4521988,4587521,4653057,5046273,5373998,5570570,5963786,5898244,6356993,6488068,6553604,6619137,6881281,7077910,7471105,7798786,8060930,8192003,8323075,8388613,8454145,8585222,8716336,8781829,8978433,9306159,9502768,9633793,9699329,9764866,9830447,10027009,10092550,10158081,10289153,10354689,10420230,10485761,10551298,10813441,10878978,10944517,11010114,11075589,11141121,11206703,11337729,11403311,11468802,11730946,11862017,11927554,11993089,12124162,12386306,12517378,12582913,12779521,12845058,12910594,13041665,13172739,13238275,13303813,13434883,13500419,13631490,13697027,13828099,13893634,14024707,14155779,14221314,14286852,14352388,14417924,14483458,14548995,14680065,14745603,14811139,14942213,15007745,15073283,15204354,15269897,15335428,15400963,15466500,15597571,15663109,15728646,15794180,15859715,15925252,15990789,16121857,16187397,16252929,16384006,16515074,16580611,16711689,17039365,17104898,17170437,17235971,17301507,17367041,17563649,17629185,17760260,17825795,17891333,17956869,18022406,18087940,18219025,18284548,18350081,18415618,18546692,18612225,18808835,19005441,19202051,19267585,19333121,19398658,19464199,19726337,19857412,19922947,19988484,20054017,20119556,20250629,20316164,20381701,20447233,20512772,20578308,20643841,20709377,20774916,20840449,21037060,21102598,21233666,21299201,21364739,21430274,21495812,21561350,21626883,21692421,21757954,21823489,21889025,21954562,22085634,22151170,22216708,22347777,22413314,22478852,22544389,22609926,22675458,22740994,22806529,22872071,22937604,23003140,23134209,23199754,23396357,23527428,23592964,23658502,23724033,23789570,23855110,23920642,24051716,24117253,24182788,24313863,24379396,24444929,24510465,24641540,24707073,24903685,25100292,25165832,25231365,25296897,25362434,25427973,25690114,25755649,25821186,25886723,25952263,26017797,26083329,26476549,26542098,26607619,26738692,26804234,26935298,27066373,27197441,27262977,27394052,27983877,28049409,28114946,28311557,28639240,28966916,29360135,35520513,36044803,36175876,36241416,36372489,36700162,37093380,37552133,37748739,37879810,37945351,38076420,38207492,38273031,38404097,38535170,39256072,39387144,39518217,40042500,40108038,40173573,40239111,40304642,40435717,40632322,40763394,40828936,40894466,41025539,41156610,41287685,41353217,41418756,41680898,41877506,41943041,42074114,42139650,42205188,42270721,42401797,42467329,42532866,42598403,42663937,42860546,42926083,42991618,43122693,43057154,43319297,43515912,43581446,43778056,43843587,43909124,44040199,44171265,44302340,44433414,44498946,44564483,44630018,44695553,44761090,45023234,45088776,45219841,45350920,45481992,45547547,45613059,45744130,45809665,45875205,45940738,46006273,46071811,46268418,46333954,46399491,46858245,46989314,47054850,47120391,47382530,47448066,47513602,47644673,47710216,47841282,48037892,48103426,48168969,48234497,48365575,48496645,48627714,48758786,48889857,48955399,49086466,49152002,49217542,49283075,49414145,49545221,49741830,49807364,50003980,50135043,50397187,50593793,50659332,50790402,50855944,50921474,50987013,51183625,51314690,51380227,51511301,51642372,51707907,51773443,51904513,51970050,52035586,52101121,52166662,52232198,52297729,52363267,52428805,52625414,52822021,52887554,52953091,53018628,53149699,53477378,53542914,53608453,53673988,53870597,54132737,54198274,54263821,54460422,54525958,54722569,54788097,54853644,54919169,54984706,55115777,55312393,55377923,55836684,56033284,56098819,56164354,56229891,56360961,56426498,56623106,56688641,56819718,56885253,57016323,57081859,57147396,57212932,57278468,57409541,57475077,57671682,57737239,57868292,57933826,57999361,58130454,58327041,58458115,58523650,58720263,58785793,58916866,58982405,59179009,59244549,59375617,59572225,59637761,59834370,59899905,59965443,60162052,60293142,60358661,60489730,60555267,60620801,60751878,60817409,60882946,60948483,61079553,61407252,61669378,61734913,61931521,62062597,62128132,62193687,62259202,62324738,62390282,62455812,62521346,62717957,62783493,62849026,62980101,63045654,63111169,63307777,63373314,63569923,63700994,63897605,63963141,64028674,64159747,64290817,64356357,64487425,64552963,64684056,64815108,64946177,65077251,65208321,65273878,65339393,65601542,65863684,65994754,66125826,66453508,66519048,66650114,66715649,66781186,66912258,67043329,67239938,67305475,67502085,67567622,67633158,67698690,67764225,68091906,68157442,68222977,68288514,68419588,68485122,68812802,68878337,68943874,69009410,69140485,69206020,69533720,69664769,69795842,69861377,69926914,70254595,70451201,70582273,70647810,70713355,70909954,70975490,71041025,71106562,71172100,71237637,71499778,71630850,71827457,72089601,72220673,72286211,72351746,72548358,72613889,72679427,73007106,73138190,73334785,73400321,73465857,73531393,73662466,73793538,73924611,73990148,74121217,74186753,74252290,74448899,74579970,74645518,74776579,74842116,74907659,75038721,75104329,75235329,75366424,75497486,75563009,75759620,75825153,75956230,76021766,76087399,76218369,76283919,76349441,76414980,76677130,76808194,76939277,77004802,77135886,77332481,77463554,77529089,77791235,77856838,77922306,77987848,78118916,78184462,78381061,78446597,78512192,78708738,78774287,78905349,78970887,79101957,79167501,79233025,79429634,79495183,79560707,79757316,79953996,80085008,80216068,80281669,80347142,80412679,80740354,80805893,80871425,81002565,81068105,81133570,81199120,81264713,81330177],"select":[8978433,11075585],"set":[3342338,3538945,4521985,4915219,5963778,8585217,10485763,10747910,10813443,11862017,12779523,18350082,19005441,20447234,21430274,22347778,23461890,23920642,25034754,25821186,26214403,27721729,29753345,31522818,31653891,33292294,33423361,33685506,33751046,34865158,34930694,35717126,35913729,36241409,36306950,36372481,36503553,36569094,36831233,37224454,37421062,37617665,37683201,37814273,37945345,38273025,38797318,38862854,39321601,39387137,39518209,39583750,40239105,40566790,41222150,41353218,42008582,42795014,43515905,43581441,44367878,44433409,45416454,46137350,46399489,46727169,46989314,47775745,48300033,48627713,49348609,49610753,49741825,51445780,51707905,52625409,52756482,53280769,54198276,55050241,55508996,56033284,56229893,56360965,56688646,57278469,57344005,57868292,57999364,58523653,58916870,58982404,59441156,59572229,59768836,59899908,60162053,60620805,60686342,60817414,60882948,61079557,61341701,61669382,61734916,61931524,62062597,62128132,62259204,62324741,62717957,62849030,63504388,63635460,63700996,63766532,63963142,64094212,64159750,64225285,64290821,64421893,64552964,64749572,64815109,65077252,65536004,65601541,65667076,65994757,66387973,66453510,66584580,66650119,66912261,67043332,67174404,67305476,67567622,67698693,67764229,67829764,67895300,68288517,68354052,68878342,69009412,69074948,69140485,69402628,69468165,69926917,70254597,70385667,70778884,70975493,71041030,71237637,71303169,71565316,71827461,71892996,72155140,72220678,72286213,72810500,72876036,73007108,73400325,73924612,74055684,74383364,74448900,75235333,75563012,75956225,76611589,76939267,77070341,77987841,78643201,79364116,79888386,80084994,80543746],"syncinvoker":[39714821,41943045,42270725,45219845,47251461,48889861,50331653,52297733,52559877,53149701,54919173,57737217,62193665,63045633,64684033,65273857,69533697,71630852,75104257,79953921,80281601,81002497,81068033,81264641],"sort":[65537],"statement":[14483457,14548993,14942209,15269889,15990785,16187393,16384001,16515073,16580609,21561345,21626881,23003137,23855105,24641537,26607617,26804225,29360129,43843586,44564482,45613057,49283073,51380225],"soft":[59834369,60293121,71041025,72220673,75366401,76087297],"streaming":[17563649,23724033],"scriptname":[56819713,64028676,80347137],"sets":[1966081,2097154,2752514,2818050,2883585,3080193,3276802,3473410,3538947,3801090,3997698,4390914,4456450,4521987,4784130,4915221,4980738,5242882,5570562,5963778,5767174,10485761,10813441,12779521,18350081,20447233,22347777,23461889,23920641,25034753,25821185,26214401,31522817,31653889,33292289,33423361,33685505,33751041,34865153,34930689,35717121,35913729,36306945,36503553,36569089,36831233,37224449,37421057,37617665,37683201,37814273,38666241,38797313,38862849,39321601,39583745,39911425,40566785,41222145,42008577,42795009,44367873,45416449,46071810,46137345,46399490,46727170,47382530,47775746,48300034,48627714,49348610,49610755,51445779,51707905,52756485,53084161,53608450,54198273,54394881,54525954,54657026,55050242,55508993,55640065,55705601,56885250,57344001,57737225,57868289,58130440,58589185,58982401,59244546,59375617,59441153,59572225,59768833,59834374,59899905,60162049,60293133,60358659,60686337,60751874,60882945,61014022,61079553,61276161,61407240,61538308,61734913,61931521,61997057,62128129,62193673,62259201,62783490,62980099,63045641,63504385,63635457,63700993,63766529,63897602,64094209,64356354,64552961,64684041,64749569,64815105,65077249,65273865,65536001,65601537,65863682,65994753,66584577,66912257,67174401,67305473,67633154,67829761,68354049,69009409,69140481,69402625,69468161,69533705,69926913,69992450,70254593,70778881,70975489,71041025,71237633,71303170,71368706,71565313,71827457,72155137,72220673,72286209,72548355,72810497,72876033,73138180,73269250,73400321,74055681,74121218,74383361,74645508,74973186,75104265,75169793,75366406,75431942,75497476,75628546,75694082,75956227,76087309,76152838,76283908,76414977,77070337,77135876,77201409,77332481,77791234,77856776,77987843,78184452,78512136,78577666,78643201,78839812,78970883,79167490,79364117,79495172,79691777,79888389,79953929,80084996,80281609,81002505,81068041,81199108,81264649],"shares":[37093377,39256065,40828929,42205185,43778049,45481985],"sbyte":[3538945,4521985,4915202,7340035,9895939,11927559,29229063,30212103,30867463,32374791,42795015,51052546,51445762,54067202,75956225,76349443,77529091,77987841,78184449,79364098],"serialized":[1245186,1507330,17563650,23724034,46006273,54788097,72548355,78970883],"specifying":[7405569,9043969,10682369,14155777,14483457,14548993,16515073,19857409,21037057,21364737,21626881,24641537,25427969,26607617,26738689,36044801,36175873,37552129,37748737,37945345,38207489,40239105,40435713,40894465,41025537,42074113,42598401,43057153,43581441,44433409,45023233,45744129,47513601,48037889,49741825,49807361,51970049,52625409,54984705,69337089,79298561],"shallow":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"successfully":[7405569,9043969,10682369,15990785,35389441,35520513,35979265,37289985,42467329,42729473],"specific":[3211266,8454145,8978433,10354690,14286849,14352385,14417921,15335425,15466497,15794177,15925249,17760257,18219010,20381697,20512769,21692417,22544385,24117249,24903681,26017793,26476545,26542082,27066369,27983873,48103425,56688641,60358657,61669377,62980097,66650113,67764225,72548353,74776577,76414978,78184449,78970881,80412673],"scripting":[8847362,9175042,45547521,60817409,66387969,74776577,80543745],"statements":[14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,18022401,18219009,19464193,19857409,21037057,21364737,21561345,21626881,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129,43843585,44564481],"strongly":[3538957,4521997,8388609,10551298,10747907,10944513,11075585,11730946,11927554,12124162,12386306,12517378,12845058,12910594,13631490,13893634,13959169,14221314,15204354,75956237,76939265,77987853],"stringdictt":[10354690,13959170],"scheme":[10747905],"serialization":[17563649,19726337,23724033,24707073],"starting":[3211265,53805057,70189057,76414977,80019457],"suitable":[36241409,36372481,37945345,38273025,39387137,39518209,40239105,43515905,43581441,44433409,49741825,52625409,79757313],"supported":[22740994,42270722,45219842,50593794,51576833,51707907,52363265,52756481,52953090,53149698,54132738,54198273,55443457,59047937,60424193,63504385,73269249,74973185,75104257,75694081,77856769,78446594,79888385,79953921,80281601,81002497,81068033,81264641],"serializableattribute":[72548356,78970884],"started":[58327042,60358657,62455809,62980097,71106562,72548353,73793538,78905345,78970881],"settimerresolution":[76939265],"sampl":[57540610,67436545,68550657,71761922],"subsequent":[3014657,3407873,7405569,9043969,10682369,13303809,72548353,76611585,77070337,78970881],"scriptmemberattribute":[4653058,22151174,22806534,23396358,24051718,25165830,25952262,27394054,28311558,45547521,55312401,63700993,65077249,65863682,73990145,75759617,79167510,80216065],"setpropertynocheck":[1966081,2883585,3080193,6422529,19660801,22347780,71368705,74121217,75628545],"segment":[76873729],"setnull":[4915201,36831236,79364097],"smaller":[79560705],"signature":[8585217],"sourceinfo":[7405574,9043973,10682374],"significant":[14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,18022401,18219009,19464193,19857409,21037057,21364737,21561345,21626881,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129,76939265],"sole":[1,131073,262145,786433,917505,1048577,1179649,2359297,78708737,80805889,80871425,81330177],"single":[3538945,4521985,4915202,7340035,9895939,12910599,16580609,16711681,23003137,23199745,27918341,29097989,31064069,31129605,43843585,44367877,44564481,45613057,49283073,51052546,51380225,51445762,54067202,75956225,76349443,77529091,77987841,79364098],"special":[60162049,64552961,64815105,67305473,80871425,81330177],"specifies":[8454145,8847361,9175041,45547527,49545217,54198273,57344001,68550657,69468161,70189057,71434241,72679425,72744964,73990145,74842113,75038721,75759617,76021763,76152833,76873733,76939282,77004804,77791234,78118913,78446597,79167489,79429635,79560705,80150530,80216065,80412682],"specifier":[7405574,9043973,10682374,14155781,14483461,14548997,16515077,19857413,21037062,21364741,21626886,24641542,25427974,26607622,26738694,36044805,36175877,37552133,37748741,37945349,38207493,40239109,40435717,40894469,41025541,42074117,42598405,43057157,43581445,44433413,45023237,45744133,47513605,48037893,49741829,49807365,51970053,52625413,54984709],"specified":[851970,1638401,1703938,1769474,1835012,1900545,1966082,2031618,2162689,2228225,2293761,2490375,2555905,2621441,2686978,2818052,2883590,2949122,3014657,3080194,3145730,3211267,3276804,3342339,3407873,3473412,3538974,3604481,3670020,3735601,3801090,3866625,3932161,3997700,4128769,4194305,4325377,4390920,4456449,4522018,4653058,4587521,4718593,4784129,4849665,4915202,4980737,5046274,5111809,5177345,5242883,5308417,5374002,5439489,5636097,5701633,5767176,5963778,6094849,6160385,6225921,6356993,6488065,6553601,6619137,6684674,6815747,6946817,7077907,7340033,7667713,7733249,7798785,7864321,7995393,8192002,8323074,8388609,8454145,8519681,8585217,8650754,8716338,8781825,8912898,8978433,9175042,9306162,9502770,9568257,9699329,9764865,9830450,9895979,9961475,10027009,10092547,10158082,10223618,10420227,10485761,10551297,10616833,10747905,10813442,10878979,10944513,11010110,11075588,11141121,11206706,11272193,11403314,11468803,11534337,11599873,11665409,11730945,11862019,11927553,12124161,12386305,12451841,12517377,12713985,12779522,12845057,12910593,12976129,13172738,13238274,13369345,13434882,13500419,13631489,13697027,13828098,13893633,13959171,14155778,14221313,14352386,14417921,14483458,14548993,14745602,14811138,14876673,14942210,15007745,15073281,15204353,15269891,15400962,15466497,15597569,15728642,15794177,15859713,15925250,15990785,16187394,16318465,16384003,16449537,16515074,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17170433,17235971,17301507,17760257,17825793,17891329,17956865,18022402,18087938,18153473,18284547,18219011,18546690,18677761,18743297,18874369,18939906,19005443,19070977,19136513,19202050,19267585,19464195,19857409,19988482,20119554,20185089,20250625,20316163,20381697,20512769,20578306,20643841,20709377,20774913,20905985,21037058,21102593,21168129,21364738,21495811,21561346,21626882,21692417,22020097,22151169,22216705,22282241,22413313,22478851,22544386,22609921,22740993,22872066,22937602,23003137,23199745,23396353,23527426,23592962,23855106,23986177,24051713,24117249,24182785,24248322,24313858,24641537,24772609,24903682,25100289,25165825,25231361,25427969,25493505,25624578,25690113,25755649,25952257,26017793,26279938,26411009,26542083,26607618,26738690,26804227,26869762,27066369,27262977,27328514,27394049,27459585,27525122,27656194,27787265,27852802,27918338,28246018,28311553,28442626,28508162,28639235,28835842,28901378,28966913,29229058,29360131,29425666,29491202,29622274,29818882,29949954,30015490,30081026,30474241,30670850,30867458,30998530,31064066,31260674,31326210,31391746,31457281,31588354,31719426,31850497,32047106,32505857,32571394,32768001,32833538,32899073,33226753,33488898,33619969,33882113,33947650,34013185,34340866,34471937,34537474,34668545,34734081,34799617,35061761,35192833,35258369,35520513,35586050,35782657,36110337,36175873,36438017,36634625,36896769,36962305,37027841,37158913,37289985,37355521,38141953,38207489,38469633,38535169,38600705,38731777,38928385,39256065,39518209,39649281,39714817,39911425,40173569,40304641,40370177,40828929,40894465,40960001,41222146,41418753,41680897,41877505,41943041,42074113,42205185,42270721,42336257,42532865,42991617,43057153,43253761,43384833,43450369,43581441,43646978,43712513,43778049,43843586,43909121,43974658,44105730,44433409,44498945,44564482,44695554,44761089,44826626,44892161,44957697,45023233,45154305,45219841,45350928,45481985,45613057,45678595,45744129,45809665,46006274,46530561,46858241,46923780,47054849,47316993,47448065,47513601,47710224,47841282,47906818,47972363,48037889,48168976,48234497,48365569,48431105,48496641,48562178,48889857,49020930,49086465,49152001,49283073,49414145,49479684,49741825,49807361,49872897,50003971,50069511,50200577,50266114,50331649,50397185,50462722,50528257,50593793,50855944,50921473,50987009,51052563,51183632,51249154,51314690,51380225,51445761,51576836,51642376,51773441,51838978,51970049,52035586,52101121,52166662,52297729,52363265,52494343,52625409,52822017,52887553,52953089,53018625,53149697,53215234,53346305,53411842,53739523,53870593,54132737,54263812,54460417,54722568,54788098,54853636,54919169,54984705,55115778,55312391,55377922,55443460,55836683,56754179,57212936,57409537,57933825,58458113,58589185,58654723,58720261,58851330,59047940,59572225,59965441,60358658,60424196,60555265,60948481,61079553,61734913,61931521,62455811,62652418,62980098,63176705,64618498,64880641,66912257,68812801,68943873,69599233,69926913,70647809,70909953,70975489,71041025,71172097,71303170,71368706,71761921,71827457,72155137,72220673,72417284,72548357,72613890,73138180,73269249,73400321,73531394,73990146,74121224,74514436,74645508,74711042,74842114,74973185,75038722,75104310,75169793,75366430,75431944,75497476,75628546,75694081,75759619,75956258,76087369,76152833,76349441,76414980,76480513,76546049,76677127,76742658,76939270,77004801,77135876,77266945,77332481,77398017,77529131,77856819,77987870,78184456,78249985,78512177,78577667,78708737,78774276,78839811,78905347,78970885,79167497,79364098,79626248,79691777,79757313,79888388,79953971,80019457,80084994,80216067,80281654,80347137,80412675,80478216,80543747,80674817,80740353,80805889,80871425,81002550,81068083,81264694,81330177],"scriptobject":[5963778,18219009,21954561,22413313,22675457,23789569,23920641,24510465,25362433,25690113,25821185,26542081,28114945,45547521,46071809,46399489,56098817,57081857,57147399,60489729,62521345,66125825,66912257,67502087,67633154,69206024,69926913,78381064,80084998],"string":[851969,1703937,1769473,1835016,1900545,1966081,2031617,2097155,2162689,2228226,2293761,2555905,2621441,2686977,2752515,2818051,2883590,2949121,3014657,3080193,3145729,3211274,3276803,3342337,3407873,3473411,3538951,3604482,3735619,3801092,3866625,3932161,3997699,4128769,4194305,4325377,4390915,4456452,4521996,4653057,4587521,4784132,4849665,4915203,4980740,5046273,5111809,5177345,5242885,5308417,5374020,5439489,5570563,5636097,5701633,5767181,5963780,6094849,6160385,6553601,6619149,6684685,6815750,6946817,7077922,7143431,7340037,7405575,7667718,7864321,7995398,8388610,8519686,8650765,8585219,8716356,8847370,8912897,8978446,9043974,9109510,9175050,9306181,9437191,9502788,9699334,9830469,9895941,9961473,10158082,10223617,10289158,10354698,10682375,10747906,10813446,10551297,10878977,10944514,11010147,11075588,11141126,11206725,11403333,11534342,11599884,11730945,11862018,11927553,11993094,12124161,12386305,12451846,12517377,12713990,12779526,12845057,12910593,12976134,13107205,13172749,13238291,13369350,13434893,13500429,13631489,13697043,13828115,13893633,13959170,14024711,14155785,14221313,14286855,14352397,14417921,14483463,14548999,14745607,14811143,14942214,15007750,15073287,15204353,15269900,15335425,15400973,15466497,15597581,15663112,15728648,15794183,15859725,15925267,15990787,16056325,16187398,16252933,16384012,16515079,16580620,16711686,17235981,17301523,17498118,17694727,17760275,17825799,17891335,18022408,18087953,18219022,18284561,18546713,18939910,19005441,19202061,19267590,19333126,19464206,19529734,19791878,19857417,19988489,20119569,20250631,20316185,20381697,20447238,20512781,20578329,20709382,20774929,20840453,20971527,21037067,21102601,21299209,21364745,21495833,21561352,21626889,21692441,22085646,22151174,22216713,22347781,22413319,22478865,22544409,22609929,22675463,22741004,22872074,22937609,23003151,23199752,23330823,23396358,23527441,23592977,23658504,23855112,24117265,24182793,24248325,24313866,24379401,24576009,24641545,24903697,24969222,25034758,25100305,25165830,25427979,25559046,25624581,25755654,25821191,26017793,26083337,26214406,26279941,26476553,26542098,26607625,26738699,26804240,26869767,27066377,27262982,27459590,27590662,27656197,27787269,27852805,27983873,28049415,28114950,28311558,28442629,28573701,28639250,28704770,29032453,29097989,29229061,29294597,29360144,29425669,29622277,29687814,29753350,29818885,29884429,30015493,30081026,30146565,30277637,30670853,30736389,30801925,30932997,30998533,31064069,31260680,31719429,32047109,32112645,32178181,32243717,32309253,32374789,32440325,32636934,32768005,32833549,32899078,33095688,33619974,33685510,33751048,33882118,34078725,34209797,34275333,34471942,34668550,34734086,34799622,35127302,35258374,35323910,35389446,35520518,35651591,35979269,36044807,36110342,36175879,36241415,36372494,36438022,36634632,36896774,36962310,37027846,37158918,37289990,37552135,37748743,37945351,38010888,38076423,38141958,38207495,38273031,38469638,38600710,38666246,38731782,38928390,39387150,39518215,39649286,39714822,39845894,39911430,40042503,40108038,40173574,40239111,40370182,40435719,40697865,40894471,41025543,41222146,41287692,41418758,41484297,41549829,41615366,41680902,41943046,42074119,42205190,42270738,42401806,42467334,42532870,42598407,42729477,42991622,43057159,43122694,43450374,43515911,43581447,43712518,43778054,43843599,43909126,43974658,44040204,44105729,44302348,44433415,44498950,44564495,44695555,44761094,44957702,45023239,45088770,45219858,45350928,45481990,45613072,45678599,45744135,45875214,45940737,46006274,46071809,46268417,46399489,46530566,46596098,46661633,46727169,46792710,46858247,47316998,47382529,47513607,47579138,47710224,47841283,47972358,48037895,48168976,48234502,48300034,48365574,48431106,48496646,48562179,48627713,48693249,48824321,48955402,49086470,49152002,49217548,49283088,49348609,49676289,49741831,49807367,49872902,50003984,50069508,50331654,50462722,50528262,50593810,50659334,50855948,50987015,51052547,51118086,51183632,51314691,51380240,51445763,51576837,51642380,51773442,51838979,51970055,52035586,52101126,52297734,52363267,52428809,52494340,52625415,52822022,52953103,53018630,53149711,53346306,53411841,53608449,53739524,53870598,54001666,54067203,54132754,54329346,54460422,54525953,54722572,54788098,54853648,54984711,55050241,55115779,55181313,55312388,55377922,55443461,55508999,55836678,55967746,56098817,56295426,56754180,56819713,56885249,56950790,57016326,57081857,57212940,57409542,57802753,58064897,58589189,58654724,58720259,58851329,59047941,59244545,59310086,59637766,60030982,60358657,60424197,60686342,60751873,61079559,62521350,62652420,62783489,62980097,63242247,63504391,63569926,63635463,63897601,64028678,64356353,64618500,64880647,64946182,65077255,65339398,65798145,67108870,67239943,67371015,67633153,68091911,68222982,68485126,68943873,69664775,69795847,69926920,70057985,70516742,70909953,71172097,71303172,71368707,71761921,72351751,72417285,72482817,72548356,72613889,72941574,73072649,73138180,73269252,73334791,73596934,73531393,73662471,73990145,74121224,74186759,74252295,74514437,74645508,74711041,74842113,74973188,75038721,75104330,75169794,75366440,75431949,75497476,75628559,75694084,75759617,75956236,76087401,76152833,76218374,76283908,76349445,76415003,76480513,76546049,76742657,77135876,77266945,77332481,77398017,77463559,77529093,77725701,77856839,77922311,77987847,78184452,78249985,78512195,78577669,78708737,78839809,78970884,79167493,79364099,79495172,79626245,79691777,79888392,79953988,80019457,80084997,80216065,80281674,80347138,80412673,80478213,80543745,80674819,80805889,80871425,81002570,81068100,81199108,81264714,81330177],"sourcemapuri":[61538305,67174404,78839809],"sorry":[458753,61603841],"source":[1703938,2293761,2555905,2686978,7471105,7798786,9764866,16842758,16908294,17563649,20185094,21168134,22282246,23724033,23986182,45547524,49545217,60358657,61538305,62980097,67174402,68943874,70909954,72548353,72613891,73531395,74776577,78839809,78970881,80412673],"simply":[60162049,62128129,64552961,71237633],"static":[3,655362,786435,917507,983042,2359299,3538945,4521985,8060931,8192003,8323075,8454145,8781827,8978433,9568257,10092547,10354689,10420227,11272197,14286849,14352385,14417921,15335425,15466497,15794177,15925249,17039363,17170435,17760257,17956867,18415619,18808835,19005441,19398659,19922947,20054019,20381697,20512769,21233667,21692417,22544385,24117249,24903681,25231363,26017793,26476545,26935299,27066369,27983873,31981571,34406404,39780355,45285380,54591491,55771139,57475075,57737217,58130433,60293121,61407233,62193665,62324738,63045633,63635459,64684033,65273857,65536003,67043330,67895299,67960835,68419587,68616195,69533697,69992449,70123523,71958529,75104257,75956225,76087297,76611587,76677121,77070339,77201409,77266945,77594625,77856769,77987841,78315523,78512129,78577665,78774273,79953921,80281601,81002497,81068033,81264641],"state":[1245185,1507329,51511297,72548353,73924609,74448897,78970881],"streamingcontext":[3014657,3407873,17563653,19726344,23724037,24707080,46006273,54788097,72548354,78970882],"starttimestamp":[53805057,70189060,80019457],"synchronously":[75104257,79953921,81264641],"systemexception":[72548353,78970881],"simultaneously":[35389441,35520513,37289985,42467329],"suppresses":[76939265,78446593],"satisfy":[75038721],"semicolon":[22740993,42270721,45219841,50593793,52756482,52953089,53149697,54132737,54657025,55508993,63504385,63635457,69992449,79888386],"specify":[3342345,5963785,64094209,66584577,67829761,69402625,76939265,80085001,80543753],"systems":[76939265],"significantly":[71041025,72220673],"structs":[18219009,26542081,73990145,75038721,75759617],"setelement":[3538945,4521985,10485764,75956225,77987841],"setvalue":[10944515,11075587,16711681,23199745],"similar":[8912897,9961473,11862017,16580609,19005441,23003137,43843585,44564481,45613057,47120385,49283073,51380225,64421889,68878337,79429633],"simple":[31981569,39780353],"syntax":[1,393217,524289,655361,327681,786433,917505,983041,1114113,2359297,5505025,5832705,6029313,6225921,6291457,6356993,6422529,6488065,6619137,6684673,6750209,6815745,6881281,7012353,7143425,7208961,7274497,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7929857,7995393,8060930,8126465,8192002,8257537,8323074,8388609,8454145,8519681,8585217,8650753,8781826,8847361,8912897,8978433,9043969,9109505,9175041,9371649,9437185,9568257,9633793,9699329,9764865,9961473,10027009,10092546,10158081,10223617,10289153,10354689,10420226,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11075585,11141121,11272193,11337729,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711682,16777217,16842753,16908289,16973825,17039362,17104897,17170434,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956866,18022401,18087937,18153473,18219009,18284545,18350081,18415618,18481153,18546689,18612225,18677761,18743297,18808834,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398658,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922946,19988481,20054018,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233666,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199746,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231362,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,26935298,27000833,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28246017,28180481,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36306945,36372481,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38404097,38469633,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40632321,40697857,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,41943041,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43712513,43778049,43843585,44040193,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44761089,44892161,44957697,45023233,45088769,45219841,45285377,45416449,45481985,45613057,45744129,45809665,45875201,46137345,46333953,46465025,46530561,46792705,46858241,46989313,47054849,47120385,47185921,47251457,47316993,47513601,47644673,48037889,48234497,48365569,48889857,48955393,49086465,49217537,49283073,49414145,49741825,49807361,49872897,50135041,50331649,50528257,50593793,50659329,50724865,50790401,50921473,50987009,51118081,51380225,51511297,51970049,52101121,52297729,52428801,52559873,52625409,52953089,53149697,54132737,54198273,54460417,54591489,54919169,54984705,55508993,55771137,56033281,56229889,56360961,56688641,56950785,57016321,57147393,57278465,57344001,57475073,57868289,57999361,58195969,58327041,58392577,58458113,58523649,58785793,58916865,58982401,59179009,59310081,59441153,59506689,59572225,59637761,59703297,59768833,59899905,59965441,60030977,60096513,60162049,60489729,60555265,60620801,60686337,60817409,60882945,60948481,61079553,61145089,61341697,61472769,61669377,61734913,61865985,61931521,62062593,62128129,62259201,62324737,62390273,62521345,62586881,62717953,62849025,62914561,63111169,63176705,63242241,63307777,63373313,63438849,63504385,63569921,63635457,63700993,63766529,63832065,63963137,64028673,64094209,64159745,64225281,64290817,64421889,64487425,64552961,64749569,64815105,64880641,64946177,65011713,65077249,65142785,65208321,65339393,65404929,65536001,65601537,65732609,65667073,65798145,65929217,65994753,66060289,66125825,66191361,66256897,66322433,66387969,66453505,66519041,66584577,66650113,66715649,66846721,66912257,66977793,67043329,67108865,67174401,67239937,67305473,67371009,67436545,67502081,67567617,67698689,67764225,67829761,67895297,67960833,68026369,68091905,68222977,68288513,68354049,68419585,68485121,68550657,68616193,68681729,68747265,68812801,68878337,68943873,69009409,69074945,69140481,69206017,69271553,69337089,69402625,69468161,69599233,69664769,69730305,69795841,69861377,69926913,69992449,70057985,70123521,70189057,70254593,70320129,70385665,70451201,70516737,70647809,70713345,70778881,70844417,70909953,70975489,71041025,71106561,71172097,71237633,71303169,71368705,71434241,71499777,71565313,71630849,71696385,71761921,71827457,71892993,71958529,72024065,72089601,72155137,72220673,72286209,72351745,72417281,72482817,72548353,72613889,72679425,72744961,72810497,72876033,72941569,73007105,73072641,73138177,73203713,73269249,73334785,73400321,73465857,73531393,73596929,73662465,73728001,73793537,73859073,73924609,73990145,74055681,74121217,74186753,74252289,74317825,74383361,74448897,74514433,74579969,74645505,74711041,74842113,74907649,74973185,75038721,75104257,75169793,75235329,75300865,75366401,75431937,75497473,75563009,75628545,75694081,75759617,75825153,75890689,75956225,76021761,76087297,76152833,76218369,76283905,76349441,76414978,76480513,76546049,76611585,76677121,76742657,76808193,76873729,76939265,77004801,77070337,77135873,77201409,77266945,77332481,77398017,77463553,77529089,77594625,77660161,77725697,77791233,77856769,77922305,77987841,78053377,78118913,78184449,78249985,78315521,78381057,78446593,78512129,78577665,78643201,78708737,78774273,78839809,78905345,78970881,79036417,79101953,79167489,79233025,79298561,79364097,79429633,79495169,79560705,79626241,79691777,79757313,79822849,79888385,79953921,80019457,80084993,80150529,80216065,80281601,80347137,80412673,80478209,80543745,80609281,80674817,80740353,80805889,80871425,80936961,81002497,81068033,81133569,81199105,81264641,81330177],"searchpath":[52756481,55508996,79888385],"stream":[7077889,11010049,39059468,39452684,54001665,58261505,58392583,65798152,69337094,75366401,76087297,76480513,80674817],"selects":[13500417,13697025,14352385,14745601,14811137,15400961,15466497,15794177,15925249,16711681,17235969,17301505,17891329,18284545,19202049,19988481,20119553,20316161,21102593,21495809,22478849,22544385,22937601,23199745,23527425,24903681,26017793,27066369,35979265,36896769,37027841,38535169,38731777,39256065,39649281,40304641,40828929,40960001,41943041,42270721,42336257,42532865,42729473,43253761,43778049,44498945,44761089,44892161,45219841,45481985,45809665,47054849,48234497,48889857,49086465,49414145,50593793,50921473,52101121,52297729,52953089,53149697,54132737,54919169,79560706],"second":[10944513,11075585],"serves":[851969,1703937,1835009,1900545,1966081,2162689,2228225,2293761,2555905,2621441,2686977,2883585,3014657,3080193,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4587521,4849665,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7864321,8716289,9306113,9502721,9830401,11010049,11206657,11403265,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,74121217,74514433,74711041,75104257,75169793,75366401,75431937,75628545,75956225,76087297,76152833,76480513,76546049,76742657,77266945,77332481,77398017,77856769,77987841,78249985,78577665,78708737,78970881,79626241,79691777,79888385,79953921,80019457,80084993,80281601,80347137,80478209,80543745,80674817,80805889,80871425,81002497,81068033,81264641,81330177],"standard":[8847361,9175041,13238273,13697025,13828097,15400961,15597569,15859713,17301505,18546689,19202049,20119553,20316161,20578305,20774913,21495809,23527425,25100289,42270721,45219841,50593793,52953089,53149697,54132737,61734913,61931521,65470466,70123526,71958530],"scriptid":[56819713,73007108,80347137],"simulate":[62062593,67567617],"sourceindex":[16842757,16908293,20185093,21168133,22282245,23986181],"setenumeratorfactory":[5767171,33423365,35913733,37617669,49610755,75431939],"selector":[8978434,11075586],"sample":[4194307,7077889,10747905,11010049,38338562,39124994,49545218,53805057,57540611,66256903,67436546,68354049,68550658,71565313,71761928,72810497,74055681,75366401,76087297,80019457,80150529],"setting":[3342337,5963777,6488066,23396354,24051714,25165826,25952258,28966914,47448065,53542913,55312388,56033281,57671681,57737217,57933825,58130433,58523649,60293121,61407233,61669377,62193665,62259201,62717953,63045633,63373313,64159745,64684033,65273857,65863681,66781185,67764225,68157441,69533697,71499777,72286209,73924609,73990145,74448897,74842113,75104257,75235329,75563009,75759618,76021764,76087297,77856769,78512129,79167493,79953921,80084993,80216066,80281601,80543745,81002497,81068033,81264641],"stack":[393217,3735553,5373953,8716289,9306113,9502721,9830401,11010049,11206657,11403265,15663108,23658500,48955396,52428804,59834369,60293121,60358657,62980097,66715649,71827461,72548353,73400325,75104257,75366401,76087298,77856769,78512129,78970881,79953921,80281601,81002497,81068033,81264641],"setdynamicpropertiesgetter":[5767169,39321604,75431937],"safety":[56688641,66650113],"safely":[17104897,25886721,36700161,37879809,38404097,50135041],"searched":[7929857]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_116.json b/docs/Reference/fti/FTI_116.json index c89f45e70..d244ec580 100644 --- a/docs/Reference/fti/FTI_116.json +++ b/docs/Reference/fti/FTI_116.json @@ -1 +1 @@ -{"total":[39911429,49086466,49479682,49872898,51511297,56164354,56557570,59244549],"typed":[3407885,3670019,5046285,8388609,9306113,9568257,9699330,10289154,10420226,10485762,10616835,10682370,11075586,11206658,11337730,11665410,12058626,12189698,12255233,12582914,16056322,16449538,17301506,38535170,40239105,41156609,46989313,58785805,59768845,60424194,60751880,61210625,61341697],"types":[3735553,4259844,4587521,5046274,6291457,6356993,6553601,7143430,7208961,7536641,8060933,8126466,8388609,8454146,8716289,8978433,9437186,9699329,9764866,10092546,10223617,10289153,10420225,10485761,10616833,10682369,10813442,11075585,11206657,11272195,11337729,11468803,11665409,11796482,11862018,12058625,12189697,12386306,12451843,12582913,12713994,12779523,12910593,13041666,13172737,13500418,13565954,13697026,13631494,13828097,13893633,14286850,14483458,14548993,14745601,15007746,15073281,15138818,15269890,15532033,19136514,19398657,19464193,19922946,20447233,20709378,21037058,21233665,21430274,21889035,22085633,22806529,23199746,23789574,24248322,24641537,25100290,30932994,36765700,37683204,38010883,38535169,39059458,39321601,39452673,39976961,40042498,40566785,40632322,42074114,42205186,43057156,43581441,43909122,44171266,44957698,45088770,46268418,46465028,47185921,47316993,47775746,53411841,54067211,54722561,55377925,55312385,58195971,58327043,58392579,58785795,60096515,60358657,60817411,60882947,61407235,61538307,61603843,61669377],"throws":[9043969,10616833,10878977,12910593,13565953,45678593,45744129,51904513,58654721],"try":[983041,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4653057,4849665,4980737,5046273,5111809,5439489,6881281,7798785,12910594,19595265,41943041,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58261505,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60227585,60358657,60489729,60555265,61472769],"totalexternalsize":[39911425,56557572,59244545],"target":[3080193,5111809,7929861,8519685,8585221,9109509,9240581,9371653,9633797,9895941,9961477,10027013,10158085,10551301,10747909,11534341,13303813,13828101,13959173,14417925,18415617,19398662,20119558,20905985,21561346,22347779,22609926,22872066,23396358,23658497,23855105,24510466,25034753,25886721,38010884,42598401,46923779,47972353,50462721,54591490,54722562,55312385,57606145,58654721,58982401,59506692,60358658],"tostatictype":[3407873,5046273,11730948,58785793,59768833],"termination":[50200578,50724865,53936130,54460417,59441154],"throw":[3735553,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,17956865,20971521,28770305,44367873,58195969,58327041,58392577,59441154,60096513,60817409,60882945,61407233,61538305,61603841],"trace":[17367042,20316162,28246018,43778050],"tvalue":[2752516,16121858,17039361,17694721,19595266,42663937,43253761,46858242,49152001,57540614],"tobyte":[3407873,5046273,10420229,58785793,59768833],"typeid":[38928385,42008577,42598401,46137345,46923777,47972353,53477377,54722561,55312385,59113473,59506689,60358657],"table":[13631489,13828097,19398657,23789569,45416449,47382532,60030977,60751873,61669379],"tresult":[2949124,17104897,17825793,18546689,19333121,38862852,61079556,61145089],"trygetvalue":[1769473,2752513,3276801,4259841,12255233,19595270,54067201,56426497,57540609,57999361],"tosbyte":[3407873,5046273,10289157,58785793,59768833],"targetsite":[45154305,45744129,51314689,58654721],"typo":[41943041],"tas":[6029313,7274497,16252929,17104898,17825794,18546690,19333122,19726337,20512769,21299201],"trysetmember":[3014657,4521985,55705601,60227585],"todecimal":[3407873,5046273,12058629,58785793,59768833],"todouble":[3407873,5046273,9699333,58785793,59768833],"timespan":[51249159,52887559,55312385],"toenumerable":[2949121,19005444,61079553],"task":[2949129,6029319,7274502,16252930,17104910,17825806,18546690,19333122,19726350,20054026,20512782,21299202,38862856,57278470,61079561,61145091],"third":[9306113,9568257],"temporary":[50593793],"tochar":[3407873,5046273,11206661,58785793,59768833],"times":[1179649,13434881,28049409,28442625,28966913,29949953,30998529,32178177,32768001,34013185,34930689,35848193,36569089,37879809,39321601,56033281,59703297],"typelibenums":[5046273,7077892,58785793],"timestamp":[37093378,38141954,50266119,50855939,52756483,53673986,56754178],"totask":[2949121,20054020,61079553],"trydeleteindex":[3014657,4521985,55705601,60227585],"touppercase":[9306113],"totalavailablesize":[39911425,56164356,59244545],"threw":[12910593],"tryfunc":[12910600],"true":[5242881,5373953,5898241,6094849,6225921,6946818,8912897,9175041,9371649,9764865,10027009,10158081,10223618,12910594,13631489,14352385,14811137,15335425,15400961,16187393,16318465,16973825,17039361,17694721,18284545,18874370,19595265,22282241,22937601,23068673,23527425,23789569,23986177,24117249,24838145,25362433,25624577,25755649,26411009,27066369,27918337,27983873,28049409,28377089,28573697,29294593,30081025,30343169,30605313,31981569,32636929,34013185,35520514,37879809,38273026,40042498,41353217,41746433,42336257,42467329,42795010,43057153,43122690,43450369,44171266,45154305,45219841,45875201,46333954,46465025,47710209,47906817,48234497,48889858,49414145,51052546,51314689,52035585,52559873,52822018,53280769,54001665,54853633,56098817,58064897],"tree":[37093377,38141953,39321601,48562177,49807361,53673985,55115777,56754177],"title":[1310721],"tosingle":[3407873,5046273,11075589,58785793,59768833],"toarray":[3670017,7143425,8060929,8126465,9306113,9830401,16449540,60751873],"tryunaryoperation":[3014657,4521985,55705601,60227585],"tryconvert":[3014657,4521985,55705601,60227585],"time":[38404098,41549825,42074114,47251457,50987009,51249153,51707905,52625409,52887553,54853633,55443457,55574529,57147394,58261506,60817410,61145089,61669378],"tib":[52690945,53149697,53542913,54263809],"tojson":[3604481,23134212,53673985],"typedarray":[61341697],"type":[65537,131073,196609,262146,327681,393217,458753,524289,655361,786433,851969,1572867,1638402,1703939,1769474,1835010,1900546,1966082,2031618,2097154,2293775,2359298,2424833,2490370,2555906,2621441,2686977,2752513,2818049,2162690,2228226,2883586,2949121,3014660,3080193,3145729,3211265,3276802,3342338,3407898,3473410,3538946,3604482,3670017,3735585,3801091,3866626,3932162,3997698,4063234,4128769,4194305,4259862,4325378,4390914,4456450,4521988,4587554,4653058,4718593,4784129,4849666,4980738,5046311,5111810,5177345,5242887,5439490,5570561,6291490,6357026,6553634,6881282,7077896,7143432,7208994,7471123,7536674,7602184,7798786,7929872,7995412,8060932,8126483,8257543,8323076,8388609,8454170,8585232,8650755,8716322,8912904,8978466,9043974,9240581,9306122,9437203,9502722,9568261,9699335,9764870,9830409,9895941,10092556,10223624,10289159,10354694,10420231,10485767,10616839,10682375,10813442,10878994,11010064,11075591,11141129,11206663,11272200,11337735,11468808,11599874,11665415,11730950,11796482,11862018,11993090,12058631,12124175,12189703,12255241,12386306,12451848,12517389,12582919,12713992,12779528,12845059,12910596,13041681,13107202,13303811,13500433,13565970,13697039,13631490,13828103,13959171,14090243,14286863,14483474,14942210,15007762,15138834,15269906,15794178,15925251,16252929,16580610,16777218,17104899,17563651,17760258,17825795,18153473,18350082,18546691,18612227,18743299,19005441,19136531,19333123,19398663,19660802,19726337,19922961,20054017,20512769,20643843,20709397,20905985,21037077,21299201,21364738,21430293,21561346,21889034,22347779,22413315,22609923,22872066,23199763,23265282,23396355,23789570,23855105,24248337,24510466,25034753,25100309,25886721,30932993,31260674,31326210,31457289,31784967,32047112,32505864,32899073,33292311,33619970,33751045,33947650,34209800,34406402,34537473,34865158,34996225,35258391,35389441,35717122,36175879,36634625,36765703,37027841,37093377,37158926,37617665,37683208,37814273,38010887,38141953,38404097,38797313,38928386,38993921,39059459,39256065,39387137,39518209,39780353,39911425,40042498,40239105,40304641,40435713,40632323,40697857,41156609,41222145,41484289,42008578,42074115,42205187,42336257,42532865,42598402,43057154,43188225,43450371,43909123,43974657,44171266,44433416,44957699,45088771,45416449,45744129,45809666,45875201,46137345,46202881,46268419,46333953,46465026,46596097,46858241,46923780,47120385,47644673,47775747,47906817,47972354,48365569,48824321,49414147,50003969,50462721,50593793,50659337,51052545,51576836,52166657,52428802,52822017,53084163,53477382,53673987,53870595,54001665,54067234,54198273,54591490,54722565,55115779,55246850,55312387,55705605,55836677,55902212,56229891,56426499,56492035,56754179,56950789,57016322,57147393,57212933,57278465,57540610,57606145,57671683,57802754,57933829,57999363,58064897,58130436,58196005,58261507,58327076,58392613,58458114,58523651,58589187,58654723,58720259,58785832,58851331,58916866,58982402,59047952,59113478,59179009,59244547,59310083,59375618,59441153,59506695,59572225,59637764,59703299,59768859,59834370,59899907,59965441,60030978,60096549,60162050,60227589,60293122,60358661,60424194,60489731,60555267,60620801,60686337,60751876,60817445,60882981,60948482,61014018,61079554,61145090,61210625,61276162,61341697,61407269,61472772,61538341,61603877,61669383],"top":[65537,131073,196609,262145,327681,393217,458753,524289,655361,786433,851969,1179649,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4980737,5046273,5111809,5177345,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,30670849,30932993,31064065,31457281,31719425,31784961,32047105,32374785,32440321,32505857,32571393,32899073,33030145,33292289,33357825,33423361,33488897,33619969,33751041,33816577,33882113,34078721,34209793,34340865,34406401,34471937,34537473,34603009,34668545,34799617,34865153,34996225,35061761,35192833,35258369,35323905,35389441,35586049,35651585,35717121,35782657,35913729,35979265,36110337,36175873,36241409,36372481,36438017,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37289985,37355521,37421057,37552129,37617665,37683201,37748737,37814273,37945345,38076417,38141953,38338561,38404097,38600705,38666241,38797313,38862849,38928385,38993921,39059457,39124993,39256065,39387137,39518209,39649281,39714817,39780353,39911425,40173569,40239105,40304641,40370177,40435713,40697857,40632321,40763393,41091073,41156609,41222145,41287681,41418753,41484289,41811969,41877505,41943041,42008577,42074113,42205185,42532866,42598401,43188225,43909121,44957697,45088769,45416449,45744129,45809665,46137345,46202881,46268417,46596097,46858241,46923777,47120385,47644673,47775745,47972353,48365569,48824321,51576835,52428801,53084163,53477379,53673986,53870595,54067204,54722563,54853640,55115778,55246849,55312387,55705602,55836674,55902210,56033281,56229889,56426500,56492034,56754178,57016321,57147393,57212929,57540610,57671681,57802753,57933825,57999364,58130435,58195971,58261508,58327042,58392579,58458113,58523651,58589187,58654724,58720258,58785794,58851330,58916866,58982403,59047937,59113475,59244546,59310083,59375618,59506691,59572225,59703298,59768834,59834370,59899906,60030977,60096515,60162050,60227586,60293122,60358659,60424194,60489731,60555266,60751874,60817411,60882947,60948482,61014018,61079553,61276162,61407235,61472770,61538307,61603843],"typeargs":[12124165,12517381,13041669,13500421,13697029,14286853,19136518,19922950,23199750,24248326],"trygetmember":[3014657,4521985,55705601,60227585],"torestrictedhostobject":[2293764,7929861,8585221,9240581,9895941,32505860,59047940],"trybinaryoperation":[3014657,4521985,55705601,60227585],"topic":[1,65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6029313,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,8060929,7995393,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13631489,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19726337,19660801,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20381697,20316161,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26148865,26083329,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35520513,35454977,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36372481,36306945,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38469633,38404097,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40697857,40632321,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909121,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775745,47841281,47906817,47972353,48037889,48103425,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55377921,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"trycreateinstance":[3014657,4521985,55705601,60227585],"trailing":[47710209,48234497,52559873],"tohosttype":[2293762,7471109,7995397,31784962,59047938],"trygetindex":[3014657,4521985,55705601,60227585],"toasyncenumerable":[2949121,18153476,61079553],"totalphysicalsize":[39911425,49872900,59244545],"tryinvokemember":[3014657,4521985,55705601,60227585],"trydeletemember":[3014657,4521985,55705601,60227585],"topromise":[2949128,16252933,17104901,17825797,18546693,19333125,19726341,20512773,21299205,38862856,61079560],"timestamps":[50266113,50855937,52756481],"tasks":[2621441,2686977,2818049,3145729,3211265,3670017,3735553,4128769,4521985,4587521,4980737,5177345,6291457,6356993,6553601,7208961,7536641,8716289,8978433,24576001,24707073,30212097,36110337,36831233,40763393,57147393,58195969,58261505,58327041,58392577,58916865,59375617,59834369,60096513,60162049,60227585,60293121,60424193,60751873,60817409,60882945,61014017,61407233,61538305,61603841],"totalheapsizeexecutable":[39911425,49479684,59244545],"treated":[44433409,50659329],"thread":[2293763,2949124,4784132,6291458,6356994,6553602,6881284,7471105,7536642,7929857,8716290,8978434,9240577,17104897,17956865,18546689,19726337,20971521,21299201,26279937,26869761,28770305,30277633,30474242,31260674,31522817,31784961,31916033,32309249,32505858,32636930,33161217,33226754,33685505,33947650,34144257,34734081,35520514,35454977,36306945,37224449,38010881,38207489,38600706,38862852,39649282,40566785,41746434,44367873,44695553,45088769,45613057,52494339,57016325,57999361,58195969,58392579,58720262,59047939,60096515,60817411,60882947,61079556,61407237,61538309,61603845],"tracked":[50200577,53936129],"tkey":[2752517,16121858,17039362,17694722,19595266,42663937,43253761,46858242,49152002,57540615],"typeof":[3407874,5046274,10878984,13565960,36175874,45154306,51314690,58785794,59768834],"typename":[5242881,7077889,7602177,8257537,8912897,9043969,9240577,9306113,9830401,9895937,10223617,10354689,10616833,10878977,11141121,12124165,12255233,12517381,13041669,13303809,13500421,13697029,13959169,14286853,15794177,16580609,17104897,17825793,18546689,19136518,19333121,19922950,22609921,23199750,23396353,24248326,31260673,31326209,33947649,55836673,57212929,57933825,60751873],"trycatch":[3407873,5046273,12910597,58785793,59768833],"tostring":[1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3080193,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866626,3932161,3997697,4063233,4259841,4325377,4390914,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111810,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798786,8716289,8978433,12910593,18677765,22544389,24379397,27197441,30801925,30867457,31653893,32112641,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492034,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654722,58720257,58785793,58851329,58982401,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555266,60817409,60882945,61407233,61472770,61538305,61603841],"trysetindex":[3014657,4521985,55705601,60227585],"test":[8912898,9175042,9764865],"text":[3604481,17367041,20316161,23724034,28246017,38010881,43778049,53673985,60489729],"textwriter":[23724037],"thrown":[12910593,16384001,22675457,38010882,39845889,41025537,42729473,43646977,44892161,45744131,46006273,46202883,46727169,48365572,48627713,49545217,50135041,58458116,58654724,58982404,61145090],"tunneling":[39059457,40632321,41353217,42074113,42205185,43909121,44957697,45088769,45219841,46268417,47775745,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"typ":[8126465,8454145,9437185,12713986,13041665,13500417,13697025,14286849,14483457,15007745,15138817,15269889,19136513,19922945,20709377,21037057,21430273,21889026,23199745,24248321,25100289,44433409,50659329],"tcp":[25231361,26214401,26804225,27590657,27656194,28835841,28901377,29163521,29425665,29622274,29884417,30015489,39387137,55181313,58851329],"timers":[61145089],"totalheapsize":[39911425,49086468,59244545],"terminates":[45678593,50200577,51904513,53936129],"tryinvoke":[3014657,4521985,55705601,60227585]} \ No newline at end of file +{"truthy":[9895937,31391747,59113473,68681730,76349441,77529089],"tasks":[2097153,2752513,2818049,3276801,3473409,3735553,3997697,4063233,4259841,4390913,5373953,5570561,5963777,7077889,8716289,9306113,9502721,9830401,11010049,11206657,11403265,24510465,25296897,46465025,51904513,56164353,56623105,70320129,72744961,73138177,74645505,75104257,75366401,75497473,76087297,76283905,77135873,77856769,78184449,78512129,79495169,79953921,80084993,80281601,80936961,81002497,81068033,81199105,81264641],"terminates":[58982401,65601537,71041025,72220673],"toint64":[3538945,4521985,15204357,75956225,77987841],"trygetvalue":[1966081,2883585,3080193,3211265,13959169,17498118,71368705,74121217,75628545,76414977],"typeof":[3538946,4521986,11862024,19005448,49479682,57278466,63963138,75956226,77987842],"totask":[3670017,20054020,78774273],"tresult":[2818052,3276804,3473412,3670020,3997700,4390916,14876688,16973840,17956865,19136528,19398657,22020112,25231361,26935297,46202884,49938436,54263812,73138180,74645508,75497476,76939265,77135876,78184452,78774276],"try":[458753,851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,9895937,15990786,17498113,27525121,27918337,28246017,28508161,28704769,28770305,28835841,29491201,29556737,29949953,30081025,30212097,30343169,30408705,30474241,30605313,30867457,31129601,31195137,31260673,31326209,31588353,31784961,31850497,31916033,32571393,32702465,32964609,33030145,33095681,33357825,33816577,33947649,34340865,34537473,34603009,35586049,35848193,51052545,54067201,61603841,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75169793,75366401,75431937,75628545,75759617,75956225,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,80019457,80084993,80216065,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81330177],"timespan":[68354055,72810503,75038721],"termination":[71041026,71827457,72220674,73400321,77791234],"tobyte":[3538945,4521985,12386309,75956225,77987841],"tryinvokemember":[3342337,5963777,80084993,80543745],"trailing":[56229889,66453505,67698689],"table":[16711681,18219009,23199745,26542081,54657025,67895300,69992449,78184449,80412675],"tunneling":[57737217,58130433,60293121,61407233,62062593,62193665,63045633,64684033,65273857,67567617,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"typ":[8454145,8978433,10354689,14286849,14352385,14417922,15335425,15466497,15794177,15925249,17760257,20381698,20512769,21692417,22544385,24117249,24903681,26017793,26476545,27066369,27983873,56033281,62717953],"trygetindex":[3342337,5963777,80084993,80543745],"thrown":[15990785,20709377,27262977,45547522,58327041,58458113,59965441,60358659,60555265,60948481,62455812,62980099,63176705,68812801,70647809,71106561,72548356,73793537,76939266,78905348,78970884],"trygetmember":[3342337,5963777,80084993,80543745],"tryget":[7340051,9895955,27525125,27918341,28246021,28508165,28704773,28770309,28835845,29491205,29556741,29949957,30081029,30212101,30343173,30408709,30474245,30605317,30867461,31129605,31195141,31260677,31326213,31588357,31784965,31850501,31916037,32571397,32702469,32964613,33030149,33095685,33357829,33816581,33947653,34340869,34537477,34603013,35586053,35848197,51052563,54067219,76349459,77529107],"tkey":[3211269,17498114,18939906,19529730,19791874,58589186,60686338,63242241,65732609,76414983],"typedarray":[69861377],"takes":[2818050,3276802,3473410,3997698,4390914,14876673,18874369,19136513,20905985,46202882,49938434,73138178,74645506,75497474,77135874,78184450],"trace":[15663106,23658498,48955394,52428802],"trycatch":[3538945,4521985,15990789,75956225,77987841],"tracked":[71041025,72220673],"time":[29294593,29556737,29818881,31588353,42008577,59834370,60293122,61734913,61931521,64880641,68354049,69599233,71565313,72744962,72810497,74055681,75366402,76087298,76611585,76939265,77070337,80412674],"throw":[3735553,5373953,8716289,9306113,9502721,9830401,11010049,11206657,11403265,17104897,25886721,37879809,50135041,75104257,76087297,77791234,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"toarray":[4390913,7995393,8585217,8978433,9109505,11075585,19595268,78184449],"threw":[15990785],"typelibenums":[4521985,7929860,75956225],"touint32":[3538945,4521985,12517381,75956225,77987841],"tochar":[3538945,4521985,12124165,75956225,77987841],"true":[6291457,6356993,6422529,7143425,7208961,8519682,9568257,9961473,10289153,10616833,11665410,11993089,13041665,15269889,15532033,15990786,16121857,17498113,17629185,18219009,18939905,19333121,19660801,19791873,20840449,20971521,21430274,21954561,22675457,23789569,24444929,24838145,25559041,26411009,26542081,26673153,26804225,27000833,27328513,27459585,27525121,27590657,27918337,28246017,28377089,28508161,28704769,28770305,28835841,28901377,29491201,29556737,29949953,30081025,30212097,30343169,30408705,30474241,30605313,30867457,31129601,31195137,31260673,31326209,31391745,31588353,31784961,31850497,31916033,31981570,32571393,32702465,32964609,33030145,33095681,33226753,33357825,33488897,33816577,33947649,34340865,34537473,34603009,35389441,35520513,35586049,35848193,36241409,36372481,36634625,37289985,37945345,38273025,39190529,39387137,39518209,39780353,40239105,40501249,41156609,41353218,41746433,42467329,42926081,43515905,43581441,44171265,44433409,46333954,46989314,49741825,52625409,56229889,56360961,56688642,57278465,58523650,58916865,60817409,61669378,62062593,62849025,63963137,64159746,64290817,64421889,66387969,66453505,66650114,67567617,67698689,67764226,68878337,72679425,73924609,74448897,75235330,75563009,76611585,79822849],"tree":[49545217,53805057,57540609,65142785,67436545,71761921,80019457,80347137],"titem":[5767172,37617675,37814283,47775746,49610754,75431940],"trydeletemember":[3342337,5963777,80084993,80543745],"toint32":[3538945,4521985,11730949,75956225,77987841],"todecimal":[3538945,4521985,13893637,75956225,77987841],"temporary":[78118913],"tryconvert":[3342337,5963777,80084993,80543745],"total":[55246853,66191362,66977794,68747266,69730306,70975489,73859074,77398021],"torestrictedhostobject":[2490372,8192005,8323077,10092549,10420229,52166660,76677124],"test":[9568257,9961474,10616834],"text":[6160385,15663105,23658497,43188226,45547521,48955393,52428801,80019457,80674817],"toasyncenumerable":[3670017,18808836,78774273],"tryfunc":[15990792],"times":[393217,13303809,38273025,39387137,40042497,41418753,43122689,43515905,44302337,45875201,49217537,49545217,50987009,54460417,57016321,66715649,71172097],"typeid":[53542913,56492033,57671681,65863681,66781185,68157441,73990145,74842113,75038721,75759617,79167489,80216065],"tostatictype":[3538945,4521985,11272196,75956225,77987841],"totalphysicalsize":[55246849,69730308,77398017],"trysetmember":[3342337,5963777,80084993,80543745],"tcp":[38731777,39256065,39649281,40304641,40828930,42336257,43778049,44498945,44892161,45481986,49086465,50921473,61800449,71696385,76546049],"tohosttype":[2490370,8060933,8781829,50397186,76677122],"typeargs":[11599877,12713989,14352389,15925253,17760261,20512773,21692422,22544390,24117254,24903686],"throws":[10223617,10747905,11862017,15990785,19005441,25624577,26279937,26869761,27656193,27787265,27852801,28442625,28573697,29032449,29097985,29229057,29294593,29425665,29622273,29818881,29884417,30015489,30146561,30277633,30670849,30736385,30801921,30932993,30998529,31064065,31719425,31981569,32047105,32112641,32178177,32309249,32374785,32440321,32768001,32833537,34078721,34209793,34275329,35651585,39780353,58982401,60358657,62980097,65601537,72548353,78970881],"topic":[196609],"toint16":[3538945,4521985,12845061,75956225,77987841],"tfunction":[5111811,31457290,34013188,34734090,35782666,36110340,36765700,36962308,38469642,50069526,51707905,76742657,80478244],"treated":[56033281,62717953],"tostring":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014658,3080193,3145729,3342337,3407874,3538945,3604481,3866625,3932162,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177346,5242881,5308417,5373953,5439489,5636098,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,15990785,21299205,24576005,26083333,40697861,41484293,45613057,49283073,51380225,68943873,70909953,71172097,71368705,71761921,72417281,72548354,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708738,78839809,78970882,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871426,81002497,81068033,81264641,81330178],"totalavailablesize":[55246849,73859076,77398017],"tryinvoke":[3342337,5963777,80084993,80543745],"totalexternalsize":[55246849,66191364,77398017],"todouble":[3538945,4521985,10551301,75956225,77987841],"toenumerable":[3670017,19922948,78774273],"trysetindex":[3342337,5963777,80084993,80543745],"timers":[76939265],"trycreateinstance":[3342337,5963777,80084993,80543745],"touint64":[3538945,4521985,14221317,75956225,77987841],"timestamp":[53805058,57540610,68550663,70189059,71434243,71761922,80019458],"targ":[2818054,3276806,3473414,3997702,4390918,14876689,18874385,19136529,20906001,46202886,49938438,73138182,74645510,75497478,77135878,78184454],"topromise":[3670024,17039365,17170437,17956869,18415621,19398661,21233669,25231365,26935301,54263816,78774280],"tib":[64094209,66584577,67829761,69402625],"targetsite":[57278465,60358657,62980097,63963137,72548353,78970881],"textwriter":[43188229],"tmethod":[3866627,34471946,39845892,43450378,44957700,51707905,53739532,72417306,76742657],"tosingle":[3538945,4521985,12910597,75956225,77987841],"totalheapsizeexecutable":[55246849,68747268,77398017],"trydeleteindex":[3342337,5963777,80084993,80543745],"typename":[6356993,7733249,7929857,8323073,8585217,8912897,9961473,10158081,10223617,10420225,10747905,10878977,11075585,11599877,11665409,11862017,12713989,13959169,14352389,14876674,15925253,16973825,17760261,17891329,17956865,18874369,19136514,19398657,20250625,20512773,20905985,21102593,21692422,22020097,22544390,22609921,24117254,24903686,25231361,26935297,27787265,30474241,30605313,30932993,31850497,32178177,32768001,33882113,34603009,37617665,37814273,38862849,40566785,41615361,42139649,43712513,44630017,51118081,54591489,70909953,72417282,73531393,74514433,75431937,75890689,76742657,77266945,78053377,78184449,78249985,78577665,78643201,79036418,80478209,80609281],"tfield":[5767176,33882123,41615371,43712523,51118091,51707905,62652420,64618500,75431944,79036426],"typo":[61603841],"tojson":[6160385,41549828,80019457],"type":[131073,589825,262145,720897,851971,1048577,1179649,1245185,1310721,1376258,1441793,1507329,1572865,1638403,1703938,1769474,1835010,1900546,1966082,2031618,2097153,2162690,2228226,2293762,2424833,2490383,2555906,2621442,2686978,2752513,2818049,2883606,2949122,3014658,3080194,3145730,3211265,3276801,3342340,3407874,3473409,3538970,3604482,3670017,3735585,3801089,3866626,3932162,3997697,4063233,4128770,4194306,4259841,4325378,4390913,4456449,4522023,4587522,4653058,4718595,4784129,4849666,4915205,4980737,5046274,5111810,5177346,5242882,5308418,5373986,5439490,5570561,5636098,5701634,5767170,5963780,5898241,6094850,6160386,6356999,6488065,6553602,6946818,7077890,7340039,7733256,7864322,7929864,7995400,8060947,8192016,8323077,8388609,8454170,8585225,8716322,8781844,8847364,8912903,8978451,9109508,9175043,9240577,9306146,9502754,9568262,9830434,9895943,9961480,10092560,10158086,10223622,10354707,10420229,10551303,10747911,10878985,10944517,11010082,11075594,11206690,11272198,11337730,11403298,11468812,11534338,11599887,11665416,11730951,11796482,11862034,11927559,12058640,12124167,12255234,12320769,12386311,12451848,12517383,12713997,12845063,12910599,12976130,13107202,13369352,13434883,13565960,13631495,13697027,13762568,13828099,13893639,13959177,14221319,14286866,14352399,14417928,14811138,14876675,15073282,15138818,15204359,15335442,15466514,15597570,15794194,15925265,15990788,16711687,16973826,17039361,17170433,17235971,17760273,17891331,17956867,18219010,18415617,18808833,18874370,19005458,19136515,19202050,19398659,19922945,19988482,20054017,20250627,20316163,20381706,20512783,20578307,20905986,21102595,21233665,21692435,22020098,22151169,22216706,22478851,22544403,22609923,23199751,23396354,23527426,23592963,24051713,24117265,24903697,25100290,25165827,25231363,25952258,26017813,26476565,26542082,26935299,27066389,27394049,27787268,27983893,28311554,28966913,30474244,30605316,30932996,31850500,32178180,32768004,33882114,34603012,37617666,37814274,38862852,40566788,41615362,42139650,43646981,43712514,43974664,44630018,45154306,45547527,46596097,46923782,47710216,48562185,49479687,50397191,50462727,50855959,51052546,51118082,51183624,51445762,51838990,52035586,52166664,52690945,52756481,52887553,53084161,53280769,53542914,53608449,53805057,53936129,54001665,54067202,54394881,54525953,54591490,54657025,54722583,55246849,55377922,55574529,55640065,55705602,55902209,56033288,56360963,56426497,56492033,56557569,56688641,56819713,56885249,57540609,57606145,57671682,57737219,58130435,58261505,58523650,58589185,58916865,59113473,59244545,59375617,59834369,60227585,60293123,60358657,60751873,60817410,61014017,61210625,61276161,61407235,61538305,61800449,61997057,62193667,62455809,62717961,62783489,62849027,62980097,63045635,63373313,63700993,63897601,64159746,64290817,64356353,64421889,64684035,65077250,65273859,65470465,65863684,66387970,66650113,66781186,67633153,68157442,68878337,68943875,69337089,69533699,69861377,69992450,70320130,70582273,70909957,71172099,71303170,71368707,71499777,71761923,71958530,72024066,72417286,72548355,72613891,72679425,72744961,73138178,73269250,73531397,73990150,74121250,74317826,74514437,74645506,74711044,74842117,74973186,75038723,75104293,75169795,75235329,75300866,75366403,75431942,75497474,75628547,75694082,75759622,75890691,75956264,76021765,76087333,76152835,76283906,76349448,76414978,76480515,76546051,76677136,76742661,76808194,76873729,76939267,77004801,77135874,77201410,77266950,77332483,77398019,77529096,77594626,77660161,77725697,77791233,77856805,77987867,78053379,78118913,78184452,78249989,78446593,78512164,78577670,78643203,78708739,78774274,78839812,78905346,78970883,79036420,79101954,79167495,79233025,79298561,79364102,79429636,79495170,79560705,79626243,79691779,79757313,79822849,79888387,79953957,80019459,80084997,80150529,80216069,80281637,80347139,80412679,80478213,80543749,80609283,80674819,80740356,80805891,80871427,80936962,81002533,81068069,81133570,81199106,81264677,81330180],"title":[65537],"template":[77266945,78577665],"target":[3014657,3407873,8192005,8323077,9633797,9699333,10027013,10092549,10289157,10420229,10485765,10813445,11141125,11993093,12779525,13041669,14024709,16711685,17891333,19726337,20250629,21102598,22151169,22609926,23199750,23396354,24051713,24379398,24707073,25165827,25952258,27394049,28311554,28966913,34471941,39845893,43450373,44957701,45547524,53542913,63373313,63700993,65077250,65863683,68157441,72548353,74842114,75038721,78970881,79167492,80216066],"tvalue":[3211268,17498114,18939905,19529730,19791873,58589186,60686337,63242241,65732609,76414982],"timestamps":[68550657,70189057,71434241],"tryunaryoperation":[3342337,5963777,80084993,80543745],"typed":[3538957,4390917,4521997,8388609,10551298,10747907,10944513,11075585,11730946,11927554,12124162,12386306,12517378,12845058,12910594,13631490,13893634,13959169,14221314,15204354,16777218,16908290,18743298,19595266,22282242,48103426,50266114,51249154,62783489,64356353,65929217,69861377,75956237,76939265,77135874,77987853,78184458,79233025],"types":[2883588,3735553,4521986,5373953,7995398,8388609,8454146,8716289,8978434,9109509,9306113,9502721,9568258,9830401,10354690,10747905,10551297,11010049,11206657,11403265,11468802,11534338,11665409,11730945,11796482,11927553,12124161,12386305,12451843,12517377,12845057,12910593,12976130,13369347,13565955,13631489,13762563,13893633,14155777,14221313,14286850,14352386,14417930,15138818,15204353,15335426,15466498,15728641,15794178,15925250,15990785,16711681,17760258,18022401,18219014,19005442,19464193,19857409,20381707,20512770,21037057,21364737,21692418,22544386,22872065,23199745,24117250,24313857,24903682,25427969,26017794,26476546,26542086,26738689,27066370,27983874,28639233,43974660,45088769,45547523,46596098,48103425,49545217,50462724,51707905,52232193,53673985,57737218,58130434,58523650,60293122,60817412,61407234,62193666,62259201,62324737,63045634,64159746,64684034,65273858,66387972,67043329,69533698,72286209,74121227,74776582,74842113,75038721,75104259,75956227,76087299,77856771,78512131,79953923,80216065,80281603,80412673,81002499,81068035,81264643],"token":[62980097,72548353],"touint16":[3538945,4521985,13631493,75956225,77987841],"tas":[9043969,10682369,17039361,17170433,17956866,18415617,19398658,21233665,25231362,26935298],"tosbyte":[3538945,4521985,11927557,75956225,77987841],"tobject":[3866629,4325380,5111810,5242884,5439492,5701637,5767198,6946818,30539778,31522818,32636930,33161219,33226754,33423370,33619990,33685506,33882120,34406408,34471952,34668558,34996227,35127312,35323912,35454978,35913738,36503562,36634626,37158926,37617674,37814282,38010882,38600726,38666254,38928392,38993923,39321609,39845904,39911438,39976969,40370192,41091076,41615368,43384842,43450384,43712520,44957712,45285384,46727170,46792712,47775750,49610760,49872904,50200583,51118088,51707915,52690947,53739538,55181314,56754196,57802754,58654728,58851330,61210627,62652424,64618502,66322434,67371010,69074946,72417310,74514474,75431976,75890701,76742674,77266965,78053388,78577689,78643212,79036428,79626242,80478210,80609292],"top":[393217,131073,589825,262145,720897,851969,1048577,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3407873,3342337,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4653057,4587521,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5570561,5636097,5701633,5963777,5898241,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9240577,9306113,9502721,9830401,9895937,11010049,11206657,11403265,12320769,43646977,43909121,43974657,44105729,44695553,44826625,45154305,45350913,45678593,45940737,46006273,46071809,46202881,46268417,46399489,46596097,46661633,46727169,46923777,47382529,47448065,47579137,47710209,47775745,47841281,47906817,47972353,48168961,48300033,48431105,48496641,48562177,48627713,48693249,48758785,48824321,49020929,49152001,49348609,49479681,49610753,49676289,49938433,50003969,50069505,50200577,50266113,50397185,50462721,50855937,51052545,51183617,51249153,51314689,51445761,51576833,51642369,51773441,51838977,51904513,52035585,52166657,52363265,52494337,52690945,52756481,52822017,52887553,53018625,53084161,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53739521,53805057,53870593,53936129,54001665,54067201,54263809,54329345,54394881,54525953,54657025,54722561,54788097,54853633,55050241,55115777,55181313,55246849,55312385,55377921,55443457,55574529,55640065,55705601,55836673,55902209,55967745,56098817,56164353,56295425,56426497,56492033,56557569,56623105,56754177,56819713,56885249,57081857,57212929,57409537,57540609,57606145,57671681,57737217,57802753,57933825,58064897,58130433,58261505,58589185,58654721,58720257,58851329,59047937,59113473,59244545,59375617,59834369,60227585,60293121,60358657,60424193,60751873,61014017,61210625,61276162,61407233,61538305,61603841,61800449,61997057,62193665,62455809,62652417,62783489,62980097,63045633,63897601,64356353,64618497,64684033,65273857,65470465,65863681,66715649,66781185,67633153,68157441,68943873,69533697,69992449,70320129,70582273,70909953,71172098,71303170,71368708,71761922,71958529,72024065,72417282,72548356,72613889,72744961,73138178,73269249,73531393,73990147,74121220,74317825,74514434,74645506,74711043,74842115,74973185,75038723,75104259,75169795,75300865,75366404,75431939,75497474,75628548,75694081,75759619,75956226,76087299,76152835,76283906,76349442,76414978,76480515,76546050,76611592,76677121,76742658,76808193,76873729,77135874,77201410,77266946,77332482,77398018,77529090,77594625,77856771,77987842,78184450,78249986,78512130,78577667,78708738,78774273,78839811,78905345,78970884,79101953,79167491,79364098,79495170,79626242,79691779,79888387,79953923,80019458,80084994,80216067,80281603,80347138,80478210,80543746,80674819,80740354,80805890,80871426,80936961,81002499,81068035,81133570,81199106,81264643,81330178],"totalheapsize":[55246849,66977796,77398017],"task":[3670025,9043974,10682375,17039374,17170434,17956866,18415618,19398670,20054026,21233678,25231374,26935298,28377089,54263816,69337094,76939267,78774281],"thread":[2490371,3670020,5898244,6553604,8060929,8192001,8323073,8716290,9306114,9502722,9830402,11206658,11403266,17104897,18415617,19398657,21233665,25886721,26935297,36700161,37879809,38404097,39714817,40632322,41156610,41943041,42139650,42270721,42860546,42926082,43319297,44630018,45219841,45547521,46333954,47251457,47644673,48758786,48889857,50135041,50331649,50397185,50790401,52166658,52297729,52559873,53149697,53477378,53673985,54263812,54919169,58130433,68419587,71368705,75104261,76087299,76677123,77856769,78774276,79101957,79953925,80281603,80805894,81002499,81068035,81264645],"trybinaryoperation":[3342337,5963777,80084993,80543745],"third":[10944513,11075585],"touppercase":[11075585]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_117.json b/docs/Reference/fti/FTI_117.json index 6d17a1b1a..db0835b47 100644 --- a/docs/Reference/fti/FTI_117.json +++ b/docs/Reference/fti/FTI_117.json @@ -1 +1 @@ -{"usedheapsize":[39911425,50331652,59244545],"underlying":[5177345,31195139,37814274,38797314,40239106,41156610,44040193,44564481,59834370,60162050,60424194,60751874,60817409,61014017],"useful":[8388609,9306113,9568257,9699329,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12255233,12582913,43057153,46333953,46465025,49610753,50790401,51052545],"usable":[24444929,24969217,25493505,25559041,25821185,26017793,26083329,26542081,26607617,26935297,27525121,28311553,28704769,28966913,29491201,29556737,29949953,30736385,30998529,31391745,32178177,33095681,34930689,35848193],"updating":[4980742,7208966,24969217,25493505,26083329,26542081,26607617,26935297,28311553,29491201,29949953,30736385,32178177,35192835,35848193,36372483,38666243,39714819,58261510,60817414],"uri":[1835010,1966081,5505038,5767181,6094850,6029314,6225922,6422542,6488066,7274498,10616838,40304643,41877506,51576837,52232201,52625421,53084161,58523650],"url":[37617665,41943041,55115777,57868289],"updatefailed":[60686337],"unpredictably":[58720257],"unchecked":[50724865,54460417],"utility":[38010882,55836673,58785793,59768833],"unary":[3014657,4521985,55705601,60227585],"uses":[7143425,8060929,8126465,8323073,8650753,9437185,12713985,12910593,15138817,15269889,21037057,21430273,21889025,47906817,54001665,60817409,61669377],"using":[6815745,7405569,7864321,8847361,10616833,11141121,12255233,30539777,57540609],"urit":[10616834],"unspecified":[13631489,23789569,50266113,50855937,52756481],"usage":[2555905,4849665,4980737,5570561,5636097,7208961,7471105,7929857,7995393,8585217,9240577,9895937,16252929,17104897,17825793,18153473,18546689,19005441,19333121,19726337,20054017,20512769,21299201,25427969,25886721,26345474,27787266,37552129,38928385,39321601,41418753,43974657,45416449,47382529,47972353,50200577,50724868,53936129,54460420,57606145,58261505,59113473,59244545,60030977,60358657,60817409],"unlimited":[6029313,6488065,7274497],"ushort":[60751873],"unlike":[60817409],"usually":[9109505,9633793,10747905,11534337],"universal":[16252929,18546689,19333121,21299201,61145089],"undefined":[393220,1114120,3866627,13631491,14221313,21757953,22544388,23789571,38010882,39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47775745,49610753,50528260,50790401,51838980,58195969,58327041,58392577,60096513,60555274,60817409,60882945,61407233,61472769,61538305,61603841],"utc":[61145090],"uriformat":[10616833],"used":[3014657,3407878,4063233,4521985,4587521,5046278,6291457,6356993,6553601,7208961,7536641,7995393,8585217,8716289,8978433,9764866,9895937,10092546,10223618,10878978,11141122,11730945,13303809,13565954,13631489,13959169,14548993,16187393,16252929,16908289,17825793,18874369,19333121,20512769,22151169,22609921,22740993,23068673,23396353,23789569,23920641,24641537,24969217,25362434,26411009,26673153,26738689,27066369,27459585,27590657,27983873,28049409,28180481,28377089,28508161,28573697,28639233,28901377,28966913,29097985,29163521,29294593,29425665,29622273,29884417,29949953,30146561,30343169,30539777,31129601,31391745,31850497,31981569,33161217,33554433,33685505,33751042,34013185,34275329,34734081,34865154,35127297,36044801,36110337,36175874,36306945,36569089,36831233,37224449,37486593,37879810,38207489,38273025,38469633,39059457,39190529,39911425,40632321,40763393,41549826,42074113,42205185,43122689,43909121,44957697,45023233,45088769,45613057,45678593,46268417,47251457,47775745,50331650,51904513,55705601,55836673,58195970,58327041,58392579,58720257,58785798,59244545,59703297,59768838,60096515,60227585,60686337,60817410,60882947,61145089,61407234,61538306,61603842],"unless":[19791873],"unique":[38928385,42008577,42598401,46137345,46923777,47972353,53477377,54722561,55312385,57475073,59113473,59506689,60358657],"unidirectional":[61145089],"unit":[4915201,5308417,5636097,5701633,5963780,6619137,6684676,6815745,7340033,7405569,7667713,7733250,7864321,8192001,8781825,8847361,10223617,10813441,10878977,10944513,11010049,11403265,11468801,11862017,11927553,11993089,12124161,12320769,12451841,12517377,12648449,12713985,12845057,12976129,13041665,13107201,13238273,13303809,13369345,13434881,13500417,13697025,13762561,13828097,13959169,14024705,14090241,14155777,14286849,14352385,14417921,14483457,14680065,14876673,14942209,15007745,15138817,15204353,15269889,15466497,15597569,15728641,15925249,16121858,16187393,16515074,16449537,16777217,16842754,16908289,17170433,17235970,17367041,17563649,17760258,17891329,17956866,18022401,18087938,18350081,18415618,18481153,18612226,18677762,18743298,18808833,18874370,18939906,19070978,19136514,19202049,19267585,19398658,19660802,19791876,19922946,19988482,20119554,20185089,20250626,20316161,20578305,20643842,20709378,20774914,20840449,20971522,21037058,21102594,21168129,21364738,21430274,21495810,21823490,21889026,22216706,22413314,22478850,22544386,22609922,22937601,23068674,23134209,23199746,23265282,23330817,23396354,23658498,23724033,23920642,23986177,24182785,24248322,24313857,24379394,24576004,24707074,24903681,25100290,25427969,25952257,26148866,26279938,26345473,26476545,26869762,27000833,27262978,27328513,27787265,27918338,28246018,28770308,29229057,29818881,30212100,30277634,30474242,30539778,30605313,30801922,31195137,31653890,31916036,32243713,32636929,32702465,33226753,35520514,38273026,41746433,42467330,43122690,43778050,44367876,44695554,52166657,58064897],"unconditionally":[50200577,53936129],"useasyncloadcallback":[59572225],"usecaseinsensitivememberbinding":[61145089],"updated":[24969217,25493505,26083329,26542081,26607617,26935297,28311553,29491201,29949953,30736385,32178177,35848193,60686338],"unrecoverable":[50200577,50724865,53936129,54460417],"ulong":[1179650,16056328,16711688,17301512,17432584,17498120,18219016,44564482,44826626,45350914,46989314,49086466,49479682,49872898,50266114,50331650,50855938,52101122,52756482,55640066,56033282,56164354,56557570,57475074,60751873],"usesynchronizationcontexts":[61145089],"uint":[10682369,11665409,12582913,39583745,43384833,45023233,50987009,55574529,60751873],"unmanaged":[2621441,2686977,2818049,3145729,3211265,3670017,3735553,4128769,4521985,4587523,4980737,5177346,6291459,6356995,6553603,7208963,7536643,8716291,8978435,18874371,19791873,24576001,24707073,30212097,31195138,36110338,36831234,38273027,40763394,43122691,46071809,58195971,58261505,58327041,58392579,58916865,59375617,59834369,60096515,60162049,60227585,60293121,60424193,60751873,60817411,60882947,61014018,61407235,61538307,61603843],"usereflectionbindfallback":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,46333958,47775745,47906817,51052548,54001665,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"unusable":[30539777],"uinteger":[39583745,43384833,45023233,50987009,55574529],"unescaped":[10616833],"urls":[41222145,43843585,53870593],"user":[13631490,14548994,15466497,15532033,16187394,16908290,22151169,22216705,22740993,22806529,23068674,23789570,23920642,24641538,24969217,25362433,26673153,26738689,27459585,27590657,28180481,28508161,28639233,28901377,28966913,29097985,29163521,29425665,29622273,29884417,29949953,30146561,31129601,31391745,31850497,33161217,33554433,33685505,34275329,34734081,35127297,36044801,36306945,36569089,37224449,37486593,37879809,38207489,38469633,39190529,39976961,45613057,45744129,58654721,60948481],"uricomponents":[10616833],"unsigned":[1179649,16056324,16711685,17301508,17432581,17498117,18022401,18219013,18481153,24444929,24969217,25362433,25493505,25559041,25821185,26017793,26083329,26411009,26542081,26607617,26935297,27066369,27525121,27983873,28049409,28311553,28377089,28573697,28704769,28966913,29294593,29491201,29556737,29949953,30343169,30736385,30998529,31391745,31981569,32178177,33095681,34013185,34930689,35848193,37879809,39583747,43384835,44564482,44826626,45023235,45350914,46989314,49086466,49479682,49872898,50266114,50331650,50855938,50987011,52101123,52756482,55574531,55640066,56033282,56164354,56557570,57475075],"uriformatt":[10616834],"undefinedimportvalue":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47775745,50528260,51838982,58195969,58327041,58392577,60096513,60555265,60817409,60882945,61407233,61538305,61603841],"unknown":[44761089,50528257,51838977,60555265,61341698],"uricomponentst":[10616836],"uintptr":[50200583,50724871,53936135,54460423],"uwp":[16252929,18546689,19333121,21299201],"useassemblytable":[45416449,47382532,60030977]} \ No newline at end of file +{"unless":[21757953,79233025],"unique":[53542913,56492033,57671681,65863681,66781185,68157441,71892993,73990145,74842113,75038721,75759617,77266945,78577665,79167489,80216065],"uinteger":[29622273,30408705,32309249,35586049,36306945,54198273,57344001,69468161,71565313,74055681],"usable":[36044801,36175873,37552129,37748737,38076417,38207489,40042497,40108033,40435713,42401793,43122689,44040193,45744129,45875201,46858241,47513601,48037889,48365569,49217537,49807361,50987009,51970049,54460417,54984705],"uint32array":[78184449],"uint":[12517377,13631489,14221313,16449539,16646147,16777219,16842755,16908291,18153475,18677763,18743299,20185091,21168131,22282243,23986179,27852801,28246017,28770305,29622274,30277633,30408706,30801921,30998529,31916033,32309250,34537473,34865153,35586050,36306946,37421057,54198273,57344001,69468161,71565313,74055681,78184449],"unlimited":[7405569,9043969,10682369],"unit":[5505025,5832705,6029316,6619137,6684673,6750209,6815745,6881281,7012353,7274497,7471106,8126465,8257540,8650753,9371649,11534337,11599873,11665409,11796481,11862017,12058625,12189697,12255233,12451841,12582913,12648449,12713985,13172737,13238273,13303809,13434881,13500417,13565953,13697025,13828097,14024705,14090241,14286849,14352385,14417921,14483457,14548993,14614529,14745601,14811137,14942209,15073281,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15794177,15859713,15925249,16187393,16318465,16384001,16515073,16711681,17104898,17235969,17301505,17367041,17432577,17760257,17825793,17891329,18087938,18284546,18350081,18481153,18546690,18612225,18874369,19070977,19202049,19529730,19595265,19726338,19988482,20119554,20250625,20316162,20381698,20447233,20512769,20578306,20774914,20905985,21102594,21299202,21430274,21495810,21561346,21626882,21692418,21757956,21823489,21889026,22216706,22347777,22478850,22544386,22609922,22806529,22937602,23068673,23134209,23199746,23265281,23461889,23527426,23592962,23658497,23855106,23920641,24117250,24182786,24379394,24444929,24510466,24576002,24641538,24707074,24838145,24903682,24969217,25034753,25100290,25559041,25296900,25821185,25886722,26017794,26083330,26148865,26214401,26345473,26476546,26607618,26804226,27000833,27066370,27131905,27197441,27983874,28377089,29163521,29360130,29687809,30539777,31522817,31653889,31981569,32636929,33161217,33292289,33423361,33685505,33751041,33882113,34144257,34406401,34668545,34865153,34930689,34996225,35323905,35454978,35717121,35913729,36306945,36503553,36569089,36700162,36831234,37093377,37158913,37224449,37421057,37486593,37617665,37683202,37814273,37879812,38010882,38338562,38404098,38666241,38797313,38862849,38928385,38993921,39059457,39124994,39190529,39321601,39452673,39583745,39780353,39911425,39976961,40501250,40566785,40632322,40697858,40763393,41091073,41156609,41222145,41353218,41484290,41549825,41615361,41746433,41811969,42008577,42663937,42795009,42860545,42926081,43188225,43319300,43712513,44171266,44236801,44367873,45285377,45416449,46137345,46333954,46465028,46792705,46989314,47120385,47185921,47644674,48955394,49872897,50135044,50724865,50790402,51118081,51511298,52428802,72679425,75890689,78053377,78643201,79298561,79822849,80609281],"uri":[2162689,2228226,6225933,6291458,7208962,7405570,7536654,7602190,9043970,10682370,10747910,44105730,61538307,67174409,69599245,75169794,78839813,79691777],"url":[56819713,61603841,64028673,80347137],"utility":[31981569,39780353,45547522,75956225,77987841,78249985],"unknown":[60096513,64815105,67305473,69861378,80871425],"unlike":[76087297],"unrecoverable":[71041025,71827457,72220673,73400321],"unsigned":[393217,14090241,16449541,16646149,16777220,16842757,16908292,17432577,18153477,18677765,18743300,20185093,21168133,22282244,23986181,27852801,28246017,28770305,28835841,29622273,30277633,30408705,30670849,30801921,30998529,31916033,32112641,32309249,34537473,34865153,35586049,35848193,36044801,36175873,36241409,36306945,36372481,37421057,37552129,37748737,37945345,38076417,38207489,38273025,38797313,39387137,39518209,40042497,40108033,40239105,40435713,42401793,43122689,43515905,43581441,44040193,44433409,45744129,45875201,46858241,47513601,48037889,48365569,49217537,49741825,49807361,50987009,51970049,52625409,54198275,54460417,54984705,57344003,58195970,59506690,61145090,65929218,66191362,66715650,66977794,68550658,68747266,69468163,69730306,70189058,70844418,71434242,71565315,71892995,72155139,73203714,73859074,74055683],"uint16array":[78184449],"unchecked":[71827457,73400321],"unary":[3342337,5963777,80084993,80543745],"utf8":[70057985],"uriformatt":[10747906],"uricomponentst":[10747908],"uint16":[3538945,4521985,4915202,7340035,9895939,13631494,27852804,28770308,30801924,34537476,34865156,51052546,51445762,54067202,75956225,76349443,77529091,77987841,79364098],"unspecified":[18219009,26542081,68550657,70189057,71434241],"uricomponents":[10747905],"usedheapsize":[55246849,70844420,77398017],"usually":[9633793,10485761,10813441,12779521],"unconditionally":[71041025,72220673],"used":[3342337,3538950,4587521,4521990,5373953,5963777,8716289,8781825,9306113,9502721,9568258,9830401,10092545,10420225,10878978,11010049,11206657,11272193,11403265,11468802,11665410,11862018,15269889,16384001,17039361,17170433,17891329,17956865,18219009,19005442,19464193,20250625,21102593,21430273,22085633,22609921,22740993,25231361,26542081,26804225,28639233,29360129,35258369,36241409,36372482,36896769,37027841,37945345,38273025,38731777,39387138,39518209,39649281,39714817,40239105,41287681,41353217,41680897,41943041,42205185,42270721,42401793,42532865,42991617,43515905,43581441,43646978,43778049,44040193,44302337,44433409,44498945,44761089,45219841,45481985,45875201,46530561,46923778,46989313,47316993,48234497,49086465,49217537,49479682,49741825,50331649,50528257,50593793,51511297,51904513,52101121,52297729,52625409,52953089,53149697,54132737,54198273,55246849,56164353,56623105,57737217,58130433,58982401,60293121,61407233,61734913,61931522,62193665,63045633,64684033,65273857,65601537,69533697,70844418,71172097,75104258,75431937,75956230,76087298,76939265,77398017,77856770,77987846,78249985,78512129,79757313,79953922,80084993,80281603,80543745,80805889,81002499,81068035,81264642],"useassemblytable":[54657025,67895300,69992449],"uint8clampedarray":[78184449],"urls":[52756481,55508993,79888385],"useful":[8388609,10551297,10944513,11075585,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,13959169,14221313,15204353,56688641,60817409,62128129,66387969,66650113,71237633],"uses":[7995393,8847361,8978433,9109505,9175041,10354689,14417921,15335425,15466497,15990785,20381697,26017793,27983873,58916865,64290817,76087297,77266945,78577665,80412673],"ushort":[27852802,28770306,30801922,34537474,34865154,78184449],"updated":[36175873,37552129,38207489,40108033,40435713,43122689,44040193,48037889,48365569,49217537,49807361,54460417,79757314],"unusable":[51511297],"urit":[10747906],"usereflectionbindfallback":[56688644,57737217,58130433,58916865,60293121,61407233,62193665,63045633,64290817,64684033,65273857,66650118,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"user":[15269890,15728641,16187393,16384002,18219010,19464194,22085633,22740993,22872065,23855105,26542082,26804226,28639234,29360130,35258369,36372481,36896769,37027841,38731777,39387137,39649281,39714817,41287681,41680897,41943041,42205185,42270721,42401793,42532865,42991617,43778049,44040193,44302337,44498945,44761089,45219841,45481985,45875201,46530561,47316993,48234497,49086465,49217537,50331649,50528257,50593793,52101121,52232193,52297729,52953089,53149697,54132737,60358657,62980097,72548353,78970881,81133569],"uriformat":[10747905],"uint64":[393218,2818060,3276812,3473420,3538945,3997708,4390936,4521985,4915202,7340035,9895939,14221318,16449544,16646152,16777224,16842760,16908296,18153480,18677768,18743304,20185096,21168136,22282248,23986184,28246020,30277636,30998532,31916036,37421060,44826630,47906822,49020934,50266118,51052546,51249158,51445762,53215238,54067202,58195970,59506690,61145090,65929218,66191362,66715650,66977794,68550658,68747266,69730306,70189058,70844418,71434242,71892994,72155138,73138188,73203714,73859074,74645516,75497484,75956225,76349443,77135884,77529091,77987841,78184472,79364098],"universal":[76939265],"undefinedimportvalue":[57737217,58130433,60293121,61407233,62193665,63045633,64684033,64815110,65273857,67305476,69533697,75104257,76087297,77856769,78512129,79953921,80281601,80871425,81002497,81068033,81264641],"uint8array":[78184449],"uintptr":[71041031,71827463,72220679,73400327],"unescaped":[10747905],"updating":[7077894,11010054,36175873,37552129,38207489,40108033,40435713,43122689,44040193,48037889,48365569,49217537,49807361,50003971,51642371,54460417,54853635,57212931,75366406,76087302],"unassigned":[60162049,64552961],"underlying":[4915201,5570561,7340034,9895938,27787267,30474243,30932995,34603011,38862851,42663939,51052545,51445761,54067201,56885250,58195969,59244546,62783490,64356354,66846721,74645506,75497474,76087297,76349442,77135874,77529090,78184450,79364097,81199105],"utc":[76939266],"updatefailed":[79757313],"uint32":[3538945,4521985,4915202,7340035,9895939,12517382,29622276,30408708,32309252,35586052,36306948,51052546,51445762,54067202,54198274,57344003,69468163,71565314,74055682,75956225,76349443,77529091,77987841,79364098],"unpredictably":[80805889],"unmanaged":[2097153,2752513,2818049,3276801,3473409,3735553,3997697,4063233,4259841,4390913,5373955,5570562,5963777,7077889,8716291,9306115,9502723,9830403,11010051,11206659,11403267,21430275,21757953,24510465,25296897,41353219,42663938,46465025,46989315,51904514,56164354,56623106,63635457,70320129,73138177,74645505,75104259,75366401,75497473,76087299,76283905,77135873,77856771,78184449,78512129,79495169,79953923,80084993,80281603,80936961,81002499,81068035,81199106,81264643],"unidirectional":[76939265],"using":[6619137,6684673,6815745,8650753,10747905,10878977,13959169,51511297,76414977],"useasyncloadcallback":[76873729],"undefined":[1048580,2359304,3932163,4915201,9895937,16056321,18219011,24576004,26542083,28049409,28901377,33488899,37683202,45547522,57737217,58130433,59113473,60293121,61407233,62128129,62193665,63045633,63438850,64684033,64815108,65273857,67305476,69533697,71237633,75104257,76087297,76349441,77529089,77856769,78512129,79364097,79953921,80281601,80871434,81002497,81068033,81264641,81330177],"usecaseinsensitivememberbinding":[76939265],"ulong":[393218,16449544,16646152,16777224,16842760,16908296,18153480,18677768,18743304,20185096,21168136,22282248,23986184,28246018,30277634,30998530,31916034,37421058,58195970,59506690,61145090,65929218,66191362,66715650,66977794,68550658,68747266,69730306,70189058,70844418,71434242,71892994,72155138,73203714,73859074,78184449],"usage":[1769473,5046273,6488065,6881281,7077889,8060929,8192001,8323073,8781825,10092545,10420225,11010049,17039361,17170433,17956865,18415617,18808833,19398657,19922945,20054017,21233665,25231361,26935297,27197441,28966913,37486594,47448065,49545217,50724866,54657025,57671681,57933825,63373313,67895297,68157441,69992449,71041025,71499777,71827460,72220673,73400324,75366401,75759617,76087297,77398017,80216065],"usesynchronizationcontexts":[76939265]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_118.json b/docs/Reference/fti/FTI_118.json index 87dfc474d..0382cdc13 100644 --- a/docs/Reference/fti/FTI_118.json +++ b/docs/Reference/fti/FTI_118.json @@ -1 +1 @@ -{"variabl":[9830401],"variant":[61472769,61669377],"vbscript":[6356993,6553601,31588353,32243714,32833538,32964609,33554434,34144258,34275330,35127299,35454978,36306946,37224450,38207491,39976962,40173574,40566786,40632321,41811974,44957697,54329345,55377922,56295425,60096519,61472769,61538311,61669378],"version":[589825,720897,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,3407878,4915201,5046278,5242881,5308417,5373953,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6422529,6488065,6619137,6684673,6750209,6815745,6946817,7012353,7077889,7143425,7274497,7340033,7405569,7471105,7602177,7667713,7733249,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8781825,8847361,8912897,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764866,9830401,9895937,9961473,10092546,10027009,10158081,10223618,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878978,10944513,11010049,11075585,11141122,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565954,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16515073,16449537,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544386,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197442,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30736385,30801922,30867458,30998529,31129601,31195137,31260673,31326209,31391745,31522817,31588354,31653890,31850497,31916033,31981569,32112642,32178177,32243713,32309249,32636929,32702465,32768001,32833537,32964610,33095681,33161217,33226753,33554433,33685505,33751042,33947649,34013185,34144257,34275329,34734081,34865154,34930689,35127297,35520513,35454977,35848193,36044801,36175874,36306945,36503553,36569089,37224449,37486593,37879809,38010882,38207489,38273025,38469633,38731777,39190529,39452673,39583745,39845889,40042497,40108033,40501249,40828929,40894465,40960001,41025537,41353217,41549825,41615361,41680897,41746433,42139649,42270721,42336257,42401793,42467329,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778050,43843585,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,45023233,45154305,45219841,45285377,45350913,45481985,45547521,45613057,45678593,45875201,45940737,46006273,46071809,46333953,46399489,46465025,46530561,46661633,46727169,46792705,46989313,47054849,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47710209,47841281,47906817,48037889,48103425,48168961,48234497,48300033,48431105,48496641,48562177,48627713,48693249,48758785,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785800,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506690,59572225,59637761,59703297,59768839,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"valid":[13828097,15728641,15794177,16580609,19202049,19398657],"verifyaccess":[4784129,6291457,6356993,6553601,6881281,7536641,8716289,8978433,30277636,31916038,44695556,57016321,58392577,58720257,60096513,60882945,61407233,61538305,61603841],"visible":[59965441],"violation":[38404097,39321601,42074113,51773442,53346306,58261505,59441154,60817409],"variable":[3407873,5046273,12255241,39059457,40632321,41353217,42074113,42205185,43909121,44957697,45088769,45219841,46268417,47775745,58195969,58327041,58392577,58785793,59768833,60096513,60817409,60882945,61407233,61538305,61603841],"var":[7143426,8060930,8126470,8257538,8323074,8650754,8912897,9043970,9306116,9437190,9568260,9699331,9830406,10289155,10354690,10420227,10485763,10616838,10682371,10878978,10944513,11075587,11141123,11206659,11337731,11665411,12058627,12189699,12255238,12582915,12910595,13565954],"voidresultvalue":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47054854,47775745,51642372,56492033,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"val":[1048577,1114113,1179649,1245185,1376257,1441793,1507329],"vt_date":[61669377],"variables":[9830401,12255234,41353218,45219842],"vt_cy":[61669377],"views":[38535169,59834369],"vbs":[54329345,56295425],"valuetask":[2949128,16252940,18546700,19333132,21299212,38862856,61079560,61145090],"versions":[43057153,46465025],"variants":[61669379],"vbscriptengine":[6356994,6553602,31588354,32243717,32833541,32964610,33554437,34144261,34275333,35127301,35454981,36306949,37224453,38207493,39976961,40173574,40566785,40632322,41811974,44957698,54329346,56295426,60096523,60882945,61538315,61603841],"vbscrip":[13631489,23789569,42336257,45875201,59637761],"visual":[3014659,4521987,7471106,7929858,7995394,8585218,9240578,9895938,16252930,17104898,17825794,18153474,18546690,19005442,19333122,19726338,20054018,20512770,21299202,55705603,60227587],"vie":[2686979,2818051,3211267,3670019,15794179,18481154,19202051,37421058,37814275,38797315,40239107,41156611,44040193,44564481,44826625,59834374,60162054,60424198,60751878],"verify":[30277633,31916033,44695553],"valuetype":[1703939,3801091,51576837,55902213],"values":[3014658,4521986,8388609,9175041,12255233,13172737,13631490,13828097,13893633,14548993,14745601,15073281,15532033,19398657,19464193,20447233,21233665,22085633,22806529,23789570,24641537,34537474,39059458,39452673,40042497,40632322,42074114,42205186,42336260,42795009,43188226,43253768,43909122,44171265,44957698,45088770,45809666,45875204,46268418,46858242,47775746,48889857,50528257,51838977,52690946,53149698,53542914,54067202,54263810,55705602,55836673,56426498,57540610,57999362,58195970,58327042,58392578,59637761,60096514,60227586,60555266,60817410,60882946,61145089,61407234,61538306,61603842,61669379],"virtual":[589825,3014657,4521985,5242882,5505025,5963778,6094849,6029313,6225922,6422530,6488066,6684673,6946818,7274497,16121857,16842753,17039361,17235969,17694721,17760257,18087937,18415617,18612225,18677761,18743297,18874370,18939905,19070977,19136513,19398657,19464193,19529730,19595265,19660801,19922945,19988481,20119553,20250625,20316161,20447233,20643841,20709377,20774913,20971521,21037057,21102593,21233665,21364737,21430273,21495809,21626881,21757953,21823489,21889025,22085633,22216705,22282241,22413313,22478849,22544385,22609921,22806529,23003137,23068673,23199745,23265281,23396353,23527425,23592961,23658498,23789569,23920641,23986177,24117249,24182785,24248321,24379394,24576001,24641537,24707073,24903681,25100289,25296897,27197441,27918337,28246017,28770305,30212097,30474241,30539777,30801921,30867457,31260673,31588353,31653889,31916033,32112641,32964609,35520513,38273025,39583746,42467329,42663937,42795009,43122689,43253761,43384833,43450369,43712513,43778049,44171265,44236801,44302337,44367873,44630017,44761090,44892161,45219841,45285377,45481985,45875201,46006273,46333953,46465025,46727169,47054849,47185921,47513601,47579137,48103425,48234497,48627713,48758785,49020929,49152001,49283073,49348609,49545217,49676289,49741825,50135041,50659329,50790401,50921473,51183617,51314689,51445761,51838977,51904513,51970049,52297729,52953089,53411841,53805057,54001665,54329345,54525953,55050241,55705601,55771137,55967745,56295425,56360961,56623105,56819713,56885249,57409537,60227585,61669379],"value":[393217,458755,589827,655361,720899,786433,917507,1048577,1114118,1179650,1245192,1376262,1441798,1507329,1769474,2490373,2555908,2621446,2686982,2752515,2818054,2883588,3014660,3145732,3211270,3276802,3342340,3407894,3538948,3670022,4128772,4194306,4259842,4521992,4653057,4784130,4849668,5046293,5177348,5242881,5505025,6094849,6029313,6225921,6422529,6488065,6750209,6881282,6946817,7012353,7077889,7143428,7274497,7471105,7602177,7929857,8060932,7995393,8126465,8257545,8323073,8388612,8454145,8519683,8585217,8650753,8912906,9043976,9109505,9175049,9240577,9306119,9371649,9437185,9502721,9568262,9633801,9699337,9764872,9830405,9895937,9961475,10027009,10092545,10158081,10289161,10223617,10354689,10420233,10485769,10551299,10616833,10682377,10747913,10878977,10944513,11075593,11141122,11206665,11337737,11534345,11599873,11665417,11730950,11927553,12058633,12189705,12255237,12582921,12910593,12976129,13107201,13172738,13303809,13500417,13565959,13631492,13828097,13893634,14090241,14155777,14221315,14286849,14548994,14614531,14745602,14811137,14876673,14942209,15007745,15073282,15269889,15335425,15400962,15532034,15597569,15663107,15728641,15794179,15859713,15925249,15990786,16121863,16056321,16252930,16449537,16580611,16646146,16711681,17039361,17104897,17170439,17235969,17301505,17367041,17432577,17498113,17694721,17760257,17825793,17891331,18022401,18087937,18153473,18219009,18284545,18481153,18546690,18677761,18743297,18808839,19005441,19070977,19202049,19333122,19398657,19464194,19529729,19595274,19660801,19726337,19988481,20054017,20316161,20447234,20512769,20643841,21037057,21233666,21299202,21626883,21757955,22085634,22282242,22544385,22609921,22806530,23003138,23134209,23199745,23461889,23527425,23592962,23789572,24051713,24117249,24182791,24248321,24379393,24444929,24641538,24772609,24838145,24903683,24969217,25100289,25165825,25231361,25296899,25362433,25493505,25559041,25624577,25690113,25755649,25821185,25952257,26017793,26083329,26214401,26345473,26411009,26476546,26542081,26607617,26673153,26804226,26935297,27066369,27131905,27197442,27394049,27525121,27590657,27656194,27721729,27787265,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28835841,28901378,28966913,29032449,29097985,29163521,29294593,29360129,29425665,29491201,29556737,29622274,29687809,29753345,29884417,29949953,30015489,30081025,30146561,30343169,30474241,30736385,30801921,30867458,30998529,31195137,31260676,31326222,31391745,31588355,31653889,31981569,32112642,32178177,32309249,32636929,32768001,32833537,32899074,32964611,33095681,33226753,33357826,33685505,33947652,34013185,34275329,34537473,34734081,34930689,35127297,35520513,35454977,35782658,35848193,36044801,36241410,36438018,36503553,36569089,36700162,36896770,36962306,37027842,37224449,37289986,37421058,37814274,37879809,37945346,38010883,38207489,38469633,38600706,38731777,38797314,39059459,39190529,39452674,39518210,39583747,39649282,39845890,40042498,40108034,40239106,40501249,40632323,40828930,40894466,40960001,41025537,41156610,41353218,41549826,41615362,41680900,41746433,42074115,42139649,42205187,42270722,42336258,42401796,42663937,42729473,42795010,42860545,42926082,42991617,43057154,43188225,43253761,43319298,43384835,43450370,43515905,43581442,43646977,43712513,43778049,43843586,43909123,43974657,44040193,44105729,44171266,44236801,44302337,44433410,44498945,44564481,44630018,44761089,44826625,44892162,44957699,45023235,45154306,45088771,45219842,45285377,45350913,45481986,45547521,45613057,45678594,45744132,45809665,45875202,45940737,46006273,46071810,46137345,46202882,46268419,46333954,46399489,46465026,46530562,46661634,46727169,46792707,46858241,46989313,47054857,47120386,47185922,47251458,47316994,47382530,47448065,47513601,47579137,47644674,47710210,47775747,47841281,47906818,48037889,48103425,48168962,48234498,48300034,48365570,48431105,48496642,48562177,48627714,48693249,48758786,48824322,48889858,48955393,49020930,49086465,49152004,49217537,49283074,49348610,49414146,49479681,49610760,49545217,49676290,49741825,49807361,49872897,49938434,50003969,50069505,50135041,50200580,50266113,50331649,50397185,50462722,50528264,50593793,50659330,50724867,50790408,50855937,50921473,50987011,51052546,51118082,51183618,51249154,51314690,51380226,51445761,51511299,51576833,51642377,51707905,51773442,51838984,51904514,51970049,52035586,52101123,52232194,52297730,52363265,52494337,52559874,52625409,52690946,52756481,52822019,52887554,52953090,53018625,53149698,53215233,53280771,53346306,53411842,53477380,53542914,53608449,53739521,53805057,53936132,54001666,54067206,54132737,54198273,54263810,54329345,54394881,54460419,54525954,54591491,54657025,54722564,54788097,54853634,54919170,54984705,55050241,55181313,55246850,55312389,55443458,55508993,55574531,55640065,55705604,55771140,55836678,55902209,55967745,56033282,56098818,56164353,56295425,56360964,56426499,56492037,56557569,56623105,56688641,56819714,56885249,56950785,57016322,57081858,57147393,57278465,57344002,57409537,57475075,57540612,57606145,57737218,57868289,57999363,58064897,58195971,58327043,58392579,58458114,58654724,58720258,58785813,58916870,58982402,59113476,59179009,59375624,59441155,59506692,59572225,59637764,59768854,59834376,59965441,60096515,60162056,60227594,60293126,60358660,60424200,60555266,60620801,60686337,60751880,60817411,60882947,61014022,61145089,61210625,61341697,61407235,61472770,61538307,61603843,61669377],"violated":[58720257],"void":[589826,655361,720898,917506,1376257,4390913,5963778,6684674,6815746,7405570,7733250,7864322,8847362,10813442,11010050,11468802,11862018,11927554,12124162,12320770,12451842,12517378,12648450,12713986,12845058,13041666,13107202,13238274,13303810,13369346,13434882,13500418,13697026,13631489,13762562,13828098,13959170,14024706,14090242,14155778,14286850,14352386,14417922,14483458,14680066,14876674,14942210,15007746,15138818,15204354,15269890,15466498,15597570,15728642,15925250,16121858,16187394,16515074,16777218,16842754,16908290,17170434,17235970,17563650,17760258,17891330,17956866,18087938,18350082,18415618,18612226,18743298,18808834,18874370,18939906,19070978,19136514,19202050,19398658,19660802,19922946,19988482,20119554,20250626,20643842,20709378,20774914,20971522,21037058,21102594,21364738,21430274,21495810,21823490,21889026,22216706,22413314,22478850,22609922,22937602,23068674,23199746,23265282,23396354,23658498,23724034,23789569,23920642,23986178,24182786,24248322,24576002,24707074,24903682,25100290,26148866,26279938,26476546,26869762,27000834,27262978,27918338,28770306,29229058,30212098,30277634,30474242,30539778,30605314,31653890,31916034,33226754,38273026,39059457,39583745,40042497,40108033,40632321,40828929,40894465,41353217,41549825,41680897,42074113,42205185,42270721,42336257,42401793,42467330,42795009,42926081,43057153,43122690,43319297,43384833,43450369,43581441,43843585,43909121,44171265,44367874,44433409,44630017,44695554,44957697,45023233,45154305,45088769,45219841,45678593,45875201,46071809,46268417,46333953,46465025,46530561,46661633,46792705,47054852,47185921,47251457,47316993,47382529,47710209,47775745,47906817,48234497,48300033,48496641,48889857,49152001,49283073,49414145,49610753,50200577,50462721,50528257,50659329,50724865,50790401,50987009,51052545,51118081,51249153,51314689,51380225,51511297,51642372,51773441,51838977,51904513,52035585,52101121,52166658,52232193,52559873,52690945,52822017,52887553,52953089,53149697,53280769,53346305,53411841,53542913,53936129,54001665,54263809,54460417,54525953,54591489,54853633,55443457,55574529,55771137,56098817,56360961,56492034,57344001,57475073,57737217,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"voidresult":[655363,1376263,4390914,13631489,23789569,31653890,38010881,47054849,51642369,56492039],"vt_array":[61669377],"valueref":[458755,1245186,4194307,4653058,31326216,38010883,55246856,55836679,57278469],"verified":[60686338],"vbarray":[61669377],"various":[57147393],"vt_dispatch":[61472769,61669377],"view":[2686979,2818050,3211267,3670018,13631489,15794177,16187393,16711683,17498115,18481153,19202049,23068673,23789569,37421057,37814273,38797313,44040193,44564481,44826625,59834371,60162051,60424194,60751874]} \ No newline at end of file +{"v8fasthostfunctionoperations":[5111810,31457286,34013190,34734086,35782662,36110342,36765702,36962310,38469638,50069521,51707905,76742657,79626245,80478230],"valid":[14876673,16318465,16711681,16973825,18874369,19070977,19136513,20905985,22020097,23199745],"v8runtimeviolationpolicy":[49545217,70778887,74383367,77791236],"v8cachekind":[7077906,11010066,36044805,36175877,36241414,36372486,37552133,37748741,37945349,38076422,38207493,38273030,39387142,39518214,40042502,40108037,40239109,40435717,42401798,43122693,43515910,43581445,44040197,44433413,45744133,45875206,46858246,47513605,48037893,48365573,49217541,49545217,49741829,49807365,50003977,50987014,51642377,51970053,52625413,54460421,54853641,54984709,57212937,75366418,76087314,79560708,79757313],"variable":[3538945,4521985,13959177,57737217,58130433,60293121,61407233,62062593,62193665,63045633,64684033,65273857,67567617,69533697,75104257,75956225,76087297,77856769,77987841,78512129,79953921,80281601,81002497,81068033,81264641],"vt_dispatch":[80412673,81330177],"verifyfunctioncall":[6946817,31981572,79626241],"v8":[393220,655365,327684,983045,1310723,1572865,3801089,3866625,4063233,4128769,4194305,4259841,4325377,4456449,4587521,4718593,4784129,4849665,4915201,4980737,5111809,5242881,5439489,5701633,5767169,6094849,6160385,6946817,7077896,7340033,7864321,9895937,11010052,23068676,23265284,23461892,24248324,24772612,24838148,24969220,25034756,25493508,25559044,25624580,26148868,26214404,26279940,26345476,26411012,26673156,26869764,27000836,27131908,27328516,27459588,27525124,27590660,27656196,27721732,27787268,27852804,27918340,28246020,28180484,28377092,28442628,28508164,28573700,28704772,28770308,28835844,28901380,29032452,29097988,29163524,29229060,29294596,29425668,29491204,29556740,29622276,29687812,29753348,29818884,29884420,29949956,30015492,30081028,30146564,30212100,30277636,30343172,30408708,30474244,30539780,30605316,30670852,30736388,30801924,30867460,30932996,30998532,31064068,31129604,31195140,31260676,31326212,31391748,31457284,31522820,31588356,31653892,31719428,31784964,31850500,31916036,31981572,32047108,32112644,32178180,32243716,32309252,32374788,32440324,32505860,32571396,32636932,32702468,32768004,32833540,32899076,32964612,33030148,33095684,33161220,33226756,33292292,33357828,33423364,33488900,33554436,33619972,33685508,33751044,33816580,33882116,33947652,34013188,34078724,34144260,34209796,34275332,34340868,34406404,34471940,34537476,34603012,34668548,34734084,34799620,34865156,34930692,34996228,35061764,35127300,35192837,35258373,35323908,35389445,35454980,35520517,35586052,35651588,35717124,35782660,35848196,35913732,35979268,36044806,36110340,36175879,36241415,36306948,36372487,36438020,36503556,36569092,36634628,36700164,36765700,36831236,36896773,36962308,37027845,37093383,37158916,37224452,37289989,37355524,37421060,37486596,37552135,37617668,37683204,37748742,37814276,37879812,37945351,38010884,38076422,38141956,38207495,38273030,38338565,38404100,38469636,38535174,38600708,38666244,38731781,38797316,38862852,38928388,38993924,39059460,39124997,39190532,39256072,39321604,39387142,39452677,39518215,39583748,39649285,39780356,39845892,39911428,39976964,40042501,40108039,40173573,40239111,40304646,40370180,40435719,40501252,40566788,40763398,40828936,40894469,40960005,41025541,41091076,41222148,41287685,41353220,41418756,41549830,41615364,41680902,41811973,41877511,42008580,42074117,42205191,42336261,42401798,42467333,42532870,42598405,42729476,42795012,42991623,43057157,43122694,43188229,43253765,43384836,43450372,43515910,43581447,43712516,43778056,44040199,44302340,44367876,44433415,44498950,44761095,44892165,44957700,45023237,45088772,45285380,45416452,45481992,45744134,45875205,46137348,46465028,46661633,46727169,46792708,46858246,47054855,47120388,47316997,47513606,47775745,47972365,48037895,48365575,48431105,48693249,48824321,49086471,49217542,49283076,49348609,49545235,49610753,49676289,49741831,49807367,49872900,50003969,50069505,50200577,50659333,50724870,50921479,50987013,51052545,51118084,51445761,51511300,51642369,51707906,51904513,51970054,52428804,52494337,52625415,52690945,52822017,53280769,53346305,53411841,53739521,53805057,53870593,54067201,54460422,54853633,54984710,55050241,55181313,55246849,55574529,55836685,55902209,56426497,56557569,56754177,56819713,57016324,57212929,57540609,57606145,57802753,58064897,58654721,58720263,58851329,59113473,59834374,60030980,60227585,60293125,61014017,61210625,61276162,61472772,61800450,61865988,62586884,62652417,63438852,63832068,64028676,64094212,64487428,64618497,64946180,65011716,65142788,66060292,66191364,66256900,66322436,66584580,66715652,66977796,67371012,67436548,67698693,67829764,68026372,68091908,68354052,68550660,68681732,68747268,69074948,69206020,69271556,69402628,69730308,70189060,70320132,70385668,70451204,70516741,70778885,70844420,70975492,71041031,71172101,71303172,71434244,71565317,71696388,71761926,71827462,71892996,72024068,72155140,72220679,72417287,72744966,72810500,72876037,72941572,73007108,73203716,73269252,73400325,73596933,73728004,73859076,73924614,74055685,74186756,74317828,74383365,74448902,74514439,74776582,74907652,74973188,75235332,75300868,75366432,75431942,75563012,75694084,75825156,75890692,76087321,76152838,76218372,76349445,76546055,76611592,76742663,76939269,77004805,77070341,77201415,77266950,77398022,77529093,77660164,77791237,77856769,78053380,78577670,78643204,79036420,79364101,79560710,79626247,79757319,79822852,80019462,80150533,80347142,80478215,80609284,80740358,80936964],"v8fasthostfunction":[6946818,31981569,32505867,32899078,33554438,34799627,35061771,36438022,37355526,38141963,39780353,51707905,52494357,79626272,80478209],"vt_array":[80412673],"voidresult":[917511,1179651,5177346,18219009,26542081,40697858,45547521,57868289,69140481,78708743],"v8scriptengine":[11010050,35520513,36700161,37093381,37748737,37879809,38207489,38273025,38404097,38535173,39124993,39256069,39387137,39452673,40042497,40239105,40304645,40501249,40435713,40763397,40828933,41353217,41418753,41680901,41877509,42074113,42205189,42467329,42532869,42598401,42729473,42991621,43122689,43515905,43778053,44302337,44433409,44498949,44761093,45023233,45088769,45481989,45875201,47054853,47120385,47513601,48431105,49086469,49217537,49283074,49545217,49807361,50003969,50724865,50921477,50987009,51642369,51904513,52428801,52625409,52822017,53870593,54460417,54984705,55836685,57016321,60293122,68091906,69206017,71041025,71827457,72810497,74055681,74383361,74448897,74907649,75235329,75563009,76087315,76611585,76939265,77070337,77856769],"v8fasthostpropertygetter":[5767172,38666245,39911429,46792709,49872901,51707905,62652418,64618498,75431940,78053380],"variabl":[8585217],"v8runtime":[655362,983042,1310723,4849665,6094849,7077891,7864321,34144257,35192839,35258375,35389442,35979266,36044802,36175874,36241410,36372482,36896776,37027847,37093378,37289986,37486594,37552130,37945346,38076418,38338562,38731783,39059458,39190530,39256066,39518210,39649288,40108034,40173570,40828930,40894466,40960008,41025538,41287682,41811974,41877505,42205186,42336264,42401794,42991617,43057154,43253767,43581442,43778050,44040194,44761089,44892167,45481986,45744130,46465026,46858242,47054849,47316998,47972366,48037890,48365570,49086465,49545217,49741826,50659330,50921473,51970050,53346306,54853634,55246849,57212930,58720258,59834371,61014017,61800449,64094209,66191361,66584577,66977793,67698690,67829761,68354050,68747265,69402625,69730305,70516737,70778882,70844417,70975489,71565314,71696385,72155137,72220674,72876034,73203713,73400322,73596930,73859073,73924610,75366419,76152833,76546049,76611585,77004801,77070337,77398017,77791233],"v8runtimeheapinfo":[6094850,37486598,49545217,50724870,55246850,66191361,66977793,68747265,69730305,70844417,73203713,73859073,77398022],"variables":[8585217,13959170,62062594,67567618],"v8fasthostmethodoperations":[3866626,34471942,39845894,43450374,44957702,51707905,53739529,72417294,74514437,76742657],"v8fasthostobjectoperations":[3866626,4325379,5111810,5701634,6946818,39976963,41091078,43384838,50200581,51707905,72417287,74514435,76742667,79626243,80478215],"verifies":[6946818,31981569,39780353,79626242],"v8fast":[3866625,4325377,4915201,5111809,5242881,5439489,5701633,5767169,6946817,7340033,9895937,23265281,23461889,24969217,25034753,25559041,25624577,26214401,26279937,26345473,26869761,27328513,27525121,27656193,27787265,27852801,27918337,28246017,28442625,28508161,28573697,28704769,28770305,28835841,28901377,29032449,29097985,29229057,29294593,29425665,29491201,29556737,29622273,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539778,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457283,31522818,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32309249,32374785,32440321,32505860,32571393,32636930,32702465,32768001,32833537,32899074,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554434,33619972,33685506,33751041,33816577,33882115,33947649,34013186,34078721,34209793,34275329,34340865,34406401,34471939,34537473,34603009,34668548,34734083,34799620,34865153,34930689,34996225,35061764,35127298,35323906,35454977,35586049,35651585,35717121,35782659,35848193,35913729,36110338,36306945,36438018,36503553,36569089,36634625,36765698,36831233,36962306,37158916,37224449,37355522,37421057,37617665,37683201,37814273,38010881,38141956,38469635,38600708,38666243,38797313,38862849,38928386,38993921,39321601,39583745,39780353,39845890,39911428,39976961,40370178,40566785,41091073,41222145,41615362,42008577,42795009,43384834,43450371,43712515,44367873,44957698,45285377,45416449,46137345,46727169,46792706,47775745,49610753,49872899,50069505,50200577,51052545,51118082,51445761,52494337,52690945,53280769,53739521,54067201,55181313,56754177,57802753,58654721,58851329,59113473,60227585,61210625,62652417,63438849,64618497,65011713,66060289,66322433,67371009,68026369,68681729,69074945,70385665,72417281,74514433,75431937,75890689,76349441,76742657,77266945,77529089,77660161,78053377,78577665,78643201,79036417,79364097,79626241,79822849,80478209,80609281],"vt_date":[80412673],"v8script":[4587523,11010051,35520513,36044805,36175877,36241413,36372485,36700161,37552133,37748742,37879809,37945349,38076421,38207494,38273030,38404097,38535170,39124993,39256065,39387142,39452673,39518213,40042502,40108037,40173573,40239110,40304642,40435718,40501249,40763393,40828929,40894469,41025541,41287685,41353217,41418758,41680897,41877505,42074118,42401797,42467329,42532866,42598406,42729473,42991617,43122694,43057157,43515910,43581445,43778049,44040197,44302342,44433414,44498946,44761090,45023238,45088775,45481985,45744133,45875206,46858245,47054850,47120392,47513606,48037893,48365573,48431105,49086466,49217542,49283073,49545217,49741829,49807366,50003969,50659333,50724865,50921474,50987014,51511298,51642369,51904513,51970053,52428801,52625414,52822018,53870594,54460422,54984710,55836673,56426499,57016326,60293121,68091905,69206017,71041025,71172103,71827457,72810497,74055681,74383361,74448897,74907649,75235329,75563009,75825154,76087299,76218370,76939265],"voidresultvalue":[57737217,57868292,58130433,60293121,61407233,62193665,63045633,64684033,65273857,69140486,69533697,75104257,76087297,77856769,78512129,78708737,79953921,80281601,81002497,81068033,81264641],"violation":[49545217,59834369,60293121,70778882,74383362,75366401,76087297,77791234],"views":[48103425,74645505],"violated":[80805889],"vbscrip":[18219009,26542081,64421889,68878337,79429633],"v8fasthostmethodinvoker":[5767172,33619973,34471941,34668549,35127301,35323909,37158917,38600709,38928389,39845893,40370181,43450373,44957701,51707905,53739524,56754180,58654724,72417284,74514436,75431940,80609284],"vbs":[74252289,77922305],"value":[6,393218,131073,524296,655363,327681,786433,917510,983043,1048577,1114115,1179649,1441795,1769476,1966082,2031621,2097156,2359302,2752516,2818056,2883586,2949124,3080194,3145732,3211267,3276808,3342340,3473416,3538966,3801092,3997704,4390920,4456452,4522005,4653060,4784132,4915219,4980740,5046276,5242884,5308417,5570564,5963784,5898242,6291457,6356993,6553602,7208961,7340070,7405569,7536641,7602177,7733249,7798785,7929857,7995396,8060929,8192001,8323073,8388612,8454145,8519681,8585221,8781825,8847361,8912905,8978433,9043969,9109508,9175041,9568264,9633793,9699331,9764865,9895974,9961482,10027011,10092545,10158081,10223624,10289153,10354689,10420225,10485769,10551305,10616841,10682369,10747905,10813449,10878978,10944518,11075591,11141123,11272198,11337729,11468801,11665409,11730953,11862017,11927561,11993089,12124169,12320770,12386313,12517385,12582913,12779529,12845065,12910601,13041665,13107201,13500417,13631497,13697025,13893641,13959173,14090241,14155778,14221321,14352385,14614529,14680066,14745601,14811137,14876675,15007747,15204361,15400961,15466497,15663105,15728642,15794177,15925249,15990785,16056323,16121858,16252930,16318465,16449537,16580609,16646145,16711681,16777217,16842753,16908289,16973827,17039361,17170434,17235969,17301505,17432577,17498122,17629185,17891329,17956866,18022402,18153473,18219012,18284545,18350087,18415618,18677761,18743297,18808833,18874369,18939905,19005447,19070977,19136515,19202049,19333121,19398657,19464194,19529735,19595265,19791873,19857410,19922945,19988481,20054017,20119553,20185089,20316161,20447235,20643843,20840449,20905985,21037058,21102593,21168129,21233665,21299201,21364738,21495809,21954561,22020099,22347783,22282241,22413315,22478849,22544385,22675457,22872066,22937601,23003137,23199745,23265287,23461895,23527425,23658497,23789570,23920647,23986177,24248321,24313858,24576001,24772609,24838145,24903681,24969223,25034759,25231361,25362434,25427970,25493505,25559048,25624579,25690115,25821187,26017793,26083329,26214407,26279939,26345479,26411009,26542084,26673153,26738690,26869763,26935298,27000833,27066369,27328513,27459585,27525128,27590657,27656195,27721729,27787269,27852803,27918344,28049411,28114946,28246024,28180481,28377089,28442627,28508168,28573699,28639234,28704776,28770312,28835848,28901377,29032451,29097987,29163521,29229059,29294595,29425667,29491208,29556744,29622275,29753345,29818883,29884419,29949960,30015491,30081032,30146563,30212104,30277635,30343176,30408712,30474250,30539783,30605321,30670851,30736387,30801923,30867464,30932997,30998531,31064067,31129608,31195144,31260680,31326216,31391745,31522823,31588360,31653895,31719427,31784968,31850505,31916040,32047107,32112643,32178180,32243713,32309251,32374787,32440323,32571400,32636935,32702472,32768004,32833539,32964616,33030152,33095688,33226753,33292295,33357832,33488897,33685511,33751047,33816584,33947656,34078723,34209795,34275331,34340872,34537480,34603018,34865159,34930695,35389441,35520513,35586056,35651587,35717127,35848200,35979265,36044801,36175873,36241409,36306951,36372481,36569095,36634625,36896769,37027841,37093377,37224455,37289985,37421063,37486593,37552129,37748737,37945345,38076417,38207489,38273025,38535169,38666242,38731777,38797319,38862857,39256066,39387137,39518209,39583751,39649281,39911426,40042497,40108033,40173569,40239105,40304641,40435713,40566792,40632321,40697857,40828930,40894465,40960001,41025537,41156609,41222151,41287681,41418753,41484289,41549825,41943041,42008583,42074113,42139652,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795015,42860545,42926081,43057153,43122689,43253761,43515905,43581441,43778050,43843587,44040193,44302337,44367879,44433409,44498945,44564483,44630020,44761089,44892161,45023233,45088770,45219841,45416455,45481986,45613058,45547523,45744129,45809665,45875201,46071810,46137351,46202884,46268418,46333953,46399490,46661634,46727170,46792705,46858241,47054849,47120386,47382530,47513601,48037889,48234497,48300034,48365569,48627714,48758786,48889857,48955393,49086465,49217537,49283074,49348610,49414145,49676290,49741825,49807361,49872897,49938436,50593793,50659329,50724865,50921473,50987009,51052563,51380226,51445779,51707906,51970049,52101121,52297729,52428801,52625409,52887554,52953089,53084161,53149697,53477378,53608450,54067219,54132737,54198275,54329346,54394881,54460417,54525954,54591502,54919169,54984705,55050242,55508994,55705601,55771137,56033282,56229890,56360962,56492033,56688642,56885250,56950785,57016321,57081858,57147394,57278466,57344003,57475073,57737220,57802754,57868297,57999362,58130436,58195969,58327042,58392577,58458113,58523650,58589185,58785793,58916866,58982402,59179010,59244546,59310081,59441154,59506689,59572228,59637761,59703297,59768834,59899906,59965441,60030977,60096513,60162055,60293124,60358660,60489729,60555265,60620802,60686340,60751874,60817410,60882946,60948481,61079556,61145089,61341698,61407236,61472769,61669378,61734914,61865985,61931522,62062594,62128136,62193668,62259202,62324738,62390274,62455810,62521345,62586881,62717954,62783490,62849026,62914561,62980100,63045636,63111169,63176705,63242241,63307777,63373313,63438849,63504386,63569921,63635458,63700994,63766530,63832065,63897602,63963138,64028673,64094210,64159746,64225282,64290818,64356354,64421890,64487426,64552967,64684036,64749570,64815112,64880641,64946177,65011713,65077251,65142785,65208321,65273860,65339393,65404930,65536003,65601538,65732609,65667074,65798145,65929217,65994754,66060289,66125825,66191361,66256897,66322433,66387970,66453506,66519042,66584578,66650114,66715650,66846721,66912260,66977793,67043330,67108865,67174402,67239937,67305480,67371009,67436545,67502082,67567618,67633154,67698690,67764226,67829762,67895298,67960833,68026369,68091905,68222977,68288514,68354050,68419585,68485121,68550657,68616193,68681729,68747265,68812801,68878338,69009410,69074946,69140489,69206018,69271553,69337089,69402626,69468163,69533700,69599233,69664769,69730305,69795841,69861377,69926916,70057985,70123521,70189057,70254594,70385665,70451202,70516737,70647809,70713346,70778882,70844417,70975491,71041028,71106562,71237640,71303172,71368707,71434241,71499777,71565315,71630849,71696385,71827459,71892995,72089602,72155139,72220676,72286210,72351745,72482817,72548356,72679425,72744961,72810498,72876034,72941569,73007106,73072641,73138186,73203713,73269252,73334785,73400323,73465857,73596929,73662465,73728001,73793538,73859073,73924610,73990148,74055683,74121222,74186753,74252289,74383362,74448898,74579969,74645514,74842116,74907650,74973188,75038725,75104260,75235331,75497482,75563011,75628547,75694084,75759620,75825153,75956245,76021761,76087300,76218369,76283910,76349479,76414980,76611586,76873729,76939266,77004801,77070338,77135882,77463553,77529127,77594626,77660162,77725697,77791235,77856772,77922305,77987862,78053383,78118913,78184459,78249990,78315521,78381058,78446593,78512132,78577668,78643207,78708741,78839809,78905346,78970884,79036417,79101954,79167492,79233025,79364116,79429636,79495174,79560705,79757313,79822849,79953924,80085002,80150529,80216068,80281604,80412673,80543748,80609281,80740353,80805890,80871426,81002500,81068036,81199110,81264644,81330178],"v8settings":[49545217,61276163,76611586,77070338,77201415],"verified":[79757314],"vt_cy":[80412673],"v8fasthostobjectconfiguration":[5767170,33423361,33882113,34668545,35323905,35913729,36503553,37158913,37617665,37814273,38666241,38928385,38993925,39321601,39911425,41615361,43712513,46792705,47775745,49610753,49872897,51118081,51707905,52690946,58654721,62652417,64618497,69074945,75431944,75890693,77266945,78577665],"valuetask":[3670024,17170444,17956876,18415628,26935308,28377093,54263816,76939266,78774280],"visible":[78446593],"valuetype":[1638403,4718595,4915203,7340035,9895939,76349445,77529093,78839813,79364101,80740357],"v8fasthostpropertyflags":[5767172,27721733,29753349,33882117,39911429,43712517,49872901,51707905,62652418,64618498,75431940,77660164],"verifyaccess":[5898241,6553601,8716289,9306113,9502721,9830401,11206657,11403265,43319302,47644676,50790404,75104257,79101953,79953921,80281601,80805889,81002497,81068033,81264641],"v8fastresult":[3801090,4456450,4784130,4915202,4980738,5242882,23068677,23265285,24969221,25559045,26148869,26345477,27000837,29163525,30539781,32636933,33292289,33751041,34865153,34930689,35717121,36306945,36569089,36831233,37224449,37421057,37683201,38797313,38862849,39583745,40566785,41222145,42008577,42795009,44367873,45416449,46137345,46661634,49676290,51445761,51707905,53280770,57802754,70385665,71303170,73269250,74973186,75694082,78053381,78577666,79364102,79822853,80609285],"v8runtimeflags":[36896773,37027845,38731781,39649285,40960005,42336261,43253765,44892165,47972360,49545217,75366408,77004804],"view":[2818053,3276804,3997701,4390916,14090241,14876673,15269889,16318465,16449539,16842755,18219009,18677763,18874369,20185091,22020097,26542081,26804225,44826627,49938433,53215235,56885249,58195969,59244545,59506689,66846721,74645509,75497477,77135876,78184452],"verify":[31981569,39780353,43319297,47644673,50790401],"v8global":[72744961],"versions":[60817409,66387969],"vbarray":[80412673],"v8fastargs":[9895938,25624577,26279937,26869761,27000837,27328513,27525121,27656193,27787265,27852801,27918337,28246017,28442625,28508161,28835841,28901377,29163525,29229057,29425665,29491201,29622273,29818881,29949953,30015489,30081025,30474241,30670849,30867457,30998529,31064065,31260673,31326209,31391745,31588353,31719425,31850497,32047105,32571393,32768001,32833537,33488897,33947649,34340865,34537473,35586049,51052545,51707905,60227586,65011713,77529094,79822853,80609285],"v8scriptengineflags":[7077892,38535173,39256069,40304645,40828933,42532869,43778053,44498949,44761093,45481989,47054853,49086469,49545217,50921477,55836680,58720260,75366404,76087304,76939268],"values":[3342338,5963778,8388609,10616833,13959169,14155777,15728641,16711681,18022401,18219010,19464193,19857409,21037057,21364737,22872065,23199745,24313857,25427969,26542082,26738689,28639233,45088769,53084162,54394882,55705602,57737218,58130434,58523649,58589186,60162049,60293122,61407234,61669377,62193666,63045634,64094210,64159745,64421892,64552961,64684034,64815105,65273858,65732616,66584578,67305473,67764225,67829762,68878340,69402626,69533698,71368706,74121218,75104258,75628546,76087298,76414978,76939265,77856770,78249985,78512130,79429633,79953922,80084994,80281602,80412675,80543746,80871426,81002498,81068034,81264642],"v8cpuprofileflags":[7077889,11010049,35520517,37289989,48431105,49545217,53346305,64487425,70451201,75366401,76087297,80150532],"v8fasthostdynamicobject":[5242882,30539777,31522817,32636929,33226753,33685505,34406401,34996229,35454977,36634625,38010881,46727169,51707905,55181313,57802753,58851329,61210626,66322433,67371009,77266945,78577676],"v8cacheresult":[7077894,11010054,36175877,37552133,38207493,40108037,40435717,43122693,44040197,48037893,48365573,49217541,49545217,49807365,50003971,51642371,54460421,54853635,57212931,75366406,76087302,79757316],"v8globalflags":[49545217,72744964,77070343],"vie":[2818053,3276805,3997701,4390917,14090242,14876675,16318467,18874371,22020099,49938436,56885251,58195969,59244547,59506689,62783491,64356355,66846721,74645512,75497480,77135880,78184456],"v8cpu":[393217,327681,6160385,35520513,37289985,41549825,43188225,53805057,62586881,64028673,64487425,64946177,65142785,66256897,66715649,67436545,68550657,69271553,70189057,70451201,71434241,71761921,71892993,72941569,73007105,74186753,80019457,80150529,80347137,80740353],"visual":[3342339,5963779,8060930,8192002,8323074,8781826,10092546,10420226,17039362,17170434,17956866,18415618,18808834,19398658,19922946,20054018,21233666,25231362,26935298,80084995,80543747],"vbscriptengine":[9306114,9830402,42270725,43843586,44236805,44564482,45809669,46530565,47251461,48234501,48889861,50331653,50593797,52232193,52297733,53673985,55443462,60424198,62193666,65273858,74252290,75104267,77922306,79953921,81002507,81068033],"v8fasthostmethod":[5701634,5767170,33619979,34668549,35127302,37158917,38600715,40370182,51707905,56754187,58654722,72417281,74514454,75431938],"v8cache":[36044801,36175874,36241409,36372481,37552130,37748737,37945345,38076417,38207490,38273025,39387137,39518209,40042497,40108034,40239105,40435714,42401793,43122690,43515905,43581441,44040194,44433409,45744129,45875201,46858241,47513601,48037890,48365570,49217538,49741825,49807362,50987009,51970049,52625409,54460418,54984705,79560705,79757313],"verifyconstructorcall":[6946817,39780356,79626241],"void":[655362,917505,983042,1114114,1179649,5177345,6029314,6619138,6684674,6815746,7471106,8257538,8650754,11534338,11599874,11796482,12058626,12451842,12713986,13172738,13238274,13303810,13434882,13500418,13565954,13697026,13828098,14024706,14286850,14352386,14417922,14483458,14548994,14745602,14811138,14942210,15073282,15269890,15335426,15400962,15466498,15532034,15597570,15794178,15859714,15925250,16187394,16318466,16384002,16515074,16711682,17104898,17235970,17301506,17760258,17825794,17891330,18087938,18284546,18219009,18350082,18546690,18874370,19070978,19202050,19529730,19726338,19988482,20119554,20250626,20316162,20381698,20447234,20512770,20578306,20774914,20905986,21102594,21430274,21495810,21561346,21626882,21692418,21889026,22216706,22347778,22478850,22544386,22609922,22937602,23068674,23199746,23265282,23461890,23527426,23592962,23855106,23920642,24117250,24182786,24379394,24444930,24510466,24641538,24707074,24903682,24969218,25034754,25100290,25296898,25559042,25821186,25886722,26017794,26148866,26214402,26345474,26476546,26542081,26607618,26804226,27000834,27066370,27131906,27983874,29163522,29360130,29687810,30539778,31522818,31653890,31981570,32636930,33292290,33423362,33685506,33751042,33882114,34406402,34668546,34865154,34930690,35323906,35454978,35717122,35913730,36306946,36503554,36569090,36700162,36831234,37158914,37224450,37421058,37617666,37683202,37814274,37879810,38010882,38338562,38404098,38666242,38797314,38862850,38928386,39059458,39124994,39190530,39321602,39452674,39583746,39780354,39911426,39976962,40501250,40566786,40632322,40697858,41222146,41353218,41615362,41746434,42008578,42795010,42860546,43188226,43319298,43712514,44171266,44367874,45285378,45416450,46137346,46465026,46792706,46989314,47120386,47644674,49872898,50135042,50790402,51118082,51511298,54198273,55508993,56033281,56229889,56360961,56688641,57278465,57344001,57737217,57868292,57999361,58130433,58523649,58916865,58982401,59441153,59572225,59768833,59899905,60162049,60293121,60620801,60686337,60817409,60882945,61079553,61341697,61407233,61669377,61734913,61931521,62062593,62128129,62193665,62259201,62324737,62717953,62849025,63045633,63504385,63635457,63700993,63766529,63963137,64094209,64159745,64225281,64290817,64421889,64552961,64684033,64749569,64815105,65077249,65273857,65536001,65601537,65667073,65994753,66387969,66453505,66584577,66650113,66912257,67043329,67174401,67305473,67567617,67698689,67764225,67829761,67895297,68288513,68354049,68878337,69009409,69074945,69140484,69402625,69468161,69533697,69926913,70254593,70778881,70975489,71041025,71237633,71565313,71827457,71892993,72155137,72220673,72286209,72810497,72876033,73007105,73400321,73924609,74055681,74383361,74448897,75104257,75235329,75563009,75890690,76087297,76611585,77070337,77856769,78053378,78512129,78643202,78708738,79298562,79822850,79953921,80281601,80609282,81002497,81068033,81264641],"version":[1,393217,524289,655361,327681,786433,917505,983041,1114113,2359297,3538950,4521990,5505025,5832705,6029313,6225921,6291457,6356993,6422529,6488065,6619137,6684673,6750209,6815745,6881281,7012353,7143425,7208961,7274497,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9371649,9437185,9568258,9633793,9699329,9764865,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878978,10944513,11075585,11141121,11272193,11337729,11468802,11534337,11599873,11665410,11730945,11796481,11862018,11927553,11993089,12058625,12124161,12189697,12255233,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005442,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576002,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,26935297,27000833,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28246017,28180481,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36306945,36372481,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38404097,38469633,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40632321,40697858,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484290,41549825,41615361,41680897,41746433,41811969,41877505,41943041,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646978,43712513,43778049,43843586,44040193,44171265,44236801,44302337,44367873,44433409,44498945,44564482,44630017,44761089,44892161,44957697,45023233,45088769,45219841,45285377,45416449,45481985,45547522,45613058,45744129,45809665,45875201,46137345,46333953,46465025,46530561,46792705,46858241,46923778,46989313,47054849,47120385,47185921,47251457,47316993,47513601,47644673,48037889,48234497,48365569,48889857,48955394,49086465,49217537,49283074,49414145,49479682,49741825,49807361,49872897,50135041,50331649,50528257,50593793,50659329,50724865,50790401,50921473,50987009,51118081,51380226,51511297,51970049,52101121,52297729,52428801,52559873,52625409,52953089,53149697,54132737,54198273,54460417,54591489,54919169,54984705,55508993,55771137,56033281,56229889,56360961,56688641,56950785,57016321,57147393,57278465,57344001,57475073,57868289,57999361,58195969,58327041,58392577,58458113,58523649,58785793,58916865,58982401,59179009,59310081,59441153,59506689,59572225,59637761,59703297,59768833,59899905,59965441,60030977,60096513,60162049,60489729,60555265,60620801,60686337,60817409,60882945,60948481,61079553,61145089,61341697,61472769,61669377,61734913,61865985,61931521,62062593,62128129,62259201,62324737,62390273,62521345,62586881,62717953,62849025,62914561,63111169,63176705,63242241,63307777,63373313,63438849,63504385,63569921,63635457,63700993,63766529,63832065,63963137,64028673,64094209,64159745,64225281,64290817,64421889,64487425,64552961,64749569,64815105,64880641,64946177,65011713,65077249,65142785,65208321,65339393,65404929,65536001,65601537,65732609,65667073,65798145,65929217,65994753,66060289,66125825,66191361,66256897,66322433,66387969,66453505,66519041,66584577,66650113,66715649,66846721,66912257,66977793,67043329,67108865,67174401,67239937,67305473,67371009,67436545,67502081,67567617,67698689,67764225,67829761,67895297,67960833,68026369,68091905,68222977,68288513,68354049,68419585,68485121,68550657,68616193,68681729,68747265,68812801,68878337,68943873,69009409,69074945,69140481,69206017,69271553,69337089,69402625,69468161,69599233,69664769,69730305,69795841,69861377,69926913,69992449,70057985,70123521,70189057,70254593,70320129,70385665,70451201,70516737,70647809,70713345,70778881,70844417,70909953,70975489,71041025,71106561,71172097,71237633,71303169,71368705,71434241,71499777,71565313,71630849,71696385,71761921,71827457,71892993,71958529,72024065,72089601,72155137,72220673,72286209,72351745,72417281,72482817,72548353,72613889,72679425,72744961,72810497,72876033,72941569,73007105,73072641,73138177,73203713,73269249,73334785,73400321,73465857,73531393,73596929,73662465,73728001,73793537,73859073,73924609,73990145,74055681,74121217,74186753,74252289,74317825,74383361,74448897,74514433,74579969,74645505,74711041,74842113,74907649,74973185,75038721,75104257,75169793,75235329,75300865,75366401,75431937,75497473,75563009,75628545,75694081,75759617,75825153,75890689,75956232,76021761,76087297,76152833,76218369,76283905,76349441,76414977,76480513,76546049,76611585,76677121,76742657,76808193,76873729,76939265,77004801,77070337,77135873,77201409,77266945,77332481,77398017,77463553,77529089,77594625,77660161,77725697,77791233,77856769,77922305,77987847,78053377,78118913,78184449,78249985,78315521,78381057,78446593,78512129,78577665,78643201,78708737,78774273,78839809,78905345,78970881,79036417,79101953,79167490,79233025,79298561,79364097,79429633,79495169,79560705,79626241,79691777,79757313,79822849,79888385,79953921,80019457,80084993,80150529,80216065,80281601,80347137,80412673,80478209,80543745,80609281,80674817,80740353,80805889,80871425,80936961,81002497,81068033,81133569,81199105,81264641,81330177],"v8fasthostfunctioninvoker":[31457285,32505861,32899077,33554437,34013189,34734085,34799621,35061765,35782661,36110341,36438021,36765701,36962309,37355525,38141957,38469637,50069512,51707905,52494344,79626248,79822852,80478216],"vbscript":[9306113,9830401,42270723,43843585,44236802,44564481,45809666,46530562,47251458,48234498,48889858,50331650,50593795,52232194,52297730,53673986,55443462,60424198,62193665,65273857,74252289,74776578,75104263,77922305,80412674,81002503,81330177],"variants":[80412675],"v8fasthostpropertysetter":[5767170,38666245,39911429,51707905,62652418,75431938,78643204],"v8runtimeconstraints":[7864322,34144261,35192837,35258373,36896773,39649285,40960005,41877509,42336261,42991621,44761093,47054853,47972358,49086469,49545217,50921477,55836678,61014018,64094209,66584577,67829761,69402625,70975489,71041025,72155137,72220673,75366406,76087302,76152840],"var":[7995394,8585222,8847362,8912898,8978438,9109506,9175042,9961473,10158082,10223618,10354694,10747910,10551299,10878979,10944516,11075588,11730947,11862018,11927555,12124163,12386307,12517379,12582913,12845059,12910595,13631491,13893635,13959174,14221315,15204355,15990787,19005442],"valueref":[524290,1441795,5308418,12320771,45547523,54591496,69337093,77594632,78249991],"val":[1,393217,524289,327681,786433,917505,2359297],"v8cpuprofile":[393217,327681,1572866,4128770,4194306,4718594,6160386,35979269,41549825,42729477,43188225,49545220,53805058,56819714,57540610,62586887,64028673,64487425,64946177,65142791,66256903,66715649,67436551,68550657,69271559,70189057,70451201,71434241,71761922,71892993,72941569,73007105,74186753,80019462,80347138,80740354],"variant":[80412673,81330177],"v8fasthostobjectconfigurator":[5767170,31457285,32505861,33619973,34406405,34471941,34668549,34734085,34799621,35061765,35782661,37158917,38141957,38469637,38600709,39976965,43384837,43450373,45285381,50069508,50200577,51707905,52494340,53739522,56754178,58654722,72417282,74514434,75431938,75890692,76742657,77266945,78577665,79626244,80478212],"v8fasthostfieldaccessor":[5767172,33882117,41615365,43712517,51118085,51707905,62652418,64618498,75431940,79036420],"various":[72744961],"v8fastarg":[3801090,4456450,4784130,4980738,5242882,7340034,23461893,25034757,26214405,28573697,28704769,28770305,29032449,29097985,29294593,29556737,29884417,30146561,30212097,30277633,30343169,30408705,30605313,30736385,30801921,30932993,31129601,31195137,31522821,31653893,31784961,31916033,32112641,32178177,32309249,32374785,32440321,32702465,32964609,33030145,33095681,33357825,33685509,33816577,34209793,34078721,34275329,34603009,35651585,35848193,46727170,49348610,51707905,54067201,55050242,59113474,63438849,66060289,68026369,68681729,71303170,73269250,74973186,75694082,76349446,78577666,78643205],"v8runtimedebuggereventargs":[655368,983048,4849666,49545217,61800450,70516737,71696385,76546054],"virtual":[1114113,3342337,5963777,6029314,6291457,6356994,7208962,7405570,7536641,7602178,8257537,8519682,9043969,10682369,17498113,18087937,18284545,18546689,18939905,19529729,19726337,19791873,19988481,20119553,20316161,20381697,20578305,20774913,21037057,21102593,21299201,21430274,21495809,21561345,21626881,21692417,21954561,22216705,22413313,22478849,22544385,22609921,22675457,22872065,22937601,23003138,23199745,23527425,23592961,23658497,23789569,23855105,23920641,24117249,24182785,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24903681,25100289,25296897,25362433,25427969,25690113,25821185,25886721,26017793,26083329,26476545,26542081,26607617,26738689,26804225,27066369,27983873,28049409,28114945,28639233,29360129,33226753,33423361,34668545,35454977,36503553,36634625,37879809,38010881,39321601,39911425,40501249,40632321,40697857,41353217,41484289,42139649,43319297,43843585,44171265,44564481,45613057,46333953,46465025,46989313,48955393,49283073,50135041,51380225,51511297,52428801,57344002,58392577,58458113,58916865,59179009,59965441,60096514,60162049,60489729,60555265,60620801,60686337,60817409,60948481,61669377,62324737,62390273,62521345,62717953,62849025,62914561,63242241,63569921,63963137,64159745,64815105,65601537,65732609,65798145,65994753,66125825,66322433,66453505,66650113,66912257,67239937,67371009,67502081,67567617,68091905,68288513,68878337,69074945,69140481,69206017,69468161,69664769,69795841,69926913,70057985,70254593,70713345,71106561,71237633,72089601,72286209,72351745,72482817,73334785,73662465,73793537,74252289,74907649,77463553,77922305,78381057,80084993,80412675,80543745],"v8fasthostobject":[5439490,33161221,45285377,51707905,77266956,78577669]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_119.json b/docs/Reference/fti/FTI_119.json index 0e59d720a..b29ffcf16 100644 --- a/docs/Reference/fti/FTI_119.json +++ b/docs/Reference/fti/FTI_119.json @@ -1 +1 @@ -{"www":[10616833],"writeruntimeheapsnapshot":[7208961,29229060,60817409],"writeheapsnapshot":[4980737,27000836,58261505],"windowsscriptengineflags":[32309253,32833541,33685509,34275333,34734085,35127301,35454981,36044805,36503557,37224453,38207493,38469637,39124995,39190533,39976961,40173571,41287683,41811971,45613061,58392579,60096515,61407235,61538307,61669380],"windowsscriptengine":[6291462,6356998,6553606,7536646,8716290,8978440,36044804,39059461,39976961,40566785,40632325,40763393,41746433,42205190,42467329,43122689,43778050,43909124,44367873,44695553,44957700,45613060,46268418,49676289,50069505,54788097,56819713,57344001,58195969,58392591,60096527,60817409,60882952,61407249,61538321,61603862],"writes":[3604481,4980737,7208961,23724033,27000833,29229057,53673985,58261505,60817409],"written":[47054849,51642369,56492033],"webclient":[12910596],"writable":[4915201,5373953,5898241,6160385,16318465,16973825,17629185,20185089,31719426,41091074,56426498,56950785,57999362],"window":[4718593,30605313,46596098,50397186,57344001,60948482],"way":[9437185,13631489,23789569],"write":[3670017,12255233,17301509,17498113,18219009,23724034,27000834,29229058,60751873],"wrapnullresult":[9175042,42336257,45875201,49610753,50790401,59637761],"writeline":[8650753,9568257,12910595],"writer":[3604481,23724039,53673985],"widget":[10944513],"work":[57147394],"webclientt":[12910594],"waited":[50593793],"web":[12910594,41943041,59572225],"waiting":[7208961,26279937,60817409],"wrapping":[9175041,39059457,40632321,42074113,42205185,42336258,43909121,44957697,45088769,45875202,46268417,47775745,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"writejson":[3604481,23724036,53673985],"wrapped":[52035585,56098817],"windows":[786433,851969,1441796,1507332,4718593,4784129,5177345,6291457,6356993,6553601,6881281,7536641,7798785,8716290,8978434,13631489,16187393,16252929,18546689,19333121,21299201,23068673,23789569,30277636,30474244,30605316,30801924,30867460,31195140,31260676,31522820,31588356,31916036,32112644,32243716,32309253,32636932,32702468,32833541,32964612,33161220,33226756,33554436,33685509,33947652,34144260,34275333,34734085,35127301,35454981,35520516,36044807,36306948,36503557,37224453,37486596,38207493,38469637,38600705,39059457,39124993,39190533,39649281,39976967,40173569,40566789,40632321,40763394,41287681,41746437,41811969,42205186,42467333,43122693,43778053,43909121,44367877,44695557,44957697,45613063,46268418,46596097,47120385,49676293,50069509,50397188,50593794,53805060,54329348,54788101,55377926,55967748,56295428,56819717,57016325,57344005,58195969,58392582,58720262,59965441,60096518,60882955,60948485,61014021,61407240,61472774,61538312,61603852,61669382],"writebytes":[2621441,2686977,2818049,3211265,3670017,17498116,18219012,59375617,59834369,60162049,60424193,60751873],"wait":[50593793,61145089],"weight":[10944513]} \ No newline at end of file +{"wrapping":[10616833,57737217,58130433,60293121,61407233,62193665,63045633,64421890,64684033,65273857,68878338,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"writer":[6160385,43188231,80019457],"waiting":[11010049,36700161,76087297],"windows":[4,131073,262145,786436,5570561,5636097,5898241,6553601,8716290,9240577,9306113,9502722,9830401,11206657,11403265,15269889,18219009,26542081,26804225,39714820,40632324,41156612,41484292,41746436,41943045,42139652,42270725,42663940,42860548,42926085,43319300,43843588,44171269,44236804,44564484,44630020,45219845,45613060,45809669,46333956,46530564,46989317,47185924,47251460,47644676,48234501,48758785,48889861,48955397,49414149,50135045,50331652,50528260,50593797,50790405,51380228,51576833,52101125,52232199,52297733,52559876,52953095,53149703,53477377,53673989,54132741,54525953,54919173,55443457,56623106,57737217,59047937,60424193,62193665,63045633,64684034,65273857,69009413,69533698,70582273,70713349,71630853,73465860,73662468,74252292,74579973,74776582,75104264,77463556,77856769,77922308,78118914,78381061,78446593,79101957,79953932,80281606,80412678,80805894,81002502,81068043,81133573,81199109,81264648,81330182],"writeruntimeheapsnapshot":[11010049,39452676,76087297],"written":[57868289,69140481,78708737],"webclientt":[15990786],"writes":[6160385,7077889,11010049,39059457,39452673,43188225,75366401,76087297,80019457],"writejson":[6160385,43188228,80019457],"waited":[78118913],"wchar_t":[25624577,26869761,28704769,29491201,30081025,32964609,34275329,35651585,39583745,41222145],"wrapped":[73924609,74448897],"web":[15990786,61603841,76873729],"writeheapsnapshot":[7077889,39059460,75366401],"webclient":[15990788],"write":[4390914,13959169,16842753,16908294,20185089,21168129,22282246,23986177,39059458,39452674,43188226,44826625,49020929,51249155,78184450],"windowsscriptengineflags":[41943045,42270725,45219845,45809669,48234501,48889861,49414149,50593797,51576835,52101125,52232193,52297733,52953093,53149701,54132741,54919173,55443459,59047939,60424195,75104259,80281603,80412676,81002499,81264643],"widget":[12582913],"writebytes":[2818050,3276802,3473410,3997698,4390914,16842757,20185093,21168133,23986181,44826626,49020930,73138178,74645506,75497474,77135874,78184450],"weight":[12582913],"writeline":[9175041,10944513,15990787],"windowsscriptengine":[8716290,9306118,9502728,9830406,11206662,11403270,42926081,44171265,46989313,48955394,50135041,50790401,52232193,52953092,53149700,53673985,56623105,57737221,62193669,63045636,64684038,65273860,69009409,69533698,70713345,71630849,74579969,75104273,76087297,77856769,78381057,79953942,80281615,81002511,81068040,81264657],"www":[10747905],"writable":[6422529,7143425,9437185,12189697,17694721,18481153,19660801,20971521,55967746,56295426,71368706,75628546,76021761,77660161],"wait":[76939265,78118913],"window":[9240577,41746433,69009409,70582274,73465858,81133570],"work":[72744962],"way":[10354689,18219009,26542081,75431937],"wrapnullresult":[10616834,62128129,64421889,68878337,71237633,79429633]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_121.json b/docs/Reference/fti/FTI_121.json index 458729be2..82e637b2b 100644 --- a/docs/Reference/fti/FTI_121.json +++ b/docs/Reference/fti/FTI_121.json @@ -1 +1 @@ -{"yields":[61145089],"young":[38993921,54263810,58589185],"yield":[8126465,8454145,9437185,12713985,13041665,13500417,13697025,14286849,14483457,15007745,15138817,15269889,19136513,19922945,20709377,21037057,21430273,21889025,23199745,24248321,25100289]} \ No newline at end of file +{"yield":[8454145,8978433,10354689,14286849,14352385,14417921,15335425,15466497,15794177,15925249,17760257,20381697,20512769,21692417,22544385,24117249,24903681,26017793,26476545,27066369,27983873],"yields":[76939265],"young":[61014017,69402626,76152833]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_122.json b/docs/Reference/fti/FTI_122.json index 7d8fc3e97..827d18450 100644 --- a/docs/Reference/fti/FTI_122.json +++ b/docs/Reference/fti/FTI_122.json @@ -1 +1 @@ -{"zero":[40501249,48365569,54919169,57081857,58458113]} \ No newline at end of file +{"zero":[59703297,62455809,64487425,70451201,78905345]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_48.json b/docs/Reference/fti/FTI_48.json new file mode 100644 index 000000000..396aac4af --- /dev/null +++ b/docs/Reference/fti/FTI_48.json @@ -0,0 +1 @@ +{"0d43fe01":[8847361,9175041,13238273,13697025,13828097,15400961,15597569,15859713,17301505,18546689,19202049,20119553,20316161,20578305,20774913,21495809,23527425,25100289],"00a0c9054228":[8847361,9175041,13238273,13697025,13828097,15400961,15597569,15859713,17301505,18546689,19202049,20119553,20316161,20578305,20774913,21495809,23527425,25100289],"048":[76939265],"024":[76939265],"00aa00bbbb58":[42270721,45219841,50593793,52953089,53149697,54132737],"096":[76939265]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_49.json b/docs/Reference/fti/FTI_49.json new file mode 100644 index 000000000..6211f758f --- /dev/null +++ b/docs/Reference/fti/FTI_49.json @@ -0,0 +1 @@ +{"12":[10223617],"16777216":[64094209,66584577,67829761,69402625],"1000":[71565313,74055681],"123":[8847361,12582913],"128":[76939266,80412673],"1048576":[64094209,66584577,67829761,69402625],"16":[12845057,13631489,27656193,27852801,28770305,30801921,31326209,33292289,33357825,34209793,34537473,34865153,64094210,66584578,67829762,69402626,76873729,76939266,77660161,79233025,80412673],"192":[76939265],"1024":[54198273,57344001,69468161],"100":[10878977],"11cf":[8847361,9175041,13238273,13697025,13828097,15400961,15597569,15859713,17301505,18546689,19202049,20119553,20316161,20578305,20774913,21495809,23527425,25100289,42270721,45219841,50593793,52953089,53149697,54132737]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_50.json b/docs/Reference/fti/FTI_50.json new file mode 100644 index 000000000..0aa92416c --- /dev/null +++ b/docs/Reference/fti/FTI_50.json @@ -0,0 +1 @@ +{"256":[76939265,80412673]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_51.json b/docs/Reference/fti/FTI_51.json new file mode 100644 index 000000000..ed40d1a5c --- /dev/null +++ b/docs/Reference/fti/FTI_51.json @@ -0,0 +1 @@ +{"32":[8388609,10158081,10223617,11075585,11337729,11730945,12517377,17629185,18350081,20643841,21954561,23265281,23461889,23920641,25690113,26345473,26411009,26673153,27131905,27525121,27721729,27918337,28246017,28508161,28573697,28835841,29425665,29491201,29622273,29949953,30081025,30343169,30408705,30474241,30539777,30867457,31260673,31326209,31522817,31588353,31653889,31850497,32309249,32505857,32571394,33226753,33619969,33947649,34013185,34340865,34471937,34537473,34668545,34930689,35454977,35586050,35782657,36110337,36306945,36438017,37355521,38141953,38469633,38731777,38928385,39649281,40304641,40370177,40828929,42336257,44498945,44892161,44957697,45481985,49086465,50921473,59572225,66912257,76939266,80412673],"384":[76939265]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_52.json b/docs/Reference/fti/FTI_52.json new file mode 100644 index 000000000..ad4511bb5 --- /dev/null +++ b/docs/Reference/fti/FTI_52.json @@ -0,0 +1 @@ +{"42":[10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,14221313,15204353],"45":[12582913],"456":[8847361]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_53.json b/docs/Reference/fti/FTI_53.json new file mode 100644 index 000000000..34ed20c8d --- /dev/null +++ b/docs/Reference/fti/FTI_53.json @@ -0,0 +1 @@ +{"536":[76939265],"5x3":[10158081],"512":[76939265]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_54.json b/docs/Reference/fti/FTI_54.json new file mode 100644 index 000000000..7398fb478 --- /dev/null +++ b/docs/Reference/fti/FTI_54.json @@ -0,0 +1 @@ +{"64":[14221313,15204353,16449539,16646147,16777219,16842755,16908291,18153475,18677763,18743299,20185091,21168131,22282243,23986179,28246017,30146561,30277633,30998529,31784961,31916033,32047105,34340865,36569089,37421057,76939268,80412673],"65":[76939265],"6ac0":[42270721,45219841,50593793,52953089,53149697,54132737]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_55.json b/docs/Reference/fti/FTI_55.json new file mode 100644 index 000000000..47bb34f27 --- /dev/null +++ b/docs/Reference/fti/FTI_55.json @@ -0,0 +1 @@ +{"789":[8847361],"768":[76939265]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_56.json b/docs/Reference/fti/FTI_56.json new file mode 100644 index 000000000..446194c02 --- /dev/null +++ b/docs/Reference/fti/FTI_56.json @@ -0,0 +1 @@ +{"8080":[10747905],"8fast":[3801089,4063233,4259841,4456449,4784129,4980737,23068673,23265281,23461889,24248321,24772609,24838145,24969217,25034753,25493505,25559042,26148865,26214402,26345474,26411009,26673154,27000833,27131905,27459585,27590658,27721730,28180481,28377089,29163521,29687809,29753346,31653890,32243713,33423361,36503553,46661633,48693249,48824321,49348609,49676289,53411841,55050241,55574529,55902209,56557569,57606145,58064897,60030977,61472769,61865985,63832065,70320129,71303169,72024065,73269249,73728001,74317825,74973185,75300865,75694081,80936961],"8940":[8847361,9175041,13238273,13697025,13828097,15400961,15597569,15859713,17301505,18546689,19202049,20119553,20316161,20578305,20774913,21495809,23527425,25100289]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_97.json b/docs/Reference/fti/FTI_97.json index cb4c14e52..0b9c9c7f4 100644 --- a/docs/Reference/fti/FTI_97.json +++ b/docs/Reference/fti/FTI_97.json @@ -1 +1 @@ -{"allocation":[52101121],"attributes":[1572865,5242887,37027841,37814273,38010881,38535169,38797313,39518209,40239105,40304641,41156609,45940737,50593794,51118081,51576833,58130433,59375617,59834369,60162049,60293121,60424193,60751873,61210626],"affinity":[31522817,32309249,33161217,33685505,34144257,34734081,35454977,36306945,37224449,38207489,40566785,45613057,57016321,58392577,58720258,60096513,60817409,60882945,61407233,61538305,61603841],"astype":[3407873,5046273,8257541,58785793,59768833],"approach":[46333953,47906817,51052545,54001665],"auxiliarysearchpath":[45416449,46071812,60030977],"accepted":[24969217,25362434,25493505,26083329,26411010,26542081,26607617,26935297,27066370,27983874,28049410,28311553,28377090,28573698,29294594,29491201,29949953,30343170,30736385,31981570,32178177,34013186,35848193,37879810,60686338],"accommodate":[53870593],"addcomobject":[3735560,4587528,6291464,6357000,6553608,7208968,7536648,8716296,8978440,11927557,12320773,12648453,13369349,14024709,14155781,14876677,15597573,16842759,17235975,18087943,19070983,19988487,20774919,21495815,22478855,31064072,33423368,58195976,58327048,58392584,60096520,60817416,60882952,61407240,61538312,61603848],"affect":[61669377],"awaitdebuggerandpause":[50593793],"accelerate":[25362433,26411009,27066369,27983873,28049409,28377089,28573697,29294593,30343169,31981569,34013185,37879809,47382529,60686337],"addhosttype":[3735560,4587528,6291464,6357000,6553608,7208968,7536648,8716296,8978440,13041669,13500421,13697029,14286853,14483461,15007749,15138821,15269893,19136519,19922951,20709383,21037063,21430279,23199751,24248327,25100295,33292296,35258376,58195976,58327048,58392584,60096520,60817416,60882952,61407240,61538312,61603848],"accepts":[8388609,9306113,9568257],"allow":[45154305,51314689],"administrator":[983041],"applicable":[53477377,54722561,59113473,59506689,60358657],"addsystemdocument":[2031620,6815749,7405573,7864325,8847365,30670852,53870596],"attempting":[61407233,61538305,61603841],"activex":[3735568,4587536,5046275,6291472,6357008,6553616,7077889,7208976,7536656,8323074,8650754,8716304,8978448,10092545,11927553,12320769,12648449,12845057,13107201,13369345,14024705,14090241,14155777,14876673,14942209,15597569,15925249,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19660801,19988481,20643841,20774913,21364737,21495809,22413313,22478849,23265281,31064072,32047112,33423368,34209800,58195984,58327056,58392592,58785795,60096528,60817424,60882960,61407248,61538320,61603856],"automatic":[38404097,39059457,40632321,41353217,42074114,42205185,43909121,44957697,45088769,45219841,46268417,47775745,50987009,54198273,55574529,58195969,58261505,58327041,58392577,60096513,60817410,60882945,61145091,61407233,61538305,61603841],"addperformanceobject":[61145090],"allowing":[41353217,45219841],"addcomtype":[3735560,4587528,6291464,6357000,6553608,7208968,7536648,8716296,8978440,12845061,13107205,14090245,14942213,15925253,16777221,17563653,17760263,18350085,18612231,18743303,19660807,20643847,21364743,22413319,23265287,32047112,34209800,58195976,58327048,58392584,60096520,60817416,60882952,61407240,61538312,61603848],"associate":[22151169,22740993,26673153,26738689,27459585,27590657,28180481,28508161,28639233,28901377,29097985,29163521,29425665,29622273,29884417,31129601,31850497,33161217,33554433,33685505,34275329,34734081,35127297,36044801,36306945,37224449,37486593,38207489,38469633,39190529,45613057],"attached":[13631489,14548993,15466497,15532033,16187393,16908289,22216705,22806529,23068673,23789569,23920641,24641537],"await":[26279937,42532865,54853641,57147393,61276161],"arguments":[8126466,8388610,8454145,9109505,9306114,9437186,9568258,9699329,9830401,10092545,10223617,10289153,10420225,10485761,10682369,11075585,11141121,11206657,11337729,11665409,12058625,12124161,12189697,12255233,12517377,12582913,12713985,13041666,13500418,13697026,13828099,14221313,14286850,14483457,14614529,15007745,15138817,15269889,15400961,15990785,16646145,17891329,19136514,19398659,19922946,20709377,21037057,21430273,21626881,21757953,21889025,22282241,23003137,23199746,23592961,24248322,24903681,25100289,39059457,40632321,41353219,42074113,42205185,42401793,43909121,44957697,45088769,45219843,46268417,47775745,56360961,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"addtype":[4259843,11010053,12124165,12517381,37158915,54067203],"attributetargets":[53477396,54722596,55312388,59113492,59506704,60358692],"abc":[8323073],"able":[57540609],"asconstructor":[15400965,22282245],"argcount":[8388614,9306118,9568262],"accessible":[7929857,8585217,9240577,9895937,13303809,13828098,13959169,19398658,22609921,23396353,43057153,44433409,46465025,50659329,57540609,61145089],"address":[15728642,15794178,16580610,19202050,41943041,51511297],"application":[2621441,2686977,2818049,3145729,3211265,3670017,3735553,4128769,4521985,4587521,4980737,5177345,6291457,6356993,6553601,7208961,7536641,8716289,8978433,19791873,24444929,24576001,24707073,24969217,25493505,25559041,25821185,26017793,26083329,26542081,26607617,26935297,27525121,28311553,28704769,28966913,29491201,29556737,29949953,30212097,30736385,30998529,31391745,32178177,33095681,34930689,35848193,36110337,36831233,40763393,45744129,51511297,58195969,58261505,58327041,58392577,58654721,58916865,59375617,59834369,60096513,60162049,60227585,60293121,60424193,60751873,60817409,60882945,61014017,61145089,61407233,61538305,61603841],"appears":[61472769],"accept":[13828097,19398657],"analysis":[12910593],"ascii":[27000833,29229057],"assemblyname":[8126469,10813445,11468805,12124165,13041669,13500421,19136518,23199750],"assemblyqualifiedname":[10878977,13565953],"active":[4980737,7208961,26148865,27262977,50987009,55574529,58261505,60817409,61145089],"asynchronous":[2949121,6029313,7274497,16252929,17104897,17825793,18153474,18546689,19333121,19726337,20054017,20512769,21299201,55836673,57278465,59441153,61079553],"advantage":[26476545],"anonymous":[39059457,40632321,42074113,42205185,43057157,43909121,44957697,45088769,46268417,46465029,47775745,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"attempt":[42795009,45154305,48889857,51314689],"algorithm":[46071809,46333953,47316993,47906817,51052545,53411841,53477377,54001665,54591489,54722561,56950785],"addhostobject":[3735554,4587522,6291458,6356994,6553602,7143425,7208962,7536642,8060929,8126466,8257537,8323073,8454145,8650753,8716290,8912897,8978434,9043969,9306113,9437186,9502721,9568257,9699329,9830401,10092545,10289153,10354690,10420225,10485761,10616833,10682369,10878977,10944513,11075585,11141122,11206657,11337729,11665409,11927553,12058625,12189697,12255233,12320769,12582913,12648449,12713985,12845057,12910593,13041665,13107201,13303809,13369345,13500417,13565953,13697025,13828101,13959169,14024705,14090241,14155777,14286849,14417926,14483457,14876673,14942209,15007745,15138817,15269889,15597569,15925249,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19136513,19398663,19660801,19922945,19988481,20119560,20643841,20709377,20774913,21037057,21364737,21430273,21495809,21889025,22413313,22478849,22609921,23199745,23265281,23396353,24248321,25100289,32440322,34603010,54067201,57540609,58195970,58327042,58392578,59768833,60096514,60817410,60882946,61407234,61538306,61603842],"argument":[3407878,5046278,8323073,8650753,9764866,9830401,10092546,10223619,10878978,11141122,11927553,12255234,12320769,12845057,13565954,13828098,14024705,14942209,15597569,15925249,16842753,18153473,18350081,18612225,19005441,19070977,19398658,19660801,19988481,20054017,20643841,22478849,23265281,25165825,33751042,34734081,34865154,35127297,36044801,36175874,38207489,38731777,39190529,45613057,58785798,59768838],"addhosttypes":[3735553,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,12713988,21889030,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"abandons":[47906817,54001665],"access":[2621442,2686978,2818050,2883585,3014657,3211266,3342337,3670018,4521985,4784130,5177345,5570568,6029313,6291458,6356994,6488065,6553602,6815745,6881282,7143425,7274497,7405569,7536642,7864321,8060929,8716290,8847361,8978434,11730945,12255233,13303809,13631489,13828097,13959169,15728643,15794179,16580611,19202051,19398657,20578305,20905985,21168129,21561353,22347785,22609921,22872065,23396353,23789569,23855112,24510472,25886728,30277634,31195137,31916034,32636931,35520515,35651588,36634625,37421059,37552129,37945347,38010886,38535169,38928386,39059462,39321601,39256065,39976961,40042497,40108034,40566785,40632326,41222145,41418753,41549825,41746435,42008579,42074118,42205190,42401793,42598403,43057156,43581441,43909126,43974662,44171265,44302337,44433410,44695554,44957702,45088774,46268422,46465028,46923779,47185921,47251457,47316994,47775750,47972354,48168963,48758787,49348611,49676289,49938433,50659330,50921473,51183617,52297729,53411842,53477380,53870594,54067201,54591489,54722564,55377924,55705601,56360961,56819715,56950789,57016322,57278465,57540610,57606150,58195974,58327046,58392584,58654721,58720258,59113475,59310081,59375618,59506695,59572226,59834370,59965442,60096520,60162050,60227585,60358659,60424194,60489729,60751874,60817414,60882952,61014017,61145090,61407240,61538312,61603848,61669378],"accessflags":[40108036,41222145,53870593],"avoids":[47906817,54001665],"added":[131073,196609,262145,589825,8847361,54067201,56426497,57540609,57999361,61145089],"arrtype":[5046273,7602180,58785793],"action":[2621441,2686977,2818049,3211265,3670017,4784129,6881281,9830401,15728651,19202059,30474255,31916033,33226763,37421057,37945345,38600705,39649281,57016321,58720257,59375617,59834369,60162049,60424193,60751873],"asyncloadcallback":[40894468,41222145,53870593,59572225],"assigned":[9633793,10747905,11534337,45744129,46792705,58654721],"accelerating":[57147393,60620802],"alternative":[41549825],"additionally":[59441153],"accesscontext":[39059457,40632321,42074113,42205185,43057153,43909121,44433412,44957697,45088769,46268417,46465025,47775745,50659334,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"allows":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407874,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4653057,4849665,4980737,5046274,5111809,5439489,6881281,7798785,12910593,38010881,39059460,39976961,40632324,42074116,42205188,43909124,44433409,44957700,45088772,46071809,46268420,47775748,48168962,48496641,48758786,49283073,49348610,49676289,49938433,50659329,51183617,51576833,52297729,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,56819714,57212929,57540609,57671681,57933825,57999361,58130433,58195972,58261505,58327044,58392580,58523649,58589185,58654721,58720257,58785795,58851329,59113473,59244545,59310081,59506689,59703297,59768834,59899905,60096516,60227585,60358657,60489729,60555265,60817412,60882948,60948481,61407236,61472769,61538308,61603844],"ambiguous":[13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16187393,16908289,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537],"addassembly":[4259844,10813445,11468805,11862021,12451845,36765700,54067204],"accelerated":[4980742,7208966,24444930,24969217,25362433,25493505,25559042,25821186,26017794,26083329,26411009,26542081,26607617,26935297,27066369,27525122,27983873,28049409,28311553,28377089,28573697,28704770,28966914,29294593,29491201,29556738,29949953,30343169,30736385,30998530,31391746,31981569,32178177,33095682,34013185,34930690,35192835,35848193,36372483,37879809,38666243,39714819,58261510,60817414],"array":[2621443,2686979,2752514,2818052,3211267,3407874,3670025,5046274,5242882,7143427,7602180,8060931,8126467,9109505,9306120,9437185,9502724,9568264,9830406,9961473,10092545,10158081,10354695,10616833,10747905,11141121,11272193,11796481,12124161,12386305,12517377,12713985,12779521,13041665,13500417,13697025,13828098,14221313,14286849,14614529,15400961,15990785,16056326,16449541,16646145,16711683,17301510,17432579,17498115,17891332,18022403,18219011,18481155,19136513,19398658,19922945,21626881,21757953,21889025,22282241,23003137,23199745,23592961,24248321,24444929,24903684,24969217,25362433,25493505,25559041,25821185,26017793,26083329,26411009,26542081,26607617,26935297,27066369,27525121,27983873,28049409,28311553,28377089,28573697,28704769,28966913,29294593,29491201,29556737,29949953,30343169,30736385,30998529,31391745,31981569,32178177,33095681,34013185,34406402,34930689,35848193,37879809,38535169,39059457,40239105,40632321,41156609,42074113,42205185,42401795,43450370,43909121,44040193,44957697,45088769,46268417,46989313,47775745,49414146,52101121,56360963,57540610,58195969,58327041,58392577,58785794,59375619,59768834,59834371,60096513,60162051,60424196,60751883,60817409,60882945,61210625,61341699,61407233,61538305,61603841,61669377],"args":[3932161,9109509,10092549,10616837,11141125,14221317,14614533,15400965,15990789,16646149,17891334,21626885,21757958,22282245,23003142,23592965,24903686,39387137,42401798,54657025,55181313,56360966,58851329],"affects":[44433409,45154305,50659329,51314689,52822017,53280769,56950785,61669377],"assumes":[7143425,8060929,8126465,8257537,8323073,8650753,8912897,9043969,9306113,9437185,9568257,9699329,9830401,10289153,10354689,10420225,10485761,10616833,10682369,10878977,10944513,11075585,11141121,11206657,11337729,11665409,12058625,12189697,12255233,12582913,12910593,13565953],"assumed":[52690945,53149697,53542913,54263809],"abstractclassattribute":[52428801,53084161,55246849,55705601,56229889,57671681,58195969,59047937,59310081,59703297,59899905,60030977,60227585,60882945,61079553,61276161,61603841],"asynciterable":[18153478],"auto":[41353217,45219841],"assign":[31326209],"appear":[13828097,19398657,52822017],"asyncdocumentloadcallback":[38010881,40894471,57278468],"accordance":[50200577,53936129],"associated":[2621441,2686977,2752513,2818049,3145729,3211265,3670017,3735557,4128769,4521985,4587525,4980741,5177345,6291461,6356997,6553605,7208970,7536645,8716293,8978437,13631489,14548993,16187393,16908289,23068673,23789569,23920641,24576001,24641537,24707073,24969217,25362433,28049409,28966913,29949953,30146561,30212097,31391745,32374786,33488898,34078722,35061762,35192837,36110337,36569089,36831233,37355522,37748738,37879809,38404097,38666244,39059459,39321601,39387137,40435713,40632323,40763393,42074113,42205187,43712513,43909122,44957698,45088769,45744130,46202881,46268418,47513601,47775745,47841281,48365569,48955393,49741825,50069505,54132737,54657025,54788097,54984705,57540609,58195974,58261510,58327046,58392583,58458113,58654722,58851330,58916865,58982401,59375617,59703297,59834369,60096519,60162049,60227585,60293121,60424193,60751873,60817419,60882951,61014017,61407240,61538312,61603848],"absolute":[6094849,6029313,6225921,6488065,7274497],"async":[2949121,6029313,7274497,18153475,40894465,54853633,57278465,61079553,61210628],"augment":[46071809],"assemblynames":[7143429,8060933,11272197,12386309],"assemblies":[5046274,7143429,8060932,11272195,11796487,12386307,12779527,30932994,37683206,46071809,53477377,54067207,58785794,59113473],"addrestrictedhostobject":[3735554,4587522,6291458,6356994,6553602,7208962,7536642,8716290,8978434,13303813,13959173,22609927,23396359,33619970,35717122,58195970,58327042,58392578,60096514,60817410,60882946,61407234,61538306,61603842],"actions":[3014657,4521985,55705601,60227585],"allocate":[38993921,52101121,58589185],"acme":[7143427,8060931,54067203],"arrayt":[9568258,9830402],"adds":[1769473,2031620,2752514,3276801,4259848,6815745,7405569,7864321,8847361,9699329,10289153,10420225,10485761,10682369,10813441,10944513,11010049,11075585,11206657,11337729,11468801,11665409,11862017,12058625,12124161,12189697,12451841,12517377,12582913,16121857,30670852,36765700,37158915,53870596,54067208,56426497,57540610,57999361],"available":[13828097,16252929,18546689,19333121,19398657,21299201,39911425,40501249,41549825,41943041,44236801,45744129,46202881,47251457,47382530,48103425,48365570,48693249,51511297,54919169,56164354,57081857,58458114,58654721,58982401,59244545,60620801,61145089],"additional":[26804225,27656193,28901377,29622273,38010881,45744129,50200577,53936129,58654721,59506689,60686337],"attributeusageattribute":[53477380,54722564,55312388,59113476,59506692,60358660],"attempts":[27197441,30867457,31588353,32112641,32964609,41549825,46333953,47251457,51052545],"allowcategorymismatch":[59572225],"arraybuffer":[2621445,15728643,16580611,17432578,18022402,18219010,37027841,37814275,37945346,38535170,38797315,38993921,40239107,41156611,44040197,44564481,45350913,50200577,52101123,53936129,58589185,59375623,59834372,60162051,60424195,60751875,61210625,61341698],"applies":[9764865,10092545,13565953,47251457,59965441],"ancestors":[5242881],"allowreflection":[10878977,13565953,39059457,40632321,42074113,42205185,43909121,44957697,45088769,45154308,46268417,47775745,51314694,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"applied":[55312385],"attribute":[1572865,2490373,2555909,2883589,3342341,3538949,4849669,5242886,5570561,5636097,5701633,12976129,20578305,20905985,21168129,21561345,22347777,22872065,23330817,23855105,24510465,25034753,25427969,25886721,34996226,35651585,37552129,38010881,38928387,39059457,40632321,41418753,42008579,42074113,42205185,42598403,42860546,43909121,43974657,44957697,45088769,45416449,46137347,46268417,46530563,46792707,46923779,47775745,47972355,50462721,50593794,52953091,53477386,54591489,54722570,55312397,57606145,58130435,58195969,58327041,58392577,59113485,59506697,60030977,60096513,60358669,60817409,60882945,61407233,61538305,61603841],"add":[589825,720897,917505,1769473,2752514,3276801,4259841,6815745,7405569,7864321,8323075,8847361,9699330,10289154,10420226,10485762,10682370,10813442,11010050,11075586,11206658,11272193,11337730,11468803,11665410,11862018,11927553,12058626,12124163,12189698,12255234,12320769,12451843,12517378,12582914,12648449,12713985,12779521,12845057,13041665,13107201,13303809,13369345,13500417,13697025,13828097,13959169,14024705,14090241,14155777,14286849,14417921,14483457,14876673,14942209,15007745,15138817,15269889,15597569,15925249,16121864,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19136513,19398657,19660801,19922945,19988481,20119553,20643841,20709377,20774913,21037057,21364737,21430273,21495809,21889025,22413313,22478849,22609921,23199745,23265281,23396353,24248321,25100289,30670849,31064065,32047105,32440321,33292289,33423361,33619969,34209793,34603009,35258369,35717121,36765697,37158913,54067201,55377921,56426497,57540610,57999361,61145089],"arr":[7602177,9502721,10354689,34406401],"avoid":[13434881],"assembly":[589825,720897,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,3735554,4259849,4587522,4915201,5046273,5242881,5308417,5373953,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291458,6356994,6422529,6488065,6553602,6619137,6684673,6750209,6815745,6946817,7012353,7077889,7143426,7208962,7274497,7340033,7405569,7471105,7536642,7602177,7667713,7733249,7864321,7929857,7995393,8060930,8126467,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716290,8781825,8847361,8912897,8978434,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813445,10878978,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468805,11534337,11599873,11665409,11730945,11796487,11862031,11927553,11993089,12058625,12124163,12189697,12255233,12320769,12386305,12451855,12517377,12582913,12648449,12713985,12779527,12845057,12910593,12976129,13041667,13107201,13172737,13238273,13303809,13369345,13434881,13500419,13565954,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16515073,16449537,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136515,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199747,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30736385,30801921,30867457,30998529,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31850497,31916033,31981569,32112641,32178177,32243713,32309249,32636929,32702465,32768001,32833537,32964609,33095681,33161217,33226753,33292290,33554433,33685505,33947649,34013185,34144257,34275329,34734081,34930689,35127297,35258370,35454977,35520513,35848193,36044801,36306945,36503553,36569089,36765705,37158913,37224449,37486593,37683202,37879809,38207489,38273025,38469633,38731777,39190529,39452673,39583745,39845889,40042497,40108033,40501249,40828929,40894465,40960001,41025537,41353217,41549825,41615361,41680897,41746433,42139649,42270721,42336257,42401793,42467329,42663937,42729473,42795009,42860545,42926081,42991617,43057154,43122689,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,45023233,45154305,45219841,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45875201,45940737,46006273,46071809,46333953,46399489,46465026,46530561,46661633,46727169,46792705,46989313,47054849,47185921,47251457,47316993,47382534,47448065,47513601,47579137,47710209,47841281,47906817,48037889,48103425,48168961,48234497,48300033,48431105,48496641,48562177,48627713,48693249,48758785,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477381,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067213,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195971,58261505,58327043,58392579,58458113,58523649,58589185,58654721,58720257,58785794,58851329,58916865,58982401,59047937,59113477,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030978,60096515,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817411,60882947,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407235,61472769,61538307,61603843,61669377],"arbitrary":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47775745,48496641,49283073,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"ability":[55312385],"auxiliary":[45416449,46071810,60030977],"api":[22151169,52690945,54132737,54263809,54853633],"addition":[3014657,4521985,10944513,12255233,13828097,19398657,55705601,60227585],"automatically":[1,15466497,15532033,19791873,22216705,22806529,51511297,55312385,60817409,61145089],"ambiguity":[61145089],"asynchronously":[1835009,1966081,6029313,7274497,38010881,40894465,41222145,53084161,53870593,57278465,58523649],"arrays":[13828098,19398658,38535169,60424193,60751873,61669378],"activities":[57147393],"applications":[55377921,58392577,60096513,60882945],"arra":[3670017,16449538,40239105,41156609,46989313,60424193,60751875],"allocated":[50200577,52101121,53936129],"assigning":[9830401,50987009,55574529],"abstract":[589825,5242881,5505025,5963777,6094849,6029313,6225921,6422529,6488065,6684673,6946817,7274499,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16449537,16580609,16646145,16711681,16777217,16842753,16908289,17039361,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17694721,17760257,17891329,17956865,18022401,18087937,18219009,18350081,18415617,18481153,18612225,18677761,18743297,18874369,18939905,19070977,19136513,19202049,19398657,19464193,19529729,19595265,19660801,19791873,19922945,19988481,20119553,20250625,20316163,20447233,20643841,20709377,20774913,20971523,21037057,21102593,21233665,21364737,21430273,21495809,21626883,21757953,21823489,21889025,22085633,22216705,22282243,22413313,22478849,22544385,22609921,22806529,23003137,23068673,23199745,23265281,23396353,23527427,23592963,23658497,23789569,23920641,23986179,24117251,24182787,24248321,24379393,24576001,24641537,24707075,24903683,25100289,25296899,27197441,27918337,28246017,28770305,30212097,30277633,30474241,30539779,30605313,30801921,30867457,31195137,31260673,31588353,31653889,31916033,32112641,32636929,32964609,33226753,33947649,35520513,38010881,38273025,39583745,39845889,40042497,40501249,40828929,40960001,41025537,41353217,41615361,41680897,42139649,42336257,42401793,42467329,42663937,42729473,42795009,42991617,43057153,43122689,43253761,43384833,43450369,43515905,43581441,43646977,43712513,43778049,44040193,44105729,44171265,44236801,44302339,44367873,44433409,44564481,44630017,44761089,44826625,44892161,45154305,45219841,45285379,45350913,45481985,45678593,45875201,45940737,46006273,46333953,46399489,46465025,46530561,46727169,46989313,47054849,47185921,47316993,47513601,47579139,47710209,47841281,47906817,48103425,48168961,48234497,48300033,48496641,48627713,48693249,48758787,48889857,48955393,49020929,49152001,49283073,49348609,49414145,49545217,49610753,49676289,49741825,49938433,50135041,50397185,50528257,50659329,50790401,50921473,51052545,51183619,51314689,51445761,51642369,51838977,51904513,51970049,52297729,52428801,52953089,53084162,53411841,53805057,54001665,54329345,54525953,55050243,55246849,55705602,55771140,55967745,56229890,56295425,56360964,56623105,56819713,56885251,57409539,57671682,58195970,59047937,59310083,59703298,59899906,60030977,60227586,60882946,61079553,61276161,61603842],"awaitdebuggerandpauseonstart":[61145089],"attach":[39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,47775745,48496641,49283073,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841]} \ No newline at end of file +{"addsystemdocument":[1835012,6619141,6684677,6815749,8650757,45678596,79888388],"accordance":[71041025,72220673],"associated":[2097153,2752513,2818049,3211265,3276801,3473409,3735557,3866625,3997697,4063233,4259841,4325377,4390913,5111809,5242881,5373957,5439489,5570561,5701633,5963777,6946817,7077893,8716293,9306117,9502725,9830405,11010058,11206661,11403269,15269889,16384001,18219009,19464193,24510465,25296897,26542081,26804225,28639233,29360129,31457281,32505857,33619969,34406401,34471937,34734081,34799617,35061761,35782657,36372481,38141953,38469633,38600705,39387137,39976962,41287681,42401793,43384833,43450369,43515905,43909122,44040193,44302337,45285377,45875201,46465025,48496642,49217537,49545217,50003973,51904513,52822018,53018626,53870594,54853636,56164353,56426497,56623105,57409538,57737219,58130433,59637761,59834369,60293121,60358658,61407233,61800449,62193667,62455809,62980099,63045634,64684035,65273858,67239937,68222977,69533698,69795841,70320129,70516737,71172097,71630849,72351745,72417281,72548355,73138177,73596929,74514433,74579969,74645505,75104264,75366406,75497473,75890689,76087307,76218369,76283905,76414977,76546050,76742657,77135873,77266945,77856774,78184449,78512134,78577665,78905345,78970882,79495169,79626241,79953928,80084993,80281607,80478209,80936961,81002503,81068039,81199105,81264648],"arg":[7340033,14876677,18874373,19136517,20905989,23461889,25034753,26214401,28573697,28704769,28770305,29032449,29097985,29294593,29556737,29884417,30146561,30212097,30277633,30343169,30408705,30605313,30736385,30801921,30932993,31129601,31195137,31522817,31653889,31784961,31916033,32112641,32178177,32309249,32374785,32440321,32702465,32964609,33030145,33095681,33357825,33685505,33816577,34078721,34209793,34275329,34603009,35651585,35848193,54067201,59113473,63438849,66060289,68026369,68681729,76349441],"arr":[7733249,10158081,11337729,45154305],"activex":[3735568,4521987,5373968,7929857,8716304,8847362,9175042,9306128,9502736,9830416,11010064,11206672,11403280,11468801,13172737,13238273,13434881,13500417,13697025,13828097,14745601,14811137,15073281,15400961,15597569,15859713,17235969,17301505,17825793,18087937,18284545,18546689,19202049,19988481,20119553,20316161,20578305,20774913,21495809,22216705,22478849,22937601,23527425,23592961,24182785,25100289,45350920,47710216,48168968,51183624,75104272,75956227,76087312,77856784,78512144,79953936,80281616,81002512,81068048,81264656],"addcomtype":[3735560,5373960,8716296,9306120,9502728,9830408,11010056,11206664,11403272,13434885,13697029,13828101,14811141,15073285,15597573,17235973,19202053,19988487,20316167,20578311,22216711,22478855,23527431,23592967,25100295,47710216,51183624,75104264,76087304,77856776,78512136,79953928,80281608,81002504,81068040,81264648],"arbitrary":[57737217,57999361,58130433,60293121,61407233,62193665,63045633,64684033,65273857,68288513,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"allows":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538946,3604481,3866625,3932161,4128769,4194305,4325377,4521986,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,9895937,15990785,45547521,52232193,56033281,57147394,57737220,57999361,58130436,60293124,61407236,62193668,62390273,62717953,63045636,63635457,64684036,65273860,66519041,67502082,68288513,68943873,69206018,69533700,70713345,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,74907649,75038721,75104260,75169793,75366401,75431937,75628545,75759617,75956227,76087300,76152833,76349441,76414977,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856772,77987842,78249985,78381058,78512132,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953924,80019457,80084993,80216065,80281604,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002500,81068036,81133569,81264644,81330177],"attempt":[57278465,61669377,63963137,67764225],"attributetargets":[73990164,74842148,75038724,75759636,79167504,80216100],"ancestors":[6356993],"arrayt":[8585218,10944514],"automatic":[57737217,58130433,59834369,60293122,61407233,62062593,62193665,63045633,64684033,65273857,67567617,69533697,71565313,74055681,75104257,75366401,76087298,76939268,77856769,78512129,79953921,80150529,80281601,81002497,81068033,81264641],"affects":[56033281,57278465,62717953,63963137,75235329,75563009,76021761,80412673],"attributes":[851969,4456450,4784130,4980738,5767172,6356999,27721730,29753346,33882115,39911427,43712515,45547521,48103425,48824322,49872899,51707905,53608449,56885249,59244545,60751873,61538305,62652418,62783489,63307777,63766529,64356353,64618498,73138177,73269250,74645505,74711041,74973186,75431940,75497473,75694082,76283905,77135873,77660162,78118914,78184449,78839809,79233026],"addhosttype":[3735560,5373960,8716296,9306120,9502728,9830408,11010056,11206664,11403272,14286853,14352389,15335429,15466501,15794181,15925253,17760261,20512773,21692423,22544391,24117255,24903687,26017799,26476551,27066375,27983879,50855944,54722568,75104264,76087304,77856776,78512136,79953928,80281608,81002504,81068040,81264648],"asyncloadcallback":[52756481,61341700,76873729,79888385],"awaitdebuggerandpauseonstart":[76939265],"attached":[15269889,15728641,16187393,16384001,18219009,19464193,22872065,23855105,26542081,26804225,28639233,29360129],"api":[22085633,64094209,69402625,76218369,76611585],"addcomobject":[3735560,5373960,8716296,9306120,9502728,9830408,11010056,11206664,11403272,13172741,13238277,13500421,14745605,15400965,15859717,17301509,17825797,18087943,18284551,18546695,20119559,20774919,21495815,22937607,24182791,45350920,48168968,75104264,76087304,77856776,78512136,79953928,80281608,81002504,81068040,81264648],"accessor":[33882118,41615366,43712518,51118086,79036417],"attributeusageattribute":[73990148,74842116,75038724,75759620,79167492,80216068],"allocate":[61014017,72155137,76152833],"auxiliary":[54657025,63635458,69992449],"accepted":[36175873,36241410,36372482,37552129,37945346,38207489,38273026,39387138,39518210,40108033,40239106,40435713,43122689,43515906,43581442,44040193,44433410,48037889,48365569,49217537,49741826,49807361,52625410,54460417,79757314],"asconstructor":[16121861,23789573,27000837,31981574,39780358,79822853],"arrtype":[4521985,7733252,75956225],"await":[36700161,61276161,72744961,76611593,77201409],"automatically":[196609,15728641,16187393,21757953,22872065,23855105,70975489,75038721,76087297,76939265],"avoid":[13303809],"auxiliarysearchpath":[54657025,63635460,69992449],"appears":[81330177],"accept":[16711681,23199745],"addmethodgetter":[5767172,34668549,35323909,37158917,38928389,58654724,75431940],"additionally":[77791233],"algorithm":[56688641,58916865,62259201,63635457,64290817,65077249,66650113,72286209,73990145,74842113,76021761],"anonymous":[57737217,58130433,60293121,60817413,61407233,62193665,63045633,64684033,65273857,66387973,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"add":[655361,983041,1114113,1966081,2883585,3080193,3211266,6619137,6684673,6815745,8650753,8847363,10551298,11534338,11599875,11730946,11796482,11927554,12058626,12124162,12386306,12451843,12517378,12713986,12845058,12910594,13172737,13238273,13434881,13369345,13500417,13565955,13631490,13697025,13762561,13828097,13893634,13959170,14024705,14221314,14286849,14352385,14417921,14745601,14811137,15073281,15204354,15335425,15400961,15466497,15597569,15794177,15859713,15925249,16711681,17235969,17301505,17760257,17825793,17891329,18087937,18284545,18546689,19202049,19529736,19988481,20119553,20250625,20316161,20381697,20512769,20578305,20774913,21102593,21495809,21692417,22216705,22478849,22544385,22609921,22937601,23199745,23527425,23592961,24117249,24182785,24379393,24903681,25100289,26017793,26476545,27066369,27983873,33882113,34668545,35323905,37158913,38666241,38928385,39911425,41615361,43712513,45350913,45678593,46792705,47710209,48168961,49152001,49872897,50462721,50855937,51118081,51183617,51773441,51838977,52035585,54722561,55377921,58654721,62652417,64618497,71368705,74121217,74776577,75628545,76414978,76939265],"allowreflection":[11862017,19005441,57278468,57737217,58130433,60293121,61407233,62193665,63045633,63963142,64684033,65273857,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"attempting":[75104257,79953921,81264641],"abc":[8847361],"added":[589825,720897,1114113,1376257,6815745,71368705,74121217,75628545,76414977,76939265],"ascii":[39059457,39452673],"actions":[3342337,5963777,80084993,80543745],"asynchronous":[3670017,4456449,4784129,4980737,5767170,9043969,10682369,17039361,17170433,17956865,18415617,18808834,19398657,20054017,21233665,24772611,25231361,26935297,36503554,37814275,47775746,51707905,69337089,73269249,74973185,75431938,75694081,77791233,78249985,78774273,80936961],"absolute":[6291457,7208961,7405569,9043969,10682369],"addrestrictedhostobject":[3735554,5373954,8716290,9306114,9502722,9830402,11010050,11206658,11403266,17891333,20250629,21102599,22609927,52035586,55377922,75104258,76087298,77856770,78512130,79953922,80281602,81002498,81068034,81264642],"access":[2818052,2949121,3145729,3276804,3342337,3473412,3997700,4390916,5570561,5963777,5898242,6488072,6553602,6619137,6684673,6815745,7405569,7995393,8650753,8716290,9043969,9109505,9306114,9502722,9830402,10682369,11206658,11272193,11403266,13959169,14876675,16318467,16711681,16973827,17367041,17891329,18219009,18612225,18874371,19070979,19136515,20250625,20905987,21102593,22020099,22151169,22609921,23199745,23396361,24051720,25165833,25952264,26542081,28311553,28966920,33882113,41156611,41615361,42663937,42926083,43319298,43712513,45547526,46202885,46333955,47448065,47644674,48103425,49545217,49938437,50790402,51118081,51707906,52232193,52756481,53542915,53673985,54001665,55312388,56033282,57147395,57671682,57737222,57933825,58130438,58261505,58392577,58523649,59768834,60293126,60817412,61079553,61407238,61734913,61931521,62193670,62259202,62324737,62390273,62717954,63045638,63373318,64159745,64684038,65077249,65273862,65798145,65863683,66387972,66519041,66781187,67043329,67502083,68157442,69206019,69337089,69533702,69926913,70713345,71499782,72286210,73138180,73990148,74121217,74645508,74776581,74842116,74907649,75104264,75497476,75759619,76021765,76087302,76414978,76480513,76873730,76939266,77135876,77856774,78184452,78381059,78446594,78512134,78970881,79036418,79101954,79167495,79888386,79953928,80084993,80216067,80281608,80412674,80543745,80674817,80805890,81002504,81068040,81199105,81264648],"avoids":[58916865,64290817],"arraybuffer":[3473417,16646146,16973827,17432578,18153474,19070979,19136515,20905987,21168130,23986178,46202884,47906818,48103426,49020930,53608449,56885251,58195969,59244547,61014017,61145089,62783491,64356355,66846725,69861378,71041025,72155139,72220673,73138187,74645508,75497475,76152833,77135875,78184451,79233025],"adds":[1835012,1966081,2883592,3080193,3211266,5767180,6619137,6684673,6815745,8650753,10551297,11534337,11599873,11730945,11796481,11927553,12058625,12124161,12386305,12451841,12517377,12582913,12713985,12845057,12910593,13565953,13631489,13893633,14221313,15204353,19529729,33882113,34668545,35323905,37158913,38666241,38928385,39911425,41615361,43712513,45678596,46792705,49872897,50462724,51118081,51838979,58654724,62652420,64618500,71368705,74121224,75431948,75628545,76414978,79888388],"args":[4849665,9633797,9895937,10747909,10878981,11468805,14680069,15007749,16056325,16121861,16252933,20447238,22413317,23789573,25362438,25624577,25821190,26279937,26869761,27000837,27328513,27525121,27656193,27787265,27852801,27918337,28049414,28114949,28246017,28442625,28508161,28835841,28901377,29163525,29229057,29425665,29491201,29622273,29818881,29949953,30015489,30081025,30474241,30670849,30867457,30998529,31064065,31260673,31326209,31391745,31588353,31719425,31850497,32047105,32571393,32768001,32833537,33488897,33947649,34340865,34537473,35586049,51052545,60227585,61079558,61800449,65011713,69926918,70516737,71696385,76546049,77529089,79822853,80609285],"addtype":[2883587,11599877,12058629,12713989,51838979,74121219],"accommodate":[79888385],"assemblies":[4521986,7995397,9109508,12976131,13369347,13762567,15138823,43974662,46596098,63635457,73990145,74121223,75759617,75956226],"approach":[56688641,58916865,64290817,66650113],"assemblyname":[8978437,11534341,11599877,12451845,15925253,17760261,21692422,22544390],"allocated":[71041025,72155137,72220673],"async":[3670017,4063233,9043969,10682369,18808835,24772609,26148865,28377090,36503554,37814273,47775745,61341697,69337089,76611585,78774273,79233028,80936961],"augment":[63635457],"asyncdocumentloadcallback":[45547521,61341703,69337092],"additional":[39256065,40828929,43778049,45481985,45547521,60358657,62980097,71041025,72220673,72548353,78970881,79167489,79757313],"allow":[57278465,63963137],"assemblyqualifiedname":[11862017,19005441],"allocation":[72155137],"array":[2818051,3211266,3276804,3473411,3538946,3997699,4390923,4521986,6356994,7733252,7995395,8585222,8978435,9109507,9633793,10027009,10158087,10354689,10485761,10747905,10878977,10944520,11075592,11337732,11468801,11599873,12713985,12976129,13041665,13369345,13762561,14090243,14352385,14417921,14680065,15007745,15138817,15925249,16056321,16121857,16252929,16449539,16646147,16711682,16777219,16908294,17432579,17760257,18743302,19595269,20185091,20381697,20447236,20512769,21168131,21692417,22282243,22413313,22544385,23199746,23789569,24117249,24903681,25362433,25821188,28049409,28114945,36044801,36175873,36241409,36372481,37552129,37748737,37945345,38076417,38207489,38273025,39387137,39518209,40042497,40108033,40239105,40435713,42401793,43122689,43515905,43581441,44040193,44433409,44826625,45154306,45744129,45875201,46858241,47513601,47906817,48037889,48103425,48365569,49020929,49217537,49741825,49807361,50266116,50987009,51249156,51970049,52625409,53215233,54460417,54984705,56360962,57737217,58130433,60293121,61079555,61407233,62193665,62783489,62849026,63045633,64356353,64684033,65273857,65929217,66846721,69533697,69861379,69926915,72155137,73138179,74645507,75104257,75497475,75956226,76087297,76414978,76939268,77135876,77856769,77987842,78184461,78512129,79233025,79953921,80281601,80412673,81002497,81068033,81264641],"advances":[4063233,4259841,24838145,28377089,70320129,80936961],"accelerated":[7077894,11010054,36044802,36175873,36241409,36372481,37552129,37748738,37945345,38076418,38207489,38273025,39387137,39518209,40042498,40108033,40239105,40435713,42401794,43122689,43515905,43581441,44040193,44433409,45744130,45875202,46858242,47513602,48037889,48365569,49217537,49741825,49807361,50003971,50987010,51642371,51970050,52625409,54460417,54853635,54984706,57212931,75366406,76087302],"asynchronously":[2162689,2228225,4063234,9043969,10682369,28377089,45547521,52756481,61341697,69337089,75169793,79691777,79888385,80936962],"analysis":[15990785],"auto":[62062593,67567617],"addhosttypes":[3735553,5373953,8716289,9306113,9502721,9830401,11010049,11206657,11403265,14417924,20381702,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"alternative":[61931521],"appear":[16711681,23199745,75235329],"awaitdebuggerandpause":[78118913],"active":[7077889,11010049,38338561,39124993,71565313,74055681,75366401,76087297,76939265],"addpropertyaccessors":[5767172,38666245,39911429,41615365,43712517,62652420,75431940],"affinity":[39714817,41943041,42270721,45219841,47251457,48889857,50331649,52297729,52559873,53149697,53673985,54919169,75104257,76087297,79101953,79953921,80281601,80805890,81002497,81068033,81264641],"arrays":[16711682,23199746,48103425,76939265,77135873,78184449,80412674],"attempts":[43843585,44564481,45613057,49283073,51380225,56688641,61734913,61931521,66650113],"ambiguous":[14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,18022401,18219009,19464193,19857409,21037057,21364737,21561345,21626881,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129],"associate":[22085633,22740993,35258369,36896769,37027841,38731777,39649281,39714817,41680897,41943041,42205185,42270721,42532865,42991617,43778049,44498945,44761089,45219841,45481985,46530561,47316993,48234497,49086465,50331649,50528257,50593793,52101121,52297729,52953089,53149697,54132737],"accessflags":[52756481,59768836,79888385],"attribute":[851969,1769477,2031621,2949125,3145733,4653061,5046277,6356998,6488065,6881281,8126465,14614529,17367041,18612225,22151169,22806529,23396353,24051713,25165825,25952257,27197441,27394049,28311553,28966913,45547521,47448065,53542915,53936130,54657025,55312385,56492035,57671683,57737217,57933825,58130433,60293121,60882947,61407233,62193665,63045633,63373313,63700993,64684033,65077249,65273857,65536003,65863683,66781187,67960834,68157443,69533697,69992449,70254595,71499777,73990154,74711043,74842122,75038733,75104257,75759629,76087297,77856769,78118914,78512129,79167497,79233026,79953921,80216077,80281601,81002497,81068033,81264641],"addassembly":[2883588,11534341,11796485,12451845,13565957,50462724,74121220],"application":[2097153,2752513,2818049,3276801,3473409,3735553,3997697,4063233,4259841,4390913,5373953,5570561,5963777,7077889,8716289,9306113,9502721,9830401,11010049,11206657,11403265,21757953,24510465,25296897,36044801,36175873,37552129,37748737,38076417,38207489,40042497,40108033,40435713,42401793,43122689,44040193,45744129,45875201,46465025,46858241,47513601,48037889,48365569,49217537,49807361,50987009,51904513,51970049,54460417,54984705,56164353,56623105,60358657,62980097,70320129,70975489,72548353,73138177,74645505,75104257,75366401,75497473,76087297,76283905,76939266,77135873,77856769,78184449,78512129,78970881,79495169,79953921,80084993,80281601,80936961,81002497,81068033,81199105,81264641],"argcount":[8388614,10944518,11075590],"accessible":[8192001,8323073,10092545,10420225,16711682,17891329,20250625,21102593,22609921,23199746,56033281,60817409,62717953,66387969,76414977,76939265],"ability":[75038721],"addperformanceobject":[76939266],"ambiguity":[76939265],"arra":[4390913,19595266,62783489,64356353,65929217,77135873,78184451],"accelerate":[36241409,36372481,37945345,38273025,39387137,39518209,40239105,43515905,43581441,44433409,49741825,52625409,67895297,79757313],"allowcategorymismatch":[76873729],"addhostobject":[3735554,5373954,7995393,8454145,8585217,8716290,8847361,8912897,8978434,9109505,9175041,9306114,9502722,9830402,9961473,10158082,10223617,10354690,10747905,10551297,10878978,10944513,11010050,11075585,11206658,11337729,11403266,11468801,11730945,11862017,11927553,12124161,12386305,12517377,12582913,12845057,12910593,13172737,13238273,13434881,13500417,13631489,13697025,13828097,13893633,13959169,14024710,14221313,14286849,14352385,14417921,14745601,14811137,15073281,15204353,15335425,15400961,15466497,15597569,15794177,15859713,15925249,15990785,16711685,17235969,17301505,17760257,17825793,17891329,18087937,18284545,18546689,19005441,19202049,19988481,20119553,20250625,20316161,20381697,20512769,20578305,20774913,21102593,21495809,21692417,22216705,22478849,22544385,22609921,22937601,23199751,23527425,23592961,24117249,24182785,24379400,24903681,25100289,26017793,26476545,27066369,27983873,49152002,51773442,74121217,75104258,76087298,76414977,77856770,77987841,78512130,79953922,80281602,81002498,81068034,81264642],"able":[76414977],"advised":[34406401,45285377,77266945,78577665],"acme":[7995395,9109507,74121219],"attach":[57737217,57999361,58130433,60293121,61407233,62193665,63045633,64684033,65273857,68288513,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"activities":[72744961],"accessors":[5767172,38666242,39911426,41615362,43712514,62652421,75431940],"asynciterable":[18808838],"advanced":[24838145,28377089],"abandons":[58916865,64290817],"accesscontext":[56033284,57737217,58130433,60293121,60817409,61407233,62193665,62717958,63045633,64684033,65273857,66387969,69533697,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"assumes":[7995393,8585217,8847361,8912897,8978433,9109505,9175041,9961473,10158081,10223617,10354689,10747905,10551297,10878977,10944513,11075585,11730945,11862017,11927553,12124161,12386305,12517377,12582913,12845057,12910593,13631489,13893633,13959169,14221313,15204353,15990785,19005441],"argument":[2818050,3276802,3473410,3538950,3997698,4390914,4521990,5767170,7340070,8585217,8847361,9175041,9568258,9895978,10878978,11468802,11665411,11862018,13238273,13697025,13828097,13959170,14876675,15400961,15597569,15859713,16711682,17301505,18546689,18808833,18874371,19005442,19136515,19202049,19922945,20054017,20119553,20316161,20578305,20774913,20905987,21495809,23199746,23527425,25100289,25624580,26279940,26869764,27328515,27525123,27656196,27787267,27852804,27918339,28246019,28442628,28508163,28573699,28704770,28770306,28835843,28901379,29032451,29097987,29229060,29294595,29425668,29491203,29556738,29622276,29818884,29884419,29949955,30015492,30081027,30146563,30212098,30277635,30343170,30408706,30474242,30605313,30670852,30736387,30801923,30867459,30932994,30998532,31064068,31129602,31195138,31260675,31326211,31391747,31588355,31719428,31784962,31850498,31916034,32047108,32112643,32178178,32309251,32374787,32440323,32505858,32571395,32702466,32768003,32833540,32964610,33030146,33095682,33357826,33488899,33619970,33816578,33947651,34013186,34078723,34209795,34275331,34340867,34471938,34537475,34603009,34668546,35586051,35651587,35782658,35848194,35979265,36110338,36438018,37355522,38141954,38469634,38928386,40370178,42270721,42729473,43646978,44957698,45219841,46202882,46923778,49479682,49938434,50069508,50593793,51052563,51707905,52494340,52953089,53149697,53739522,54067219,54132737,56754178,58654722,59113476,63438849,66060289,68026369,68681729,72417282,73138178,74514434,74645506,75431938,75497474,75956230,76349483,76939265,77135874,77266945,77529130,77987846,78184450,78577665,79626244,80478212],"assumed":[64094209,66584577,67829761,69402625],"affect":[80412673],"assembly":[1,393217,524289,655361,327681,786433,917505,983041,1114113,2359297,2883593,3735554,4521985,5373954,5505025,5832705,6029313,6225921,6291457,6356993,6422529,6488065,6619137,6684673,6750209,6815745,6881281,7012353,7143425,7208961,7274497,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7929857,7995394,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716290,8781825,8847361,8912897,8978435,9043969,9109506,9175041,9306114,9371649,9437185,9502722,9568257,9633793,9699329,9764865,9830402,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010050,11075585,11141121,11206658,11272193,11337729,11403266,11468801,11534341,11599875,11665409,11730945,11796495,11862018,11927553,11993089,12058625,12124161,12189697,12255233,12386305,12451845,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565967,13631489,13697025,13762567,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138823,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925251,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760259,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005442,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692419,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544387,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,26935297,27000833,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28246017,28180481,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36306945,36372481,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38404097,38469633,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40632321,40697857,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,41943041,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43712513,43778049,43843585,43974658,44040193,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44761089,44892161,44957697,45023233,45088769,45219841,45285377,45416449,45481985,45613057,45744129,45809665,45875201,46137345,46333953,46465025,46530561,46792705,46858241,46989313,47054849,47120385,47185921,47251457,47316993,47513601,47644673,48037889,48234497,48365569,48562177,48889857,48955393,49086465,49217537,49283073,49414145,49741825,49807361,49872897,50135041,50331649,50462729,50528257,50593793,50659329,50724865,50790401,50855938,50921473,50987009,51118081,51380225,51511297,51838977,51970049,52101121,52297729,52428801,52559873,52625409,52953089,53149697,54132737,54198273,54460417,54591489,54657025,54722562,54919169,54984705,55508993,55771137,56033281,56229889,56360961,56688641,56950785,57016321,57147393,57278465,57344001,57475073,57868289,57999361,58195969,58327041,58392577,58458113,58523649,58785793,58916865,58982401,59179009,59310081,59441153,59506689,59572225,59637761,59703297,59768833,59899905,59965441,60030977,60096513,60162049,60489729,60555265,60620801,60686337,60817410,60882945,60948481,61079553,61145089,61341697,61472769,61669377,61734913,61865985,61931521,62062593,62128129,62259201,62324737,62390273,62521345,62586881,62717953,62849025,62914561,63111169,63176705,63242241,63307777,63373313,63438849,63504385,63569921,63635457,63700993,63766529,63832065,63963137,64028673,64094209,64159745,64225281,64290817,64421889,64487425,64552961,64749569,64815105,64880641,64946177,65011713,65077249,65142785,65208321,65339393,65404929,65536001,65601537,65732609,65667073,65798145,65929217,65994753,66060289,66125825,66191361,66256897,66322433,66387970,66453505,66519041,66584577,66650113,66715649,66846721,66912257,66977793,67043329,67108865,67174401,67239937,67305473,67371009,67436545,67502081,67567617,67698689,67764225,67829761,67895302,67960833,68026369,68091905,68222977,68288513,68354049,68419585,68485121,68550657,68616193,68681729,68747265,68812801,68878337,68943873,69009409,69074945,69140481,69206017,69271553,69337089,69402625,69468161,69599233,69664769,69730305,69795841,69861377,69926913,69992450,70057985,70123521,70189057,70254593,70320129,70385665,70451201,70516737,70647809,70713345,70778881,70844417,70909953,70975489,71041025,71106561,71172097,71237633,71303169,71368705,71434241,71499777,71565313,71630849,71696385,71761921,71827457,71892993,71958529,72024065,72089601,72155137,72220673,72286209,72351745,72417281,72482817,72548353,72613889,72679425,72744961,72810497,72876033,72941569,73007105,73072641,73138177,73203713,73269249,73334785,73400321,73465857,73531393,73596929,73662465,73728001,73793537,73859073,73924609,73990149,74055681,74121229,74186753,74252289,74317825,74383361,74448897,74514433,74579969,74645505,74711041,74842113,74907649,74973185,75038721,75104259,75169793,75235329,75300865,75366401,75431937,75497473,75563009,75628545,75694081,75759621,75825153,75890689,75956226,76021761,76087299,76152833,76218369,76283905,76349441,76414977,76480513,76546049,76611585,76677121,76742657,76808193,76873729,76939265,77004801,77070337,77135873,77201409,77266945,77332481,77398017,77463553,77529089,77594625,77660161,77725697,77791233,77856771,77922305,77987841,78053377,78118913,78184449,78249985,78315521,78381057,78446593,78512131,78577665,78643201,78708737,78774273,78839809,78905345,78970881,79036417,79101953,79167489,79233025,79298561,79364097,79429633,79495169,79560705,79626241,79691777,79757313,79822849,79888385,79953923,80019457,80084993,80150529,80216065,80281603,80347137,80412673,80478209,80543745,80609281,80674817,80740353,80805889,80871425,80936961,81002499,81068035,81133569,81199105,81264643,81330177],"applies":[9568257,11468801,19005441,61734913,78446593],"applied":[75038721],"assemblynames":[7995397,9109509,12976133,13369349],"action":[2818050,3276802,3473410,3997698,4390914,5898241,6553601,8585217,16318475,18874379,19070987,20905995,40632335,42860555,43319297,46202882,48758785,49938434,53477377,73138178,74645506,75497474,77135874,78184450,79101953,80805889],"accelerating":[72744961,79560706],"allowing":[62062593,67567617],"advantage":[47120385],"assigning":[8585217,71565313,74055681],"abstractclassattribute":[68943873,69992449,71172097,71958529,72613889,75431937,76480513,76677121,77201409,77266945,77332481,77594625,77856769,78577665,78774273,79691777,79953921,80084993,80543745,81068033],"administrator":[458753],"astype":[3538945,4521985,8912901,75956225,77987841],"applications":[74776577,80281601,81002497,81068033],"abstract":[1114113,6029313,6291457,6356993,7208961,7405569,7536641,7602177,8257537,8519681,9043971,10682369,13172737,13238273,13303809,13434881,13500417,13697025,13828097,14024705,14090241,14155777,14286849,14352385,14417921,14483457,14548993,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17104897,17235969,17301505,17432577,17498113,17629185,17760257,17825793,17891329,18022401,18087937,18153473,18219009,18284545,18350081,18546689,18677761,18743297,18874369,18939905,19070977,19136513,19202049,19333121,19464193,19529729,19595265,19726337,19791873,19857409,19988481,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20774913,20905985,21037057,21102593,21168129,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21954563,22020097,22216705,22282241,22413315,22478849,22544385,22609921,22675459,22872065,22937601,23003137,23068673,23199745,23265281,23461889,23527425,23592961,23658499,23789571,23855105,23920643,23986177,24117249,24182785,24248321,24313857,24379393,24444931,24510467,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25362433,25427969,25493505,25559041,25296897,25690115,25821187,25886723,26017793,26083329,26148865,26214401,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,27000833,27066369,27131905,27459585,27590657,27721729,27983873,28049409,28114947,28180481,28377089,28639233,29163521,29360129,29687809,29753345,31653889,32243713,33226753,33423363,34668547,35454977,36503555,36634625,37879809,38010881,39321603,39911427,40501249,40632321,40697857,41156609,41353217,41484289,41746433,42139649,42663937,42860545,43319297,43843585,44171265,44564481,44630017,45547521,45613057,46333953,46465025,46989313,47644673,48955393,49283073,50135041,51380225,51511299,52428801,56033281,56229889,56360961,56688641,56950785,57147393,57278465,57344001,57868289,57999361,58195969,58327041,58392579,58458113,58523649,58785793,58916865,58982401,59179009,59506689,59572225,59637761,59703297,59899905,59965441,60030977,60096513,60162049,60489731,60555265,60620801,60686337,60817409,60882945,60948481,61079553,61145089,61472769,61669377,61865985,62062593,62128129,62259201,62324737,62390275,62521347,62717953,62849025,62914563,63111169,63176705,63242241,63307777,63569923,63832065,63963137,64159745,64290817,64421889,64552961,64815105,65208321,65339393,65404929,65601537,65732609,65667073,65798145,65929217,65994753,66125827,66322433,66387969,66453505,66519041,66650113,66846721,66912260,67043329,67108865,67239937,67305473,67371009,67502083,67567617,67764225,68091905,68222977,68288513,68485121,68812801,68878337,68943874,69074948,69140481,69206017,69468161,69664769,69795841,69926916,69992449,70057985,70254593,70647809,70713345,71106561,71172098,71237633,71958529,72089601,72286209,72351745,72482817,72613890,73334785,73465857,73662465,73728001,73793537,74252289,74907649,75431938,76480515,76677121,77201409,77266946,77332482,77463553,77594625,77856770,77922305,78381057,78577666,78774273,79691778,79953922,80084994,80543746,81068034],"applicable":[73990145,74842113,75759617,79167489,80216065],"addition":[3342337,5963777,12582913,13959169,16711681,23199745,80084993,80543745],"available":[16711681,23199745,55246849,56950785,59703297,60358657,61603841,61734913,61931521,62455810,62980097,64487425,67895298,69664769,70451201,70975489,72548353,73334785,73859074,76939265,77398017,77660161,78905346,78970881,79560705],"assign":[33292289,33751041,34865153,34930689,35717121,36306945,36569089,37224449,37421057,38797313,38862850,39583745,40566786,41222145,42008577,42795009,44367873,45416449,46137345,54591489],"address":[14876674,16318466,16973826,18874370,19070978,19136514,20905986,22020098,61603841,70975489],"addpropertygetter":[5767172,33882117,46792709,49872901,51118085,64618500,75431940],"assigned":[10485761,10813441,12779521,33882113,34668545,35323905,37158913,38928385,46792705,49872897,51118081,60358657,62980097,65536001,72548353,77660161,78970881],"accepts":[8388609,10944513,11075585],"arguments":[8388610,8454145,8585217,8978434,9633793,10354690,10551297,10878977,10944514,11075586,11468801,11599873,11665409,11730945,11927553,12124161,12386305,12517377,12713985,12845057,12910593,13631489,13893633,13959169,14221313,14286849,14352386,14417921,14680065,15007745,15204353,15335425,15466497,15794177,15925250,16056321,16121857,16252929,16711683,17760258,20381697,20447233,20512770,21692418,22413313,22544386,23199747,23789569,24117250,24903682,25362433,25821185,26017793,26476545,27000833,27066369,27983873,28049409,28114945,29163521,51707905,57737217,58130433,60227585,60293121,61079553,61407233,62062595,62193665,63045633,64684033,65011713,65273857,67567619,69533697,69926913,75104257,76087297,77529090,77856769,78512129,79822849,79953921,80281601,80609281,81002497,81068033,81264641]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_98.json b/docs/Reference/fti/FTI_98.json index 8965d185c..93a40a587 100644 --- a/docs/Reference/fti/FTI_98.json +++ b/docs/Reference/fti/FTI_98.json @@ -1 +1 @@ -{"boolean":[1835009,3735554,4587523,4980742,5242882,5373955,5898243,6094850,6225922,6291459,6356995,6553603,6946820,7208971,7536643,8388609,8716293,8912898,8978435,9175042,9371650,9764866,10027010,10158082,10223618,12910594,13172737,13631493,13893633,14352386,14548993,14745601,14811138,15073281,15335426,15400962,15532033,16187395,16318467,16973827,17039362,17694722,18284546,18874373,19464193,19595266,20447233,21233665,22085633,22282243,22806529,22937602,23068676,23527426,23789574,23986179,24117250,24641537,24838146,25362435,25624578,25755650,25821185,26411011,27066371,27918340,27983875,28049411,28377091,28573699,28704769,28966913,29294595,30081026,30343171,30605314,30998529,31391745,31719426,31981571,32374785,32636930,33488897,34013187,34078721,34930689,35061761,35192835,35520514,36110337,36372483,36831233,37355521,37748737,37879811,38273029,38666243,39452673,39714819,39845890,40042498,40763393,41091074,41353218,41615362,41746434,42336258,42467331,42795010,43057154,43122693,43450370,43581442,44171266,44892162,45154306,45219842,45481986,45875202,46333954,46465026,47185922,47382530,47710210,47906818,48234498,48300034,48627714,48889858,49020930,49414146,51052546,51314690,52035586,52559874,52822018,53280770,54001666,54525954,54853634,56098818,56426498,57999362,58064898,58195971,58261510,58327042,58392579,58523649,60096515,60817419,60882949,61407235,61538307,61603843,61669377],"begins":[4980738,7208962,24838145,25624577,25755649,30081025,31588353,32964609,34340866,38076418,58261506,60817410],"begincpuprofile":[4980738,7208962,24838149,25624581,25755653,30081029,34340866,38076418,58261506,60817410],"buffer":[2621441,3211265,15728641,15794177,16580609,16711681,17432577,17498113,18022401,18219009,18481153,19202049,37027841,37421057,37814273,37945345,44040194,44564481,44826625,45350913,52101121,59375617,59834369],"bag":[131073,196609,589825,1769473,2752513,3276801,4915201,5373953,5898241,6160385,9371649,10551297,11534337,16121857,16318465,16515073,16973825,17039361,17629185,17694721,18284545,18808833,19595265,20185089,31719425,34537473,41091073,42663937,43188225,43253761,46858241,48431105,49152001,56426497,57540609,57999361],"bar":[8323073,12255233],"baz":[8323073,12255234],"basic":[3014659,4521987,7471106,7929858,7995394,8585218,9240578,9895938,16252930,17104898,17825794,18153474,18546690,19005442,19333122,19726338,20054018,20512770,21299202,55705603,60227587],"beginning":[13828097,19398657],"buggy":[51511297],"blocked":[47316993,53411841,53477377,54722561,56950785,59441153],"byref":[19595267,24444930,24969220,25362434,25493508,25559042,25821186,26017794,26083332,26411010,26542084,26607620,26935300,27066370,27525122,27983874,28049410,28311556,28377090,28573698,28704770,28966914,29294594,29491204,29556738,29949956,30343170,30736388,30998530,31391746,31981570,32178180,33095682,34013186,34930690,35848196,37879810,52166658],"button":[7143427,8060931,54067203],"bytes":[2621442,2686978,2818050,3211266,3670018,16711685,17432581,17498117,18022401,18219013,18481153,37027841,37814273,38797313,39911431,40239105,41156609,44826625,45350913,49086465,49479681,49872897,50200577,50331649,50724865,52101121,52690945,53149697,53542913,53936129,54263809,54460417,55640065,56164353,56557569,59244551,59375619,59834371,60162051,60424195,60751875],"build":[24969217,25362433,25493505,26083329,26411009,26542081,26607617,26935297,27066369,27983873,28049409,28311553,28377089,28573697,29294593,29491201,29949953,30343169,30736385,31981569,32178177,34013185,35848193,37879809],"bailout":[53608449],"bailoutreason":[37617665,53608452,55115777],"bit":[9043969],"based":[524289,1048577,13828097,19398657,37617666,39059457,40632321,42074113,42205185,43909121,44957697,45088769,46268417,46333955,47316993,47775745,47906817,51052547,53411841,53477377,54001665,54591489,54722561,54919169,55115778,55902209,56950785,57081857,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"byte":[2621443,2686979,2818051,3211267,3407873,3670019,4980754,5046273,7208978,10420231,16711688,17432584,17498120,18022406,18219016,18481158,24444933,24969221,25362438,25493509,25559045,25821190,26017797,26083333,26411013,26542085,26607621,26935301,27066373,27525125,27983878,28049414,28311557,28377093,28573701,28704774,28966918,29294597,29491205,29556741,29949957,30343174,30736389,30998534,31391750,31981573,32178181,33095685,34013190,34930694,35192841,35848197,36372489,37879814,38666249,39714825,58261522,58785793,59375619,59768833,59834371,60162051,60424195,60751877,60817426],"box":[41943041],"breaking":[43450369,49414145,52690945,53149697,53542913,54263809],"bool":[5242884,5373955,5898243,6094852,6225924,6946824,8912899,9175043,9371651,9764867,10027011,10158083,10223619,12910595,13631491,14352387,14811139,15335427,15400963,16187395,16318467,16973827,17039364,17694724,18284547,18874372,19595268,22282243,22937603,23068676,23527427,23789572,23986179,24117251,24838147,25362435,25624579,25755651,26411011,27066371,27918340,27983875,28049411,28377091,28573699,29294595,30081027,30343171,30605315,31981571,32636931,34013187,35520516,37879811,38273028,39845892,40042501,41353221,41615364,41746435,42336261,42467332,42795014,43057157,43122692,43450374,43581445,44171270,44892165,45154309,45219846,45481989,45875206,46333958,46465030,47185926,47382533,47710213,47906821,48234502,48300037,48627717,48889861,49020933,49414149,51052549,51314694,52035589,52559877,52822021,53280773,54001670,54525958,54853637,56098821,58064899],"behavior":[3014666,4521994,38010881,38404097,39321601,40042497,42074113,42795009,43057153,44171265,46333953,46465025,48889857,51052545,51773441,53346305,55312385,55705611,58261505,59441154,60227594,60817409,61145090],"bound":[8126465,8454145,9437185,12713985,13041665,13500417,13697025,14286849,14483457,15007745,15138817,15269889,19136513,19922945,20709377,21037057,21430273,21889025,23199745,24248321,25100289,47316993,48168961,48758785,49348609,49676289,49938433,51183617,52297729,53411841,53477377,54591489,54722561,56819713,56950785,61407233,61538305,61603841],"braces":[8323073,8650753,11927553,12320769,12845057,14024705,14942209,15597569,15925249,16842753,18350081,18612225,19070977,19660801,19988481,20643841,22478849,23265281,34734081,35127297,36044801,38207489,39190529,45613057],"base":[5242882,13303809,13959169,22609921,23396353,38010884,39976961,56229889,57671681,58195969,60227585,61603841],"bigint":[61145090],"bidirectional":[61145090],"benefit":[61145089],"boundary":[9699329,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12582913],"binary":[3014657,4521985,44761089,55705601,60227585],"behave":[50200577,53936129,58720257],"binding":[39059458,40042497,40632322,42074114,42205186,42795009,43909122,44171265,44957698,45088770,46268418,46333956,47316993,47775746,47906820,48889857,51052548,53411841,53477377,54001668,54591489,54722561,56950785,58195970,58327042,58392578,60096514,60817410,60882946,61407234,61538306,61603842],"bypasses":[47906817,54001665],"behalf":[39059457,40632321,42205185,43909121,44957697,46268417,46596097,50397185,57344001,58392577,60096513,60882945,60948481,61407233,61538305,61603841,61669377],"bypassing":[6815745,7405569,7864321,8847361],"background":[57147395],"begin":[24838145,25624577,25755649,30081025,34340865,38076417,59572225],"bind":[46333953,51052545],"bypassed":[25362433,26411009,27066369,27983873,28049409,28377089,28573697,29294593,30343169,31981569,34013185,37879809,60686337],"blank":[47710209,48234497,51707906,52559873]} \ No newline at end of file +{"bailout":[74186753],"biginteger":[4915202,7340035,9895939,28442631,28508167,33030151,34078727,37224455,51052546,51445762,54067202,76349443,77529091,79364098],"blank":[56229889,64880642,66453505,67698689],"base":[6356994,17891329,20250625,21102593,22609921,45547524,52232193,68943873,72613889,77266945,77856769,78577665,79953921,80084993],"backed":[5767172,33882113,41615361,43712513,51118081,62652418,64618498,75431940],"benefit":[76939265],"behalf":[57737217,62193665,63045633,64684033,65273857,69009409,69533697,70582273,73465857,75104257,79953921,80281601,80412673,81002497,81068033,81133569,81264641],"bool":[6291460,6356996,6422531,7143427,7208964,8519688,9568259,9961475,10289155,10616835,11665411,11993091,13041667,15269891,15532035,15990787,16121859,17498116,17629187,18219011,18939908,19333123,19660803,19791876,20840451,20971523,21430276,21954563,22675459,23789571,24444931,24838147,25559043,26411011,26542084,26673155,26804228,27000835,27328515,27459587,27525126,27590659,27918339,28246019,28377091,28508163,28704771,28770307,28835843,28901379,29032451,29491203,29556739,29949955,30015491,30081027,30212099,30343171,30408707,30474243,30605315,30867459,31129603,31195139,31260675,31326211,31391747,31588355,31784963,31850499,31916035,31981571,32571395,32702467,32964611,33030147,33095683,33226756,33357827,33488899,33816582,33947651,34340867,34537475,34603011,35389443,35520515,35586051,35717123,35848195,36241411,36372483,36634628,37289987,37945347,38273027,39190531,39387139,39518211,39780355,40239107,40501252,41156611,41353220,41746435,42467331,42926083,43515907,43581443,44171268,44433411,46333956,46989316,49741827,52625411,56229893,56360965,56688645,57278469,58327044,58523653,58916870,59179013,60620806,60817414,61669382,62062597,62324742,62849030,63438852,63963142,64159750,64290821,64421893,65404932,65667077,66060292,66387973,66453510,66650118,67043333,67567622,67698693,67764229,67895301,68026372,68681732,68878342,69074949,70385668,71106565,72089605,72679427,73793541,73924613,74448901,75235333,75563013,76611589,79822851],"byref":[14876674,17498115,18874370,19136514,20905986,23068674,23265282,23461890,24969218,25034754,25559044,26148866,26214402,26345474,27000836,27525122,27918338,28246018,28508162,28704770,28770306,28835842,29163524,29491202,29556738,29949954,30081026,30212098,30343170,30408706,30474242,30539778,30605314,30867458,31129602,31195138,31260674,31326210,31522818,31588354,31653890,31784962,31850498,31916034,32571394,32636930,32702466,32964610,33030146,33095682,33357826,33685506,33816578,33947650,34340866,34537474,34603010,35586050,35848194,36044802,36175876,36241410,36372482,37552132,37748738,37945346,38076418,38207492,38273026,39387138,39518210,40042498,40108036,40239106,40435716,42401794,43122692,43515906,43581442,44040196,44433410,45744130,45875202,46858242,47513602,48037892,48365572,49217540,49741826,49807364,50987010,51970050,52625410,54460420,54984706,78053378,78643202,79298562,79822852,80609284],"bytes":[2818052,3276804,3473412,3997700,4390916,14090241,16449541,16646149,16842757,17432577,18153477,18677765,20185093,21168133,23986181,44826627,47906819,49020931,53215235,53608449,55246855,56885249,59244545,59506689,61145089,62783489,64094209,64356353,66191361,66584577,66977793,67829761,68747265,69402625,69730305,70844417,71041025,71827457,72155137,72220673,73138181,73203713,73400321,73859073,74645509,75497477,77135877,77398023,78184453],"blocked":[62259201,72286209,73990145,74842113,76021761,77791233],"bidirectional":[76939267],"buggy":[70975489],"bind":[56688641,66650113],"begin":[35389441,35520513,37289985,42467329,48431105,53346305,76873729],"b6d1":[42270721,45219841,50593793,52953089,53149697,54132737],"behavior":[3342346,5963786,45547521,49545217,56688641,58523649,59834369,60293121,60817409,61669377,64159745,66387969,66650113,67764225,70778881,74383361,75038721,75366401,76087297,76939266,77791234,80085002,80543755],"bigint":[76939266],"bypassing":[6619137,6684673,6815745,8650753],"begincpuprofile":[7077890,11010050,35389445,35520517,37289989,42467333,48431106,53346306,75366402,76087298],"build":[36175873,36241409,36372481,37552129,37945345,38207489,38273025,39387137,39518209,40108033,40239105,40435713,43122689,43515905,43581441,44040193,44433409,48037889,48365569,49217537,49741825,49807361,52625409,54460417],"binary":[3342337,5963777,60096513,80084993,80543745],"based":[327681,1572865,16711681,23199745,51707907,56688643,56819714,57737217,58130433,58916865,60293121,61407233,62193665,62259201,63045633,64290817,64487425,64684033,65077249,65273857,66650115,69533697,70451201,72286209,72417281,73990145,74842113,75104257,76021761,76087297,76742657,77856769,78512129,79953921,80281601,80347138,80478209,80740353,81002497,81068033,81264641],"buffer":[2818049,3473409,14090241,14876673,16318465,16449537,16646145,16842753,16973825,17432577,18153473,18677761,18874369,19070977,19136513,20185089,20905985,21168129,22020097,23986177,44826625,46202881,47906817,49020929,49938433,53215233,53608449,56885249,58195969,59506689,61145089,66846722,72155137,73138177,74645505],"bailoutreason":[56819713,74186756,80347137],"basic":[3342339,5963779,8060930,8192002,8323074,8781826,10092546,10420226,17039362,17170434,17956866,18415618,18808834,19398658,19922946,20054018,21233666,25231362,26935298,80084995,80543747],"begins":[7077890,11010050,35389441,35520513,37289985,42467329,43843585,44564481,48431106,53346306,75366402,76087298],"behave":[71041025,72220673,80805889],"biguint64array":[78184449],"bypassed":[36241409,36372481,37945345,38273025,39387137,39518209,40239105,43515905,43581441,44433409,49741825,52625409,79757313],"breaking":[56360961,62849025,64094209,66584577,67829761,69402625],"beginning":[16711681,23199745],"big":[28442625,28508161,33030145,34078721,37224449],"bigint64array":[78184449],"bit":[10223617,76939266],"byte":[2818057,3276809,3473417,3538945,3997705,4390921,4521985,4915202,7077906,7340035,9895939,11010066,12386311,14090246,16449545,16646153,16842761,17432582,18153481,18677769,20185097,21168137,23986185,28835847,30670855,32112647,35848199,36044805,36175877,36241414,36372486,37552133,37748741,37945349,38076422,38207493,38273030,38797319,39387142,39518214,40042502,40108037,40239109,40435717,42401798,43122693,43515910,43581445,44040197,44433413,44826628,45744133,45875206,46858246,47513605,47906820,48037893,48365573,49020932,49217541,49741829,49807365,50003977,50987014,51052546,51445762,51642377,51970053,52625413,53215236,54067202,54460421,54853641,54984709,57212937,73138185,74645513,75366418,75497481,75956225,76087314,76349443,77135881,77529091,77987841,78184459,79364098],"bound":[8454145,8978433,10354689,14286849,14352385,14417921,15335425,15466497,15794177,15925249,17760257,20381697,20512769,21692417,22544385,24117249,24903681,26017793,26476545,27066369,27983873,57147393,62259201,62390273,65077249,66519041,67502081,69206017,70713345,72286209,73990145,74842113,74907649,75104257,76021761,78381057,79953921,81264641],"bypasses":[58916865,64290817],"boolean":[2228225,3735554,4456449,4784129,4915202,4980737,5373955,6291458,6356994,6422531,7077894,7143427,7208962,7340035,8388609,8519684,8716293,9306115,9502723,9568258,9830403,9895939,9961474,10289154,10616834,11010059,11206659,11403267,11665410,11993090,13041666,14155777,15269891,15532034,15728641,15990786,16121858,17498114,17629186,18022401,18219013,18939906,19333122,19464193,19660803,19791874,19857409,20840450,20971523,21037057,21364737,21430277,21954562,22675458,22872065,23789571,24313857,24444931,24838146,25427969,25559043,26411010,26542086,26673154,26738689,26804228,27000834,27328514,27459586,27525127,27590658,27918338,28246018,28377090,28508162,28639233,28704770,28770306,28835842,28901378,29032453,29491202,29556738,29949954,30015493,30081026,30212098,30343170,30408706,30474242,30605314,30867458,31129602,31195138,31260674,31326210,31391746,31588354,31784962,31850498,31916034,31981570,32571394,32702466,32964610,33030146,33095682,33226754,33357826,33488898,33816583,33947650,34340866,34537474,34603010,35389442,35520514,35586050,35717125,35848194,36241411,36372483,36634626,37289986,37945347,38076417,38273027,39190530,39387139,39518211,39780354,40042497,40239107,40501252,41156610,41353221,41746434,42401793,42467330,42926082,43515907,43581443,43909121,44171267,44433411,45088769,45875201,46333954,46661633,46858241,46989317,48496641,49741827,50003971,50987009,51052546,51445762,51642371,51904513,52625411,52822017,53018625,53870593,54067202,54853635,55967746,56164353,56229890,56295426,56360962,56623105,56688642,57212931,57278466,57409537,58327042,58523650,58916866,59179010,60620802,60817410,61669378,62062594,62324738,62849026,63438850,63963138,64159746,64290818,64421890,65404930,65667074,66060290,66387970,66453506,66650114,67043330,67567618,67698690,67764226,67895298,68026370,68681730,68878338,69074946,70385666,71106562,71368706,72089602,72679426,73269249,73793538,73924610,74448898,74973185,75104259,75169793,75235330,75366406,75563010,75628546,75694081,76087307,76349443,76611586,77529091,77856771,78512130,79364098,79822850,79953923,80281603,80412673,81002499,81068037,81264643],"boundary":[10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,14221313,15204353],"background":[72744963],"bag":[589825,720897,1114113,1966081,3080193,3211265,6422529,7143425,9437185,10289153,11141121,12189697,12779521,17498113,17694721,18481153,18939905,19529729,19660801,19791873,20840449,20971521,21889025,22347777,53084161,54394881,55967745,56295425,58589185,59310081,60686337,63242241,65732609,71368705,75628545,76414977],"bar":[8847361,13959169],"baz":[8847361,13959170],"braces":[8847361,9175041,13238273,13697025,13828097,15400961,15597569,15859713,17301505,18546689,19202049,20119553,20316161,20578305,20774913,21495809,23527425,25100289,42270721,45219841,50593793,52953089,53149697,54132737],"box":[61603841],"binding":[56688644,57737218,58130434,58523649,58916868,60293122,61407234,61669377,62193666,62259201,63045634,64159745,64290820,64684034,65077249,65273858,66650116,67764225,69533698,72286209,73990145,74842113,75104258,76021761,76087298,77856770,78512130,79953922,80281602,81002498,81068034,81264642],"button":[7995395,9109507,74121219]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_99.json b/docs/Reference/fti/FTI_99.json index f97f99de5..374f79bb4 100644 --- a/docs/Reference/fti/FTI_99.json +++ b/docs/Reference/fti/FTI_99.json @@ -1 +1 @@ -{"cachedocument":[1835010,1966081,6094853,6225925,53084161,58523650],"cnn":[12910593],"constructor":[4915201,5308417,5373953,5570561,5636097,5701633,5767169,5832705,5898241,6160385,6619137,7340033,7667713,8192001,8781825,10092545,11141122,11272193,11403265,11796481,11993089,12386305,12779521,12976129,13631489,13828098,15400961,16318465,16384001,16973825,17629185,19267585,19398658,19857409,20185089,20381697,20578305,20840449,20905985,21168129,21561345,21692417,21954561,22020097,22151169,22282241,22347777,22675457,22740993,22872065,23330817,23789569,23855105,24313857,24510465,25034753,25231361,25427969,25690113,25886721,26214401,26673153,26738689,27328513,27459585,27590657,27852801,28114945,28508161,28639233,28835841,29097985,29163521,29360129,29425665,29687809,29818881,29884417,30015489,30408705,31129601,31522817,31719425,31850497,32243713,32309249,32571393,32702465,32833537,33161217,33554433,33685505,33816577,34144257,34275329,34471937,34734081,34799617,35127297,35454977,35651585,36044801,36306945,36503553,37224449,37486593,37552129,37683201,38207489,38338561,38469633,39124993,39190529,40173569,41091073,41287681,41418753,41811969,41877505,45613057,54722564,60358660,61669377],"comprise":[38010881,39321601,60030977,61276161],"change":[26804225,27656193,28901377,29622273,43450369,49414145,52690945,53149697,53542913,54263809],"containskey":[1769473,2752513,3276801,4259841,17039366,54067201,56426497,57540609,57999361],"childnodes":[37617665,54394884,55115777],"cpu":[1179649,4980740,7208964,24838147,25165827,25624579,25755651,26148866,27262978,30081027,34340867,38076419,38404097,38731779,39321605,42074113,50987011,53673985,54198273,55115777,55574531,55902209,56033281,56754177,58261509,60817413],"contextual":[19857409,21692417],"comparer":[4915201,5373953,5898248,6160392,16318465,16973832,17629192,20185089,31719426,34537474,41091074,43188226,45809666,48431110,54067202,56426500,57999364],"certain":[10092545,13172737,13238273,13631489,13762561,13893633,14548993,14680065,14745601,15073281,15204353,15466497,15532033,16187393,16908289,18939905,19464193,20250625,20447233,21102593,21233665,21823489,22085633,22216705,22806529,23068673,23789569,23920641,24641537],"clearscrip":[38010881,39321601,46071809,60030977,61276161],"clr":[7143428,8060930],"consuming":[4980748,7208972,24969217,25362433,25493505,26083329,26411009,26542081,26607617,26935297,27066369,27983873,28049409,28311553,28377089,28573697,29294593,29491201,29949953,30343169,30736385,31981569,32178177,34013185,35192838,35848193,36372486,37879809,38666246,39714822,58261516,60817420],"character":[36634625,39256065,44761090,51445761,59310081,60489729],"concurrent":[131073,1769473,4915201,5373953,5898241,6160385,34537473,41091073,57999361],"copies":[2621442,2686978,2752513,2818050,3211266,3670020,16056321,16711681,17301505,17432577,17498113,18219009,57540609,59375618,59834370,60162050,60424194,60751876],"compatibility":[8912898,47382529,52690945,53149697,53542913,54263809],"compiles":[4980748,7208972,24051713,24444929,24772609,25493505,25559041,26017793,26083329,26411009,26542081,26935297,27066369,27394049,27525121,27721729,28311553,28377089,28573697,29032449,29294593,29556737,29753345,30736385,31981569,33095681,36372492,39714828,58261516,60817420],"category":[2031618,2359297,3735556,4587524,4980744,6029319,6291460,6356996,6488071,6553604,6815753,7208972,7274502,7405577,7536644,8716292,8847361,8978436,13762568,13893640,14680072,14745608,21102601,21233673,21823497,22085641,24444936,24772616,25493512,26083336,26411016,27394056,27525128,27721736,28311560,28377096,28573704,29556744,29753352,30670850,30736392,31981576,33030146,33095688,33882114,34668546,35586050,36372488,38010881,39714824,39780356,40304642,41484291,44498946,45023235,45547522,46661638,47448066,48037890,51576834,52428803,53870594,58195972,58261512,58327044,58392580,59572225,59899909,60096516,60817420,60882948,61407236,61538308,61603844],"code":[1703937,2293766,2424833,2490369,2555905,2883585,2949128,3014657,3342337,3407873,3538945,3735590,3801089,4521985,4587558,4849665,5046273,6291494,6357030,6553638,7143425,7208998,7471106,7536678,7929859,7995394,8060929,8126465,8257537,8323073,8388609,8585219,8650753,8716326,8912897,8978470,9043969,9240579,9306113,9437185,9568257,9699329,9830401,9895939,10289153,10354689,10420225,10485761,10616833,10682369,10878977,10944513,11075585,11141121,11206657,11337729,11665409,11927553,12058625,12189697,12255233,12320769,12582913,12648449,12713986,12845057,12910595,13041666,13107201,13172738,13238273,13303810,13369345,13434882,13500418,13565953,13631502,13697026,13762561,13828100,13893634,13959170,14024705,14090241,14155777,14286850,14417921,14483458,14549003,14680065,14745602,14876673,14942209,15007746,15073289,15138818,15204360,15269890,15466505,15532042,15597569,15859713,15925249,16187402,16252929,16515073,16777217,16842753,16908298,17104897,17235969,17367041,17563649,17760257,17825793,18087937,18284545,18350081,18546689,18612225,18743297,18808833,18939913,19070977,19136514,19333121,19398660,19464202,19529729,19660801,19726337,19791873,19922946,19988481,20119553,20250625,20316161,20447234,20512769,20643841,20709378,20774913,20905985,21037058,21102593,21233666,21299201,21364737,21430274,21495809,21561345,21823489,21889026,22085634,22216714,22347777,22413313,22478849,22609922,22806539,22872065,23068683,23199746,23265281,23396354,23461894,23789583,23920651,24248322,24641548,24969223,25100290,25362439,25493505,25821190,26083329,26411009,26542081,26607623,26935297,27066369,27131910,27197441,27983879,28049415,28246017,28311553,28377089,28442630,28573697,28704774,28966918,29294593,29491207,29949959,30146566,30343175,30736385,30867457,30998534,31064072,31391750,31588353,31784962,31981569,32047112,32112641,32178183,32374788,32440322,32505860,32768006,32964609,33292296,33423368,33488900,33619970,34013191,34078724,34209800,34603010,34930694,35061764,35258376,35717122,35848199,36569094,37355524,37748740,37879815,38010889,38404097,38862856,38993921,39059461,39452673,39845889,40042497,40501249,40632325,41353217,42074116,42205189,43450369,43581441,43778049,43909125,44171265,44433411,44892161,44957701,45088772,45154307,45219841,45744129,46202881,46268421,46596097,46923777,47054849,47185921,47710211,47775748,48234499,48365570,48627713,49414145,49610753,50397185,50659331,50790401,51314691,51576833,51642369,52035585,52559875,52690949,53477378,54067201,54591489,54722562,54853633,55312386,55705601,55902209,56098817,56492033,56950787,57344001,57540609,57802754,58196010,58261505,58327082,58392619,58458114,58589185,58654721,58785794,58982401,59047942,59113474,59506691,59637761,59768834,59965441,60096555,60227585,60358658,60620804,60817451,60882987,60948481,61079560,61145091,61407276,61538348,61603884,61669379],"core":[589826,851969,1114114,1245186,1376258,1441794,1507332,4784129,4915202,5242882,5308418,5373954,5505026,5570562,5636098,5701634,5767170,5832706,5898242,5963778,6029314,6094850,6160386,6225922,6291457,6356993,6422530,6488066,6619138,6684674,6750210,6815746,6881281,6946818,7012354,7077890,7143428,7274498,7340034,7405570,7471106,7602178,7667714,7733250,7864322,7929858,7995394,8060932,8126467,8192002,8257538,8323074,8388610,8454146,8519682,8585218,8650754,8716289,8781826,8847362,8912898,9043970,9109506,9175042,9240578,9306115,9371650,9437186,9502722,9568258,9633794,9699330,9764866,9830403,9895938,9961474,10027010,10092546,10158082,10223618,10289154,10354690,10420226,10485762,10551298,10616834,10682370,10747906,10813442,10878978,10944514,11010050,11075586,11141122,11206658,11272194,11337730,11403266,11468802,11534338,11599874,11665410,11730946,11796482,11862018,11927554,11993090,12058626,12124162,12189698,12255234,12320770,12386306,12451842,12517378,12582914,12648450,12713986,12779522,12845058,12910594,12976130,13041666,13107202,13172738,13238274,13303810,13369346,13434882,13500418,13565954,13631490,13697026,13762562,13828098,13893634,13959170,14024706,14090242,14155778,14221314,14286850,14352386,14417922,14483458,14548994,14614530,14680066,14745602,14811138,14876674,14942210,15007746,15073282,15138818,15204354,15269890,15335426,15400962,15466498,15532034,15597570,15663106,15728642,15794178,15859714,15925250,15990786,16056322,16121858,16187394,16252930,16318466,16384002,16515074,16449538,16580610,16646146,16711682,16777218,16842754,16908290,16973826,17039362,17104898,17170434,17235970,17301506,17367042,17432578,17498114,17563650,17629186,17694722,17760258,17825794,17891330,17956866,18022402,18087938,18153474,18219010,18284546,18350082,18415618,18481154,18546690,18612226,18677762,18743298,18808834,18874370,18939906,19005442,19070978,19136514,19202050,19267586,19333122,19398658,19464194,19529730,19595266,19660802,19726338,19791874,19857410,19922946,19988482,20054018,20119554,20185090,20250626,20316162,20381698,20447234,20512770,20578306,20643842,20709378,20774914,20840450,20905986,20971522,21037058,21102594,21168130,21233666,21299202,21364738,21430274,21495810,21561346,21626882,21692418,21757954,21823490,21889026,21954562,22020098,22085634,22151170,22216706,22282242,22347778,22413314,22478850,22544386,22609922,22675458,22740994,22806530,22872066,23003138,23068674,23199746,23265282,23330818,23396354,23527426,23592962,23658498,23789570,23855106,23920642,23986178,24117250,24182786,24248322,24379394,24510466,24576002,24641538,24707074,24903682,25034754,25100290,25296898,25427970,25886722,30277636,30474244,30605314,30801922,30867460,31195138,31260676,31326210,31522820,31653890,31916036,32309252,32636932,32964612,33161220,33226756,33685508,33947652,34144260,34734084,35454980,35520516,36306948,37224452,38207492,38600705,39124993,39583746,39649281,39845890,40042498,40108034,40173569,40501250,40566787,40763393,40828930,40894466,40960002,41025538,41353218,41549826,41615362,41680898,41746436,42139650,42270722,42336258,42401794,42467332,42663938,42729474,42795010,42860546,42926082,42991618,43057154,43122692,43253762,43319298,43384834,43450370,43515906,43581442,43646978,43712514,43778052,43843586,43909121,43974658,44040194,44105730,44171266,44236802,44302338,44367876,44433410,44498946,44564482,44630018,44695556,44761090,44826626,44892162,44957697,45023234,45154306,45219842,45285378,45350914,45481986,45547522,45613060,45678594,45875202,45940738,46006274,46071810,46268417,46333954,46399490,46465026,46530562,46661634,46727170,46792706,46989314,47054850,47185922,47251458,47316994,47382530,47448066,47513602,47579138,47710210,47841282,47906818,48037890,48103426,48168962,48234498,48300034,48431106,48496642,48627714,48693250,48758786,48889858,48955394,49020930,49152002,49283074,49414146,49545218,49610754,49676292,49741826,49938434,50003970,50069508,50135042,50397186,50462722,50528258,50593794,50659330,50790402,50921474,51052546,51118082,51183618,51314690,51445762,51576834,51642370,51707906,51838978,51904514,51970050,52166658,52232194,52363266,52428802,52494338,52625410,52953090,53018626,53084162,53411842,53477378,53870594,54001666,54067202,54525954,54591490,54722562,55050242,55246850,55312386,55377922,55705602,55771138,55836674,55967748,56229890,56295428,56360962,56426498,56492034,56819716,56885250,56950786,57016324,57212930,57278466,57344004,57409538,57540610,57606146,57671682,57802754,57933826,57999362,58064898,58130434,58195971,58327042,58392582,58458114,58523650,58654722,58720261,58785794,58916866,58982402,59047938,59113474,59310082,59375618,59506690,59572226,59637762,59768834,59834370,59899906,59965442,60030978,60096518,60162050,60227586,60293122,60358658,60424194,60489730,60555266,60751874,60882952,60948482,61014018,61079554,61210626,61341698,61407233,61472770,61538305,61603841,61669378],"causes":[3735553,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,17956865,20971521,28770305,44367873,45744129,50200577,52035585,52822017,53280769,53936129,56098817,58195969,58327041,58392577,58654721,60096513,60817409,60882945,61407233,61538305,61603841],"consoles":[15859713,19529729,27197441,30867457,31588353,32112641,32964609],"control":[50724865,54460417,54853636],"connect":[2097153,2228225,6750213,7012357,57671681,57933825],"compare":[55312385],"collecting":[4980738,7208962,24838145,25624577,25755649,30081025,34340866,38076418,58261506,60817410],"comtype":[5046273,8323077,12845057,13107201,14090241,14942209,15925249,16777217,17563649,17760257,18350081,18612225,18743297,19660801,20643841,21364737,22413313,23265281,32047105,34209793,58785793],"comobject":[11927553,12320769,12648449,13369345,14024705,14155777,14876673,15597569,16842753,17235969,18087937,19070977,19988481,20774913,21495809,22478849,31064065,33423361],"continuationcallback":[38010881,39059457,40632321,42074113,42205185,43909121,44957697,45088769,45678603,46268417,47775745,51904526,58064901,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"console":[8650753,9568258,12910593,13565953,15859713,19529729,27197441,30867457,31588353,32112641,32964609],"casts":[3407875,5046275,8257537,9043970,11730945,58785795,59768835],"callback":[2031617,3735554,4587522,4980740,6029313,6291458,6356994,6488065,6553602,7208966,7274497,7405571,7536642,8716290,8978434,9306113,9568257,9830402,14680067,14745603,21823491,22085635,24444931,25493507,27394051,27721731,28377091,28573699,29556739,30670849,30736387,33030145,33882113,34668545,35586049,36372484,39059457,39714820,40304641,40632321,40894465,41222145,41549827,42074113,42205185,42926081,43909121,44957697,45088769,45678596,46268417,47251459,47775745,50003969,51576833,51904516,52166658,53870594,57278466,58064897,58195971,58261508,58327043,58392579,60096515,60817415,60882947,61407235,61538307,61603843],"cachebytes":[24444933,24969221,25362438,25493509,25559045,25821189,26017797,26083333,26411014,26542085,26607621,26935301,27066374,27525125,27983878,28049414,28311557,28377094,28573702,28704773,28966917,29294598,29491205,29556741,29949957,30343174,30736389,30998533,31391749,31981574,32178181,33095685,34013190,34930693,35848197,37879814],"cancels":[7208961,26869761,60817409],"convert":[3014657,4521985,7471105,7929857,7995393,8585217,9240577,9699329,9895937,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12582913,16252929,17104897,17825793,18546689,19333121,19726337,20054017,20512769,21299201,27197441,30867457,31588353,32112641,32964609,42795009,48889857,55705601,60227585],"connected":[720897,50593793],"cached":[1835010,1966082,5505027,5963778,6094850,6225922,6422531,6684674,39583745,43384833,45023233,53084162,58523650],"consolet":[8650754,9568258,12910596,13565954],"class":[65537,131073,196609,262145,327681,393218,458753,589825,655362,720897,786434,851970,917505,1114114,1245185,1376258,1441794,1507330,1572865,1638401,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2490372,2555908,2162689,2228225,2883588,2949121,3014666,3080193,3276801,3342340,3407873,3473409,3538948,3604481,3735576,3866625,3932161,3997697,4063233,4194305,4259841,4325377,4390913,4456449,4521994,4587545,4653057,4849668,4915201,4980737,5046273,5111810,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5898241,5963777,6094849,6029313,6160385,6225921,6291481,6357017,6422529,6553625,6488065,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077892,7143425,7208985,7274497,7340033,7405569,7471105,7536665,7602177,7667713,7733249,7798785,7864321,7929857,8060929,7995393,8126465,8192001,8257540,8323076,8388609,8454145,8519681,8585217,8650755,8716313,8781825,8847361,8912897,8978457,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141122,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927555,11993089,12058625,12124161,12189697,12255233,12320771,12386305,12451841,12517377,12582913,12648452,12779521,12845059,12910593,12976129,13107204,13303809,13369348,13565953,13959169,14024707,14090244,14155780,14876676,14942211,15597571,15925251,16121857,16252929,16318465,16384001,16515073,16777220,16842756,16973825,17039361,17104897,17235973,17563652,17629185,17694721,17760261,17825793,18087941,18153473,18284545,18350083,18415617,18546689,18612228,18677761,18743301,18808833,18874369,18939905,19005441,19070980,19136513,19267585,19333121,19398657,19464193,19529729,19595265,19660804,19726337,19791873,19857409,19922945,19988484,20054017,20119553,20185089,20250625,20381697,20316161,20447233,20512769,20578305,20643844,20709377,20774917,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364741,21495813,21430273,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413317,22478852,22544385,22609922,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265284,23330817,23396354,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26148865,26083329,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30343169,30408705,30474241,30539777,30670849,30736385,30801921,30867457,30932993,30998529,31064076,31129601,31260673,31326210,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047116,32112641,32178177,32243713,32309249,32374785,32505857,32571393,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33357825,33423373,33488897,33554433,33685505,33751041,33816577,33882113,34013185,34144257,34209805,34275329,34340865,34406401,34471937,34537473,34603009,34734083,34799617,34865153,34930689,34996225,35127299,35192833,35258369,35323905,35389441,35520513,35454977,35651585,35717121,35782657,35848193,35979265,36044803,36110337,36175873,36372481,36306945,36438017,36503553,36569089,36634625,36765697,36831233,36896769,37093377,37158913,37224449,37289985,37355521,37486593,37552129,37617665,37683201,37748737,37879809,38010881,38076417,38141953,38207491,38273025,38338561,38469633,38404097,38535169,38666241,38731777,38862849,38928386,38993921,39059457,39124993,39190531,39321601,39256065,39387137,39452673,39583745,39649281,39714817,39780353,39911425,39976961,40108033,40173569,40370177,40435713,40566785,40697857,40632321,40763393,40894465,41091073,41222145,41287681,41418753,41484289,41549825,41746433,41811969,42008578,42074113,42205185,42270721,42467329,42532865,42598402,42663937,42795009,42860545,42926081,43122689,43188225,43253761,43319297,43384833,43450369,43712513,43778049,43843585,43909121,43974657,44171265,44236801,44302337,44367873,44498945,44630017,44695553,44761089,44892161,44957697,45023233,45088769,45219841,45285377,45416449,45481985,45547521,45613059,45744129,45809665,45875201,46006273,46071809,46137346,46202881,46268417,46333953,46465025,46727169,46792705,46923778,47054849,47185921,47382529,47448065,47513601,47579137,47644673,47972354,48037889,48103425,48168961,48234497,48431105,48562177,48627713,48758786,49020929,49086465,49152001,49217537,49283073,49348610,49479681,49545217,49676289,49741825,49807361,49872897,50069505,50135041,50200577,50266113,50331649,50462721,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51773441,51838977,51904513,51970049,52035585,52101121,52297729,52363265,52428805,52494337,52559873,52690945,52756481,52822017,52887553,52953089,53018625,53084165,53149697,53215233,53280769,53346305,53411841,53477389,53542913,53608449,53673989,53739521,53805057,53870598,53936129,54001665,54067205,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722573,54788097,54853633,54919169,54984705,55050241,55115781,55181313,55246853,55312393,55443457,55508993,55574529,55640065,55705614,55771137,55836679,55902209,55967745,56033281,56098817,56164353,56229893,56295425,56360961,56426501,56492039,56557569,56623105,56688641,56754181,56819714,56885249,56950785,57016321,57081857,57147393,57212933,57344001,57409537,57475073,57540609,57606145,57671685,57737217,57802753,57868289,57933829,57999365,58130437,58195997,58261509,58327065,58392606,58458113,58523653,58589189,58654726,58720263,58785797,58851333,58916865,58982405,59047941,59113485,59179009,59244549,59310085,59375617,59441153,59506697,59572225,59637761,59703301,59768837,59834369,59899909,59965441,60030981,60096542,60162049,60227598,60293121,60358669,60424193,60489733,60555271,60620801,60686337,60751873,60817438,60882974,60948481,61014017,61079557,61145090,61210625,61276165,61341697,61407261,61472775,61538333,61603869,61669377],"contained":[46858241,57540609],"contain":[7143425,8060929,11272193,11796481,12386305,12779521,17891329,24903681,41943041,51511297],"contextcallback":[6029318,6488070,7274501,7405573,14680069,14745605,21823494,22085638,24444933,25493509,27394053,27721733,28377093,28573701,29556741,30736389,40304641,41222145,41549829,47251460,51576833,53870593],"coded":[45744129,58654721],"caused":[16384001,22675457,41025537,42729473,43646977,45744131,46006273,46202882,46727169,48365571,49545217,50135041,58458115,58654723,58982402],"configuratio":[6815745,7405569,7864321,8847361],"callable":[8126465,8454145,9437185,9502721,10092545,10354689,11141121,11927553,12320769,12648449,12713985,12845057,13041665,13107201,13303809,13369345,13500417,13697025,13828097,13959169,14024705,14090241,14155777,14286849,14417921,14483457,14876673,14942209,15007745,15138817,15269889,15597569,15925249,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19136513,19398657,19660801,19922945,19988481,20119553,20643841,20709377,20774913,21037057,21364737,21430273,21495809,21889025,22413313,22478849,22609921,23199745,23265281,23396353,24248321,25100289,38010882,58785793,59768833],"caching":[39321601,60620803],"copied":[16056322,16711682,17301506,17432578,17498114,18219010],"constraints":[5439489,24313857,25231368,27459592,27852808,28114952,28639240,28835848,29097992,29425672,29687816,29884424,30408712,31850504,33816582,38338566,38993921,39321601,50200577,51511297,52101121,52690945,53149697,53542913,53936129,54263809,58261510,58589186,60817414],"components":[10616835],"compiled":[4063233,4980748,7208974,23461890,24051714,24444930,24772610,24969219,25362436,25493506,25559042,25821186,26017794,26083330,26411011,26476546,26542082,26607618,26935298,27066371,27131906,27394050,27525122,27721730,27983875,28049411,28311554,28377091,28442626,28573699,28704770,28966915,29032450,29294595,29491202,29556738,29753346,29949955,30146563,30343171,30539781,30736386,30998530,31391747,31981571,32178178,32768002,33095682,34013187,34930690,35192844,35848194,36569091,37355521,37748737,37879812,38666252,39321601,39452674,40435714,45023233,53739521,54132737,58261516,59703300,60686337,60817422],"cache":[1835009,1966081,4980754,6094851,6225923,7208978,13434881,24444932,24969222,25362437,25493510,25559044,25821188,26017796,26083334,26411013,26542086,26607622,26935302,27066373,27525124,27983877,28049413,28311558,28377093,28573701,28704772,28966916,29294597,29491206,29556740,29949958,30343173,30736390,30998532,31391748,31981573,32178182,33095684,34013189,34930692,35192841,35389441,35848198,36372489,37879813,38666249,39321601,39583746,39714825,39780353,40697857,43384834,45023234,53084162,58261522,58523650,59899905,60620806,60686343,60817426],"cachekind":[24444933,24969221,25362437,25493509,25559045,25821189,26017797,26083333,26411013,26542085,26607621,26935301,27066373,27525125,27983877,28049413,28311557,28377093,28573701,28704773,28966917,29294597,29491205,29556741,29949957,30343173,30736389,30998533,31391749,31981573,32178181,33095685,34013189,34930693,35848197,37879813],"compliance":[61669377],"cleared":[131073,196609,262145,589825,54067201,56426497,57999361],"convenient":[7143425,8060929,13631489,23789569,54067201],"close":[51511297],"conversion":[3014657,4521985,55705601,60227585,61145094],"caller":[60686337],"caution":[58720257,61145090],"correspond":[49676289,49938433,51183617,52297729],"collects":[4980737,7208961,26148865,27262977,58261505,60817409],"catch":[12910594,52035585,56098817],"cancel":[26279937,26869761],"callbackt":[9830402],"converts":[2293766,2949129,3407884,5046284,7471105,7929857,7995393,8585217,9240577,9699330,9895937,10289154,10420226,10485762,10682370,11075586,11206658,11337730,11665410,12058626,12189698,12582914,16252929,17104897,17825793,18546689,19333121,19726337,20054017,20512769,21299201,31784962,32505860,38862856,58785804,59047942,59768844,61079561],"common":[38010881,38535170,47448065,58458113,59834369,60424193],"collection":[131073,196609,262146,589825,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2752513,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3735553,3801089,3866625,3932161,3997697,4063233,4259850,4325377,4390913,4456449,4521985,4587522,4653057,4849665,4980738,5046274,5111809,5439489,6291458,6356994,6553602,6881281,7077899,7143436,7208962,7536642,7798785,8060930,8716290,8978434,10813442,11010050,11272195,11468802,11599874,11796483,11862018,11993090,12124162,12386307,12451842,12517378,12779523,14352386,19791874,22937602,23986178,27918338,30932993,34537474,36765701,37093377,37158916,37617666,37683206,38010882,42467330,42663937,43188226,43253761,45744129,45809667,49217537,50003969,51576833,53084161,53477377,53673986,53870593,54067221,54198273,54394881,54722561,55115779,55312385,55705601,55836673,55902209,56229889,56426500,56492033,56688641,56754177,57147393,57212929,57540611,57671681,57933825,57999364,58130433,58195970,58261506,58327041,58392578,58523649,58589185,58654722,58720257,58785794,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096514,60227585,60358657,60489729,60555265,60817410,60882946,61407234,61472769,61538306,61603842],"catchfunc":[12910600],"configuration":[2031620,6815746,7405570,7864322,8847362,30670852,38010882,39321601,53870597,60030977,61276161],"collections":[7143426,8060930,9437186,9699329,10289153,10420225,10485761,10682369,11075585,11206657,11337729,11665409,12058625,12189697,12255233,12582913,13828097,19398657,54067202],"creates":[1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2359297,2490369,2555905,2621441,2686977,2818049,2162689,2228225,2883585,3014657,3211265,3276801,3342337,3407884,3473409,3538945,3604481,3670018,3735560,3801089,3866625,3932161,3997697,4063233,4194305,4259841,4325377,4390913,4456449,4521985,4587529,4653057,4849665,4980755,5046283,5111809,5439489,6291465,6357001,6553609,6881281,7208981,7536649,7798785,8388610,8650754,8716297,8978441,9306114,9502721,9568258,9830401,10092545,10354690,10616833,10944515,11141122,11927553,12255233,12320769,12648449,13369345,14024705,14155777,14876673,15597569,16449537,16842753,17235969,18022401,18087937,18481153,19070977,19988481,20774913,21495809,22478849,23461889,24969217,25362433,25821185,25952257,26607617,26804225,27131905,27656193,27983873,28049409,28180481,28442625,28704769,28901377,28966913,29491201,29622273,29949953,30146561,30343169,30998529,31064072,31326209,31391745,32178177,32768001,32899074,33423368,34013185,34406402,34865155,34930689,35192844,35848193,36569089,37879809,38666252,40370182,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55246849,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195977,58261523,58327048,58392585,58523649,58589185,58654721,58720257,58785803,58851329,59113473,59244545,59310081,59375617,59506689,59703297,59768844,59834369,59899905,60096521,60162049,60227585,60358657,60424193,60489729,60555265,60751874,60817429,60882953,61407241,61472769,61538313,61603849],"converting":[15859713,19529729,27197441,30867457,31588353,32112641,32964609],"checkaccess":[4784129,6291457,6356993,6553601,6881281,7536641,8716289,8978433,32636932,35520518,41746436,57016321,58392577,58720257,60096513,60882945,61407233,61538305,61603841],"constructed":[61145090],"created":[24838145,25165825,25624577,25755649,25952257,26673153,26804225,27590657,27656193,28114945,28180481,28835841,28901377,29097985,29360129,29622273,29818881,29884417,30015489,30081025,30408705,31129601,31850497,38731777],"changed":[589825],"call":[1179649,3735553,4587521,6291457,6356993,6553601,7208961,7471106,7536641,7929858,7995394,8585218,8716289,8978433,9240578,9830401,9895938,13828098,16252930,17104898,17367042,17825794,18153474,18546690,19005442,19333122,19398658,19726338,19791874,20054018,20316162,20512770,21299202,28246018,30539777,37093377,38141953,39321601,43778050,45744129,47054849,47316994,48562177,49807361,50724865,51642369,53411842,53477378,53673985,54460417,54591490,54722562,55115777,56033281,56492033,56754177,56950786,58195969,58327041,58392577,58654721,60096513,60817409,60882945,61407233,61538305,61603841],"closest":[49610753,50790401],"corporation":[65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6029313,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,8060929,7995393,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13631489,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19726337,19660801,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20381697,20316161,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26148865,26083329,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35520513,35454977,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36372481,36306945,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38469633,38404097,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40697857,40632321,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909121,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775745,47841281,47906817,47972353,48037889,48103425,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55377921,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"considered":[59572225],"controls":[39059458,40632322,42074114,42205186,43581441,43909122,44957698,45088770,45154305,46268418,47185921,47775746,51314689,58195970,58327042,58392578,60096514,60817410,60882946,61407234,61538306,61603842],"comparison":[42336258,45875202,55312385,59637762],"char":[3407873,5046273,11206663,16711681,17432577,17498113,18022401,18219009,18481153,24444929,24969217,25362433,25493505,25559041,25821185,26017793,26083329,26411009,26542081,26607617,26935297,27066369,27525121,27983873,28049409,28311553,28377089,28573697,28704769,28966913,29294593,29491201,29556737,29949953,30343169,30736385,30998529,31391745,31981569,32178177,33095681,34013185,34930689,35848193,37879809,58785793,59768833,60751873],"conversions":[13631489,23789569],"child":[37617665,54394883,55115777],"copyto":[2752513,57540609],"context":[2031617,3735554,4587522,4980740,6029313,6291458,6356994,6488065,6553602,7208966,7274497,7405571,7536642,8716290,8978434,14680067,14745603,18415622,19857414,21692422,21823491,22085635,23658502,24444931,25493507,27394051,27721731,28377091,28573699,29556739,30670849,30736387,33030145,33882113,34668545,35586049,36372484,38010881,39714820,40304641,41222145,41549828,44433409,47251460,50003971,50659329,51576833,53870594,58195970,58261508,58327042,58392578,60096514,60817414,60882946,61407234,61538306,61603842],"customattributeloader":[1572866,5242881,5701637,34996226,38010881,39059457,40632321,42074113,42205185,42860551,43909121,44957697,45088769,45416449,46268417,46530571,46792715,47775745,52953102,58130440,58195969,58327041,58392577,60030977,60096513,60817409,60882945,61407233,61538305,61603841],"create":[327681,4194305,7143425,8060929,8126465,8323073,8388609,8650753,9306115,9437186,9568258,9699329,9830403,10092545,10289153,10354689,10420225,10485761,10616834,10682369,11075585,11141121,11206657,11337729,11665409,11927553,12058625,12189697,12255234,12320769,12582913,12910593,13369345,13631489,14876673,16842753,18087937,19988481,21495809,23789569,25952257,26804225,27656193,28180481,28901377,29622273,31326213,40370177,55246849,58654721],"clearscript":[65538,131074,196610,262146,327682,393218,458754,524290,589829,655362,720901,786434,851970,917509,983041,1048581,1114117,1179653,1245189,1310721,1376261,1441797,1507333,1572866,1638402,1703938,1769474,1835010,1900546,1966082,2031618,2097154,2293762,2359298,2424834,2490370,2555906,2621442,2686978,2752514,2818050,2162690,2228226,2883586,2949122,3014658,3080194,3145730,3211266,3276802,3342338,3407874,3473410,3538946,3604482,3670018,3735554,3801090,3866626,3932162,3997698,4063234,4128770,4194306,4259842,4325378,4390914,4456450,4521986,4587522,4653058,4718594,4784130,4849666,4915205,4980738,5046274,5111810,5177346,5242886,5308421,5373957,5439490,5505029,5570565,5636101,5701637,5767173,5832709,5898245,5963781,6029317,6094853,6160389,6225925,6291458,6356994,6422533,6488069,6553602,6619141,6684677,6750213,6815749,6881282,6946821,7012357,7077893,7143429,7208962,7274501,7340037,7405573,7471109,7536642,7602181,7667717,7733253,7798786,7864325,7929861,7995397,8060933,8126469,8192005,8257541,8323077,8388613,8454149,8519685,8585221,8650757,8716290,8781829,8847365,8912901,8978434,9043973,9109509,9175045,9240581,9306117,9371653,9437189,9502725,9568261,9633797,9699333,9764869,9830405,9895941,9961477,10027013,10092549,10158085,10223621,10289157,10354693,10420229,10485765,10551301,10616837,10682373,10747909,10813445,10878981,10944517,11010053,11075589,11141125,11206661,11272197,11337733,11403269,11468805,11534341,11599877,11665413,11730949,11796485,11862021,11927557,11993093,12058629,12124165,12189701,12255237,12320773,12386309,12451845,12517381,12582917,12648453,12713989,12779525,12845061,12910597,12976133,13041669,13107205,13172741,13238277,13303813,13369349,13434885,13500421,13565957,13631495,13697029,13762565,13828102,13893637,13959173,14024709,14090245,14155781,14221317,14286853,14352389,14417925,14483461,14548997,14614533,14680069,14745605,14811141,14876677,14942213,15007749,15073285,15138821,15204357,15269893,15335429,15400965,15466501,15532037,15597573,15663109,15728645,15794181,15859717,15925253,15990789,16056325,16121861,16187397,16252933,16318469,16384005,16449541,16515077,16580613,16646149,16711685,16777221,16842757,16908293,16973829,17039365,17104901,17170437,17235973,17301509,17367045,17432581,17498117,17563653,17629189,17694725,17760261,17825797,17891333,17956869,18022405,18087941,18153477,18219013,18284549,18350085,18415621,18481157,18546693,18612229,18677765,18743301,18808837,18874373,18939909,19005445,19070981,19136517,19202053,19267589,19333125,19398662,19464197,19529733,19595269,19660805,19726341,19791877,19857413,19922949,19988485,20054021,20119557,20185093,20250629,20316165,20381701,20447237,20512773,20578309,20643845,20709381,20774917,20840453,20905989,20971525,21037061,21102597,21168133,21233669,21299205,21364741,21430277,21495813,21561349,21626885,21692421,21757957,21823493,21889029,21954565,22020101,22085637,22151173,22216709,22282245,22347781,22413317,22478853,22544389,22609925,22675461,22740997,22806533,22872069,22937605,23003141,23068677,23134213,23199749,23265285,23330821,23396357,23461893,23527429,23592965,23658501,23724037,23789575,23855109,23920645,23986181,24051717,24117253,24182789,24248325,24313861,24379397,24444933,24510469,24576005,24641541,24707077,24772613,24838149,24903685,24969221,25034757,25100293,25165829,25231365,25296901,25362437,25427973,25493509,25559045,25624581,25690117,25755653,25821189,25886725,25952261,26017797,26083333,26148869,26214405,26279941,26345477,26411013,26476549,26542085,26607621,26673157,26738693,26804229,26869765,26935301,27000837,27066373,27131909,27197445,27262981,27328517,27394053,27459589,27525125,27590661,27656197,27721733,27787269,27852805,27918341,27983877,28049413,28114949,28180485,28246021,28311557,28377093,28442629,28508165,28573701,28639237,28704773,28770309,28835845,28901381,28966917,29032453,29097989,29163525,29229061,29294597,29360133,29425669,29491205,29556741,29622277,29687813,29753349,29818885,29884421,29949957,30015493,30081029,30146565,30212101,30277637,30343173,30408709,30474245,30539781,30605317,30670850,30736389,30801925,30867461,30932994,30998533,31064066,31129605,31195141,31260677,31326213,31391749,31457282,31522821,31588357,31653893,31719426,31784962,31850501,31916037,31981573,32047106,32112645,32178181,32243717,32309253,32374786,32440322,32505858,32571394,32636933,32702469,32768005,32833541,32899074,32964613,33030146,33095685,33161221,33226757,33292290,33357826,33423362,33488898,33554437,33619970,33685509,33751042,33816578,33882114,33947653,34013189,34078722,34144261,34209794,34275333,34340866,34406402,34471938,34537474,34603010,34668546,34734085,34799618,34865154,34930693,34996226,35061762,35127301,35192834,35258370,35323906,35389442,35454981,35520517,35586050,35651586,35717122,35782658,35848197,35913730,35979266,36044805,36110338,36175874,36241410,36306949,36372482,36438018,36503557,36569093,36634626,36700162,36765698,36831234,36896770,36962306,37027842,37093378,37158914,37224453,37289986,37355522,37421058,37486597,37552130,37617666,37683202,37748738,37814274,37879813,37945346,38010882,38076418,38141954,38207493,38273029,38338562,38404098,38469637,38535170,38600706,38666242,38731781,38797314,38862850,38928386,38993922,39059458,39124994,39190533,39256066,39321602,39387138,39452677,39518210,39583749,39649282,39714818,39780354,39845893,39911426,39976962,40042501,40108037,40173570,40239106,40304642,40370178,40435714,40501253,40566786,40632322,40697858,40763394,40828933,40894469,40960005,41025541,41091074,41156610,41222146,41287682,41353221,41418754,41484290,41549829,41615365,41680901,41746437,41811970,41877506,41943041,42008578,42074114,42139653,42205186,42270725,42336261,42401797,42467333,42532866,42598402,42663941,42729477,42795013,42860549,42926085,42991621,43057159,43122693,43188226,43253765,43319301,43384837,43450375,43515909,43581445,43646981,43712517,43778053,43843589,43909122,43974661,44040197,44105733,44171269,44236805,44302341,44367877,44433413,44498949,44564485,44630021,44695557,44761093,44826629,44892165,44957698,45023237,45088770,45154309,45219845,45285381,45350917,45416451,45481989,45547525,45613061,45678597,45744130,45809666,45875205,45940741,46006277,46071813,46137346,46202882,46268418,46333957,46399493,46465031,46530565,46596098,46661637,46727173,46792710,46858242,46923778,46989317,47054853,47120386,47185925,47251461,47316997,47382534,47448069,47513605,47579141,47644674,47710213,47775746,47841285,47906821,47972354,48037893,48103429,48168965,48234501,48300037,48365570,48431109,48496645,48562181,48627717,48693253,48758789,48824322,48889861,48955397,49020933,49086469,49152005,49217541,49283077,49348613,49414151,49479685,49545221,49610757,49676293,49741829,49807365,49872901,49938437,50003973,50069509,50135045,50200581,50266117,50331653,50397189,50462725,50528261,50593797,50659333,50724869,50790405,50855941,50921477,50987013,51052549,51118085,51183621,51249157,51314693,51380229,51445765,51511301,51576838,51642373,51707909,51773445,51838981,51904517,51970053,52035589,52101125,52166661,52232197,52297733,52363269,52428806,52494341,52559877,52625413,52690950,52756485,52822021,52887557,52953093,53018629,53084167,53149702,53215237,53280773,53346309,53411845,53477383,53542918,53608453,53673990,53739525,53805061,53870598,53936133,54001669,54067207,54132741,54198277,54263814,54329349,54394885,54460421,54525957,54591493,54657029,54722567,54788101,54853637,54919173,54984709,55050245,55115782,55181317,55246854,55312391,55377933,55443461,55508997,55574533,55640069,55705606,55771141,55836678,55902214,55967749,56033285,56098821,56164357,56229895,56295429,56360965,56426504,56492039,56557573,56623109,56688645,56754182,56819717,56885253,56950789,57016325,57081861,57147397,57212935,57278469,57344005,57409541,57475077,57540613,57606149,57671687,57737221,57802757,57868293,57933831,57999367,58064901,58130438,58195976,58261510,58327045,58392584,58458117,58523655,58589190,58654726,58720262,58785799,58851334,58916869,58982406,59047942,59113479,59179013,59244550,59310087,59375621,59441157,59506695,59572229,59637765,59703302,59768839,59834373,59899910,59965445,60030983,60096520,60162053,60227590,60293125,60358664,60424197,60489735,60555271,60620805,60686341,60751877,60817415,60882954,60948485,61014021,61079558,61145094,61210629,61276166,61341701,61407241,61472774,61538313,61603850,61669382],"client":[12910593],"cacheaccepted":[25362438,26411014,27066374,27983878,28049414,28377094,28573702,29294598,30343174,31981574,34013190,37879814],"compilation":[24969217,25362435,25493505,26083329,26411011,26542081,26607617,26935297,27066371,27983875,28049411,28311553,28377091,28573699,29294595,29491201,29949953,30343171,30736385,31981571,32178177,34013187,35848193,37879811,39321602,57147394,60620803,60686339],"com":[3735568,4587536,5046275,5177345,6291472,6357008,6553616,7077889,7208976,7536656,8323075,8650755,8716304,8978448,10092545,10616833,11927553,12320769,12648449,12845057,12910593,13107201,13369345,14024705,14090241,14155777,14876673,14942209,15597569,15925249,16777217,16842753,17235969,17563649,17760257,18087937,18350081,18612225,18743297,19070977,19660801,19988481,20643841,20774913,21364737,21495809,22413313,22478849,23265281,31064072,31195138,32047112,33423368,34209800,58195984,58327056,58392592,58785795,59965442,60096528,60817424,60882960,61014017,61407248,61538320,61603856],"cleaning":[12910593],"contexts":[8388609,9306113,9568257,13631489,14548993,16187393,16908289,22151169,22740993,23068673,23789569,23920641,24641537,24969217,25362433,26673153,26738689,27459585,27590657,28180481,28508161,28639233,28901377,28966913,29097985,29163521,29425665,29622273,29884417,29949953,30146561,31129601,31391745,31850497,33161217,33554433,33685505,34275329,34734081,35127297,36044801,36306945,36569089,37224449,37486593,37879809,38207489,38469633,39190529,43057153,45613057,46465025,61145089],"concurrentpropertybag":[131074,1769474,4915206,5373959,5898247,6160390,34537474,38010881,41091081,56426497,57999374],"collector":[19791873,30539777,52101121],"commonjs":[41484290,41549825,47251457,47448069,52428802],"case":[6946817,25362433,26411009,27066369,27983873,28049409,28377089,28573697,29294593,30343169,31588353,31981569,32964609,34013185,37879809,61145090],"converted":[61669377],"collect":[14352385,22937601,23986177,24838145,25624577,25755649,26148865,27262977,27918337,30081025,42467329],"copyright":[65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6029313,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,8060929,7995393,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13631489,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19726337,19660801,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20381697,20316161,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26148865,26083329,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35520513,35454977,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36372481,36306945,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38469633,38404097,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40697857,40632321,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909121,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775745,47841281,47906817,47972353,48037889,48103425,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55377921,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"collectgarbage":[3735553,4587521,4980737,6291457,6356993,6553601,7208962,7536641,8716290,8978433,14352388,22937604,23986181,27918343,42467334,58195969,58261505,58327041,58392577,60096513,60817410,60882946,61407233,61538305,61603841],"constructors":[51576833,53084161,53477377,53870593,54067201,54722561,55312385,55705601,56426497,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58785793,58982401,59113473,59310081,59506689,59768833,60096513,60358657,60489729,60817409,60882945,61407233,61538305,61603841],"currently":[458753,1245185,2293763,2949124,7471105,7929857,9240577,13631489,14548993,16187393,16908289,17104897,18546689,19726337,21299201,22151169,22740993,23068673,23789569,23920641,24641537,24969217,25362433,26673153,26738689,27459585,27590657,28180481,28508161,28639233,28901377,28966913,29097985,29163521,29425665,29622273,29884417,29949953,30146561,31129601,31391745,31784961,31850497,32505858,33161217,33554433,33685505,34275329,34734081,35127297,36044801,36306945,36569089,37224449,37486593,37879809,38207489,38469633,38862852,39190529,45613057,47251457,47710209,48234497,52559873,55836673,59047939,59965441,61079556],"combination":[6815745,7405569,7864321,8847361],"calculate":[9830401],"containing":[2621441,2686977,2818049,3211265,3670018,6029313,6488065,6815745,7274497,7405569,7864321,10616833,15073281,15204353,16449538,17891329,18022402,18481154,18939905,19464193,21954562,23461889,24903681,25821185,26345473,26607617,27787265,28049409,28442625,30343169,30998529,32178177,36634625,37617666,39256065,45285377,46858242,50003970,51970049,52166657,55115778,57278465,57540610,57737217,57868289,59310081,59375617,59834369,60162049,60424193,60489729,60751874],"cleanup":[1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2359297,2490369,2555905,2162689,2228225,2883585,3014657,3276801,3342337,3407873,3473409,3538945,3604481,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4980737,5046273,5111809,5439489,6291457,6356993,6553601,6881281,7208961,7536641,7798785,8716289,8978433,12910593,19791873,51576833,53084161,53477377,53673985,53870593,54067201,54722561,55115777,55312385,55705601,55836673,55902209,56229889,56426497,56492033,56754177,57212929,57671681,57933825,57999361,58130433,58195969,58261505,58392577,58523649,58589185,58654721,58720257,58785793,58851329,59113473,59244545,59310081,59506689,59703297,59768833,59899905,60096513,60227585,60358657,60489729,60555265,60817409,60882945,61407233,61472769,61538305,61603841],"completeness":[14352385,22937601,23986177,27918337,42467329],"contravariance":[8388609,9306113,9568257],"command":[3735553,4587521,6291457,6356993,6553601,7208961,7536641,8716289,8978433,15859724,19529741,27197453,30867469,31588367,32112653,32964623,58195969,58327041,58392577,60096513,60817409,60882945,61407233,61538305,61603841],"called":[13434881,17956865,18874369,20971521,26279937,26869761,28770305,38010883,38273025,40894465,41222146,42926081,43122689,44367873,52166657,53870594,57278465,57802753],"connection":[1900545,2162689,6750209,7012353,7208961,7733249,25231361,26214401,26279937,27590657,27656193,28835841,29163521,29425665,29622273,29884417,30015489,38010882,39387137,50593794,55181313,56229890,57212930,58851329,60817409,61145089],"comments":[65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2162689,2228225,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6029313,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,8060929,7995393,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13697025,13631489,13762561,13893633,13828097,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19726337,19660801,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20381697,20316161,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26148865,26083329,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35520513,35454977,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36372481,36306945,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38469633,38404097,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40697857,40632321,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43909121,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,44957697,45023233,45088769,45154305,45219841,45285377,45350913,45416449,45481985,45547521,45613057,45678593,45744129,45809665,45875201,45940737,46006273,46071809,46137345,46202881,46268417,46333953,46399489,46465025,46530561,46596097,46661633,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47644673,47710209,47775745,47841281,47906817,47972353,48037889,48103425,48168961,48234497,48300033,48365569,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084161,53149697,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722561,54788097,54853633,54919169,54984705,55050241,55115777,55181313,55246849,55377921,55312385,55443457,55508993,55574529,55640065,55705601,55771137,55836673,55902209,55967745,56033281,56098817,56164353,56229889,56295425,56360961,56426497,56492033,56557569,56623105,56688641,56754177,56819713,56885249,56950785,57016321,57081857,57147393,57212929,57278465,57344001,57409537,57475073,57540609,57606145,57671681,57737217,57802753,57868289,57933825,57999361,58064897,58130433,58195969,58261505,58327041,58392577,58458113,58523649,58589185,58654721,58720257,58785793,58851329,58916865,58982401,59047937,59113473,59179009,59244545,59310081,59375617,59441153,59506689,59572225,59637761,59703297,59768833,59834369,59899905,59965441,60030977,60096513,60162049,60227585,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60751873,60817409,60882945,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407233,61472769,61538305,61603841,61669377],"checking":[1769475,3276803,4259843,16515073,18284545,18808833,54067203,56426499,57999363],"compatible":[3407873,5046273,8912898,58785793,59768833],"categories":[38535169,45023233,52428801],"compile":[4980748,7208972,23461895,24051713,24444929,24772609,24969223,25362440,25493505,25559041,25821192,26017793,26083329,26411009,26542081,26607623,26935297,27066369,27131911,27394049,27525121,27721729,27983880,28049416,28311553,28377089,28442631,28573697,28704776,28966920,29032449,29294593,29491207,29556737,29753345,29949959,30146567,30343176,30736385,30998536,31391752,31981569,32178183,32768007,33095681,34013192,34930696,35192845,35848199,36372481,36569095,37879816,38666253,39714817,58261516,60817420],"calls":[11141121],"caches":[6029313,6488065,7274497,45023234],"customize":[15859713,19529729,27197441,30867457,31588353,32112641,32964609],"corresponds":[49610753,50790401],"columnnumber":[37617665,54919172,55115777],"custom":[1572866,3014657,4521985,5242888,5701633,34996226,38010881,39059457,40632321,42074113,42205185,42860546,43909121,44957697,45088769,45416449,46268417,46530563,46792707,47775745,52953091,53870593,55705601,58130436,58195969,58327041,58392577,60030977,60096513,60227585,60817409,60882945,61407233,61538305,61603841],"cast":[3407874,5046274,8257540,9043978,11730945,58785794,59768834],"cstr":[31588353,32964609],"calling":[2293763,2949124,3014657,4521985,4784130,5373953,6291458,6356994,6553602,6881282,7471105,7536642,7929857,8716290,8978434,9240577,16318465,17104897,18546689,19726337,21299201,30277633,30539777,31784961,31916033,32505858,32636930,35520514,38862852,41746434,44695553,55705601,57016322,58392578,58720258,59047939,60096514,60227585,60817409,60882946,61079556,61407234,61538306,61603842],"classes":[3014665,4521993,13631489,23789569,38010881,38535169,39321601,39976961,40566785,53477377,55705609,59113473,60227593],"check":[16515073,18284545,18808833,32636929,35520513,41746433,41943041],"createscriptengine":[4980742,25952261,26804229,27656197,28180485,28901381,29622277,40370182,58261510],"copy":[589825,720897,917505,1048577,1114113,1179649,1245185,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1900545,1835009,1966081,2031617,2097153,2359297,2490369,2555905,2621441,2686977,2818049,2162689,2228225,2883585,3014657,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670018,3801089,3866625,3932161,3997697,4063233,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4849665,4915201,4980737,5046273,5111809,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143426,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060930,8126466,8192001,8257538,8323074,8388609,8454145,8519681,8585217,8650754,8716289,8781825,8847361,8912898,8978433,9043970,9109505,9175041,9240577,9306114,9371649,9437187,9502721,9568258,9633793,9699330,9764865,9830402,9895937,9961473,10027009,10092545,10158081,10223617,10289154,10354690,10420226,10485762,10551297,10616834,10682370,10747905,10813441,10878978,10944514,11010049,11075586,11141122,11206658,11272193,11337730,11403265,11468801,11534337,11599873,11665410,11730945,11796481,11862017,11927553,11993089,12058626,12124161,12189698,12255234,12320769,12386305,12451841,12517377,12582914,12648449,12713985,12779521,12845057,12910594,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565954,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056324,16121857,16187393,16252929,16318465,16384001,16449539,16515073,16580609,16646145,16711684,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301508,17367041,17432580,17498116,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022403,18087937,18153473,18219012,18284545,18350081,18415617,18481155,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,27000833,26935297,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28180481,28246017,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30736385,30801921,30867457,30998529,31129601,31195137,31260673,31326209,31391745,31522817,31588353,31653889,31850497,31916033,31981569,32112641,32178177,32243713,32309249,32636929,32702465,32768001,32833537,32964609,33095681,33161217,33226753,33554433,33685505,33947649,34013185,34144257,34275329,34734081,34930689,35127297,35520513,35454977,35848193,36044801,36306945,36503553,36569089,37224449,37486593,37879809,38207489,38273025,38469633,38731777,39190529,39452673,39583745,39845889,40042497,40108033,40501249,40828929,40894465,40960001,41025537,41353217,41549825,41615361,41680897,41746433,42139649,42270721,42336257,42401793,42467329,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43974657,44040193,44105729,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44695553,44761089,44826625,44892161,45023233,45154305,45219841,45285377,45350913,45481985,45547521,45613057,45678593,45875201,45940737,46006273,46071809,46333953,46399489,46465025,46530561,46661633,46727169,46792705,46989313,47054849,47185921,47251457,47316993,47382529,47448065,47513601,47579137,47710209,47841281,47906817,48037889,48103425,48168961,48234497,48300033,48431105,48496641,48562177,48627713,48693249,48758785,48889857,48955393,49020929,49086465,49152001,49217537,49283073,49348609,49414145,49479681,49545217,49610753,49676289,49741825,49807361,49872897,49938433,50003969,50069505,50135041,50200577,50266113,50331649,50397185,50462721,50528257,50593793,50659329,50724865,50790401,50855937,50921473,50987009,51052545,51118081,51183617,51249153,51314689,51380225,51445761,51511297,51576834,51642369,51707905,51773441,51838977,51904513,51970049,52035585,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953089,53018625,53084162,53149697,53215233,53280769,53346305,53411841,53477378,53542913,53608449,53673986,53739521,53805057,53870594,53936129,54001665,54067202,54132737,54198273,54263809,54329345,54394881,54460417,54525953,54591489,54657025,54722562,54788097,54853633,54919169,54984705,55050241,55115778,55181313,55246849,55312386,55443457,55508993,55574529,55640065,55705602,55771137,55836674,55902210,55967745,56033281,56098817,56164353,56229890,56295425,56360961,56426498,56492034,56557569,56623105,56688641,56754178,56819713,56885249,56950785,57016321,57081857,57147393,57212930,57278465,57344001,57409537,57475073,57540609,57606145,57671682,57737217,57802753,57868289,57933826,57999362,58064897,58130434,58195970,58261506,58327041,58392578,58458113,58523650,58589186,58654722,58720258,58785794,58851330,58916865,58982401,59047937,59113474,59179009,59244546,59310082,59375618,59441153,59506690,59572225,59637761,59703298,59768834,59834370,59899906,59965441,60030977,60096514,60162050,60227586,60293121,60358658,60424194,60489730,60555266,60620801,60686337,60751875,60817410,60882946,60948481,61014017,61079553,61145089,61210625,61276161,61341697,61407234,61472770,61538306,61603842,61669377],"contents":[2621443,2686979,2818051,3211267,3670020,6815750,7405574,7864326,15728642,15794178,16449538,16580610,18022402,18481154,19202050,21954566,36634627,37421058,37945346,39256065,44302341,50921478,52363266,57278469,59310081,59375619,59834371,60162051,60424195,60489731,60751876,61210625],"contains":[327681,1769473,2752515,3276801,4259841,7143425,8060929,8126465,8519681,9371649,9633793,9961473,10027009,10158081,10551297,10747905,10813441,11468801,11534337,11862017,12124161,12451841,13041665,13500417,17039363,19136513,23199745,38010882,38535169,39321602,39976961,40566785,44761089,49217537,51576833,54067202,55377925,56426497,56688641,57540611,57999361,58654721,59244545],"corresponding":[7143425,8060929,8126465,8454145,9437185,9830402,12713985,13041665,13500417,13697025,14286849,14483457,15007745,15138817,15269889,19136513,19922945,20709377,21037057,21430273,21889025,23199745,24248321,25100289,52101121,54067201],"compiledocument":[4980748,7208972,24051717,24444933,24772613,25493509,25559045,26017797,26083333,26411013,26542085,26935301,27066373,27394053,27525125,27721733,28311557,28377093,28573701,29032453,29294597,29556741,29753349,30736389,31981573,33095685,36372492,39714828,58261516,60817420],"coordinated":[61145089],"completes":[4980737,7208961,25165825,38731777,58261505,60817409],"causing":[54853633],"completed":[6029313,6488065,7274497,12910593,25165825,38731777],"completion":[6029313,7274497],"clearnocheck":[1769473,3276801,4259841,5373953,16318465,16515076,54067201,56426497,57999361],"cpuprofilesampleinterval":[38404097,42074113,50987012,55574532,58261505,60817409],"correct":[13828097,19398657,40042497,43450369,44171265,49414145,60686337,61407233,61538305,61603841],"clean":[12910593],"clsid":[3735560,4587528,6291464,6357000,6553608,7208968,7536648,8323073,8650753,8716296,8978440,11927553,12320769,12648455,12845057,13107207,13369351,14024705,14090247,14155783,14876679,14942209,15597569,15925249,16777223,16842753,17235976,17563655,17760264,18087944,18350081,18612225,18743304,19070977,19660801,19988481,20643841,20774920,21364744,21495816,22413320,22478849,23265281,31064068,32047108,33423364,34209796,34734081,35127297,36044801,38207489,39190529,45613057,58195976,58327048,58392584,60096520,60817416,60882952,61407240,61538312,61603848],"clear":[2752513,16515073,38010881,38535169,39321601,39976961,40566785,57540609],"cacheresult":[24969221,25493509,26083333,26542085,26607621,26935301,28311557,29491205,29949957,30736389,32178181,35848197],"contact":[983041],"current":[1179649,1572868,1638404,1703938,1769476,1835012,1900548,1966084,2031620,2097156,2359300,2490371,2555907,2162692,2228228,2883587,3014660,3080193,3276804,3342339,3407876,3473412,3538947,3604484,3801090,3866628,3932164,3997700,4063236,4259844,4325380,4390916,4456452,4521988,4587524,4653060,4849667,4980740,5046276,5111812,5439492,6291462,6356998,6553606,6881284,7208964,7536646,7798788,8650753,8716294,8978438,12255233,13828097,16384001,18677762,19398657,22544386,22675457,24379394,26804225,27656193,28901377,29622273,30801922,31653890,39059458,39845889,40042497,40632322,41025537,41746434,42205186,42729473,43646977,43909121,44171265,44433409,44695553,44892161,44957697,45023233,45088770,45154305,45744134,46006273,46202883,46268417,46727169,48365572,48627713,49545217,50069505,50135041,50659329,51314689,51511297,51576834,52494344,52822017,53084164,53280769,53477379,53673988,53870596,54067204,54722563,54788097,55115780,55312387,55705604,55836676,55902210,56229892,56426500,56492036,56754180,57212932,57671684,57933828,57999364,58130436,58195974,58261508,58392583,58458116,58523652,58589188,58654730,58720260,58785796,58851332,58982404,59113475,59244548,59310084,59506691,59703300,59768836,59899908,60096519,60227588,60358659,60489732,60555268,60817412,60882951,61145089,61407240,61472772,61538312,61603848,61669377],"conjunction":[51511297],"creating":[25624577,25755649,39321601,54198273],"cancelawaitdebugger":[7208961,26279940,60817409],"consecutive":[38404097,42074113,51249153,52887553,58261505,60817409],"column":[37617665,54919171,55115777],"continue":[38010881,45678593,51904513,58064898],"collectcpuprofilesample":[4980737,7208961,26148868,27262980,58261505,60817409],"consumed":[25362433,26411009,27066369,27983873,28049409,28377089,28573697,29294593,30343169,31981569,34013185,37879809,60620801],"cancelinterrupt":[7208961,26869764,28770305,60817409],"cause":[5111809,50200577,50724865,51511297,53936129,54460417,58654721],"compiling":[47710209,48234497,52559873],"caught":[12910593,61145089],"continues":[43057153,46465025],"connects":[65537,720897,2097153,2228225,6750209,7012353,57671681,57933825,58261505],"count":[524289,1179650,16711685,17432581,17498117,18219013,37617665,46858241,55115777,55902209,56033282,57540609],"continuation":[45678593,51904513,58064897],"critical":[5242881]} \ No newline at end of file +{"consumed":[36241409,36372481,37945345,38273025,39387137,39518209,40239105,43515905,43581441,44433409,49741825,52625409,79560705],"createenumerator":[4456449,4784129,4980737,25493508,73269249,74973185,75694081],"converts":[2490374,3538956,3670025,4521996,8060929,8192001,8323073,8781825,10092545,10420225,10551298,11730946,11927554,12124162,12386306,12517378,12845058,12910594,13631490,13893634,14221314,15204354,17039361,17170433,17956865,18415617,19398657,20054017,21233665,25231361,26935297,50397186,52166660,54263816,75956236,76677126,77987852,78774281],"call":[393217,3735553,5373953,8060930,8192002,8323074,8585217,8781826,8716289,9306113,9502721,9830401,10092546,10420226,11010049,11206657,11403265,15663106,16711682,17039362,17170434,17956866,18415618,18808834,19398658,19922946,20054018,21233666,21757954,23199746,23658498,25231362,26935298,31981569,39780353,48955394,49545217,51511297,52428802,53805057,57540609,57868289,60358657,62259202,62980097,65077250,65142785,66715649,67436545,69140481,71761921,71827457,72286210,72548353,73400321,73990146,74842114,75104257,76021762,76087297,77856769,78512129,78708737,78970881,79953921,80019457,80281601,80347137,81002497,81068033,81264641],"catchfunc":[15990792],"createscriptengine":[7077894,37093381,39256069,40828933,42205189,43778053,45481989,58720262,75366406],"context":[1835009,3735554,5373954,7077892,7405569,8650755,8716290,9043969,9306114,9502722,9830402,10682369,11010054,11206658,11403266,14155779,14483459,17563654,19726342,21037059,21626883,23724038,24707078,33882113,39911425,40894467,42074115,43581443,43712513,44433411,44695553,45547521,45678593,45744131,47513603,47841281,48037891,49807363,49872897,51314689,51642372,52756481,55115777,56033281,57212932,61538305,61734916,61931524,62717953,75104258,75366404,76087302,77725699,77856770,78512130,78839809,79888386,79953922,80281602,81002498,81068034,81264642],"clean":[15990785],"clear":[3211265,21889025,45547521,48103425,49545217,51707905,52232193,53673985,76414977],"changed":[1114113],"contextcallback":[7405574,8650757,9043973,10682374,14155781,14483461,21037062,21626886,40894469,42074117,43581445,44433413,45744133,47513605,48037893,49807365,52756481,61538305,61734916,61931525,78839809,79888385],"client":[15990785],"cacheable":[25559041,33882113,39911425,43712513,49872897,77660161],"calculate":[8585217],"comparison":[64421890,68878338,75038721,79429634],"case":[8519681,36241409,36372481,37945345,38273025,39387137,39518209,40239105,43515905,43581441,43843585,44433409,44564481,49741825,52625409,76939266],"converted":[80412673],"comparer":[6422529,7143432,9437192,12189697,17694728,18481153,19660801,20971528,53084162,54394882,55705602,55967746,56295426,59310086,71368708,74121218,75628548],"categories":[48103425,54198273,71958529],"cachedocument":[2162689,2228226,6291461,7208965,75169794,79691777],"columnnumber":[56819713,64487428,80347137],"copy":[1,393217,524289,655361,327681,786433,851969,917505,983041,1114113,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2359297,2818049,2883585,2949121,3014657,3080193,3145729,3276801,3342337,3407873,3473409,3538945,3604481,3866625,3932161,3997697,4128769,4194305,4325377,4390914,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5636097,5701633,5832705,5963777,5767169,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995394,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585218,8650753,8781825,8716289,8847362,8912898,8978434,9043969,9109506,9175042,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961474,10027009,10092545,10158082,10223618,10289153,10354691,10420225,10485761,10551298,10616833,10682369,10747906,10813441,10878978,10944514,11010049,11075586,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730946,11796481,11862018,11927554,11993089,12058625,12124162,12189697,12255233,12386306,12451841,12517378,12582914,12648449,12713985,12779521,12845058,12910594,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631490,13697025,13762561,13828097,13893634,13959170,14024705,14090243,14155777,14221314,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204354,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990786,16056321,16121857,16187393,16252929,16318465,16384001,16449540,16515073,16580609,16646148,16711681,16777220,16842756,16908292,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432579,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153476,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677764,18743300,18808833,18874369,18939905,19005442,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595267,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185092,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168132,21233665,21299201,21364737,21430273,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282244,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986180,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361,25296897,25362433,25427969,25493505,25559041,25624577,25690113,25755649,25821185,25886721,25952257,26017793,26083329,26148865,26214401,26279937,26345473,26411009,26476545,26542081,26607617,26673153,26738689,26804225,26869761,26935297,27000833,27066369,27131905,27197441,27262977,27328513,27394049,27459585,27525121,27590657,27656193,27721729,27787265,27852801,27918337,27983873,28049409,28114945,28246017,28180481,28311553,28377089,28442625,28508161,28573697,28639233,28704769,28770305,28835841,28901377,28966913,29032449,29097985,29163521,29229057,29294593,29360129,29425665,29491201,29556737,29622273,29687809,29753345,29818881,29884417,29949953,30015489,30081025,30146561,30212097,30277633,30343169,30408705,30474241,30539777,30605313,30670849,30736385,30801921,30867457,30932993,30998529,31064065,31129601,31195137,31260673,31326209,31391745,31457281,31522817,31588353,31653889,31719425,31784961,31850497,31916033,31981569,32047105,32112641,32178177,32243713,32309249,32374785,32440321,32505857,32571393,32636929,32702465,32768001,32833537,32899073,32964609,33030145,33095681,33161217,33226753,33292289,33357825,33423361,33488897,33554433,33619969,33685505,33751041,33816577,33882113,33947649,34013185,34078721,34144257,34209793,34275329,34340865,34406401,34471937,34537473,34603009,34668545,34734081,34799617,34865153,34930689,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35586049,35651585,35717121,35782657,35848193,35913729,35979265,36044801,36110337,36175873,36241409,36306945,36372481,36438017,36503553,36569089,36634625,36700161,36765697,36831233,36896769,36962305,37027841,37093377,37158913,37224449,37289985,37355521,37421057,37486593,37552129,37617665,37683201,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38404097,38469633,38535169,38600705,38666241,38731777,38797313,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39583745,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40435713,40501249,40566785,40632321,40697857,40763393,40828929,40894465,40960001,41025537,41091073,41156609,41222145,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41746433,41811969,41877505,41943041,42008577,42074113,42139649,42205185,42270721,42336257,42401793,42467329,42532865,42598401,42663937,42729473,42795009,42860545,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43712513,43778049,43843585,44040193,44171265,44236801,44302337,44367873,44433409,44498945,44564481,44630017,44761089,44892161,44957697,45023233,45088769,45219841,45285377,45416449,45481985,45613057,45744129,45809665,45875201,46137345,46333953,46465025,46530561,46792705,46858241,46989313,47054849,47120385,47185921,47251457,47316993,47513601,47644673,48037889,48234497,48365569,48889857,48955393,49086465,49217537,49283073,49414145,49741825,49807361,49872897,50135041,50331649,50528257,50593793,50659329,50724865,50790401,50921473,50987009,51118081,51380225,51511297,51970049,52101121,52297729,52428801,52559873,52625409,52953089,53149697,54132737,54198273,54460417,54591489,54919169,54984705,55508993,55771137,56033281,56229889,56360961,56688641,56950785,57016321,57147393,57278465,57344001,57475073,57868289,57999361,58195969,58327041,58392577,58458113,58523649,58785793,58916865,58982401,59179009,59310081,59441153,59506689,59572225,59637761,59703297,59768833,59899905,59965441,60030977,60096513,60162049,60489729,60555265,60620801,60686337,60817409,60882945,60948481,61079553,61145089,61341697,61472769,61669377,61734913,61865985,61931521,62062593,62128129,62259201,62324737,62390273,62521345,62586881,62717953,62849025,62914561,63111169,63176705,63242241,63307777,63373313,63438849,63504385,63569921,63635457,63700993,63766529,63832065,63963137,64028673,64094209,64159745,64225281,64290817,64421889,64487425,64552961,64749569,64815105,64880641,64946177,65011713,65077249,65142785,65208321,65339393,65404929,65536001,65601537,65732609,65667073,65798145,65929217,65994753,66060289,66125825,66191361,66256897,66322433,66387969,66453505,66519041,66584577,66650113,66715649,66846721,66912257,66977793,67043329,67108865,67174401,67239937,67305473,67371009,67436545,67502081,67567617,67698689,67764225,67829761,67895297,67960833,68026369,68091905,68222977,68288513,68354049,68419585,68485121,68550657,68616193,68681729,68747265,68812801,68878337,68943874,69009409,69074945,69140481,69206017,69271553,69337089,69402625,69468161,69599233,69664769,69730305,69795841,69861377,69926913,69992449,70057985,70123521,70189057,70254593,70320129,70385665,70451201,70516737,70647809,70713345,70778881,70844417,70909954,70975489,71041025,71106561,71172098,71237633,71303169,71368706,71434241,71499777,71565313,71630849,71696385,71761922,71827457,71892993,71958529,72024065,72089601,72155137,72220673,72286209,72351745,72417282,72482817,72548354,72613890,72679425,72744961,72810497,72876033,72941569,73007105,73072641,73138178,73203713,73269249,73334785,73400321,73465857,73531394,73596929,73662465,73728001,73793537,73859073,73924609,73990146,74055681,74121218,74186753,74252289,74317825,74383361,74448897,74514434,74579969,74645506,74711042,74842114,74907649,74973185,75038722,75104258,75169794,75235329,75300865,75366402,75431938,75497474,75563009,75628546,75694081,75759618,75825153,75890689,75956226,76021761,76087298,76152834,76218369,76283905,76349442,76414977,76480514,76546050,76611585,76677121,76742658,76808193,76873729,76939265,77004801,77070337,77135874,77201409,77266946,77332482,77398018,77463553,77529090,77594625,77660161,77725697,77791233,77856770,77922305,77987842,78053377,78118913,78184451,78249986,78315521,78381057,78446593,78512129,78577666,78643201,78708738,78774273,78839810,78905345,78970882,79036417,79101953,79167490,79233025,79298561,79364098,79429633,79495169,79560705,79626242,79691778,79757313,79822849,79888386,79953922,80019458,80084994,80150529,80216066,80281602,80347138,80412673,80478210,80543746,80609281,80674818,80740354,80805890,80871426,80936961,81002498,81068034,81133569,81199105,81264642,81330178],"customize":[16580609,23003137,43843585,44564481,45613057,49283073,51380225],"consumption":[76939265],"contexts":[8388609,10944513,11075585,15269889,16384001,18219009,19464193,22085633,22740993,26542081,26804225,28639233,29360129,35258369,36372481,36896769,37027841,38731777,39387137,39649281,39714817,41287681,41680897,41943041,42205185,42270721,42401793,42532865,42991617,43778049,44040193,44302337,44498945,44761089,45219841,45481985,45875201,46530561,47316993,48234497,49086465,49217537,50331649,50528257,50593793,52101121,52297729,52953089,53149697,54132737,60817409,66387969,76939265],"constructor":[5505025,5832705,6225921,6422529,6488065,6750209,6881281,6946818,7012353,7143425,7274497,7667713,8126465,9371649,9437185,10878978,11468801,12189697,12255233,12648449,12976129,13369345,13762561,14614529,15138817,16121857,16711682,17367041,17563649,17694721,18219009,18481153,18612225,19267585,19660801,20709377,20971521,21823489,22085633,22151169,22740993,22806529,23134209,23199746,23330817,23396353,23724033,23789569,24051713,25165825,25755649,25952257,26542081,27000833,27197441,27262977,27394049,28311553,28966913,31457281,31981570,32505857,32899073,33161217,33554433,33619969,34013185,34144257,34406401,34471937,34734081,34799617,34996225,35061761,35127297,35192833,35258369,35782657,36110337,36438017,36765697,36896769,36962305,37027841,37355521,38141953,38469633,38535169,38600705,38731777,38993921,39649281,39714817,39780355,39845889,40304641,40370177,40763393,40960001,41091073,41680897,41811969,41877505,41943041,42270721,42336257,42532865,42991617,43253761,43384833,43450369,43974657,44105729,44236801,44498945,44761089,44892161,44957697,45219841,45285377,45809665,46006273,46530561,47054849,47185921,47251457,47316993,47448065,47972353,48234497,48889857,49086465,49414145,50069505,50200577,50331649,50528257,50593793,50921473,51576833,52101121,52297729,52363265,52494337,52559873,52953089,53149697,53739521,54132737,54788097,54919169,55312385,55443457,55836673,55967745,56295425,56754177,57933825,59047937,60424193,74842116,77266945,78577665,79626242,79822849,80216068,80412673],"continues":[60817409,66387969],"constructed":[76939267],"checks":[31981569,39780353],"cacheresult":[36175877,37552133,38207493,40108037,40435717,43122693,44040197,48037893,48365573,49217541,49807365,54460421],"coded":[60358657,62980097,72548353,78970881],"cancelawaitdebugger":[11010049,36700164,76087297],"contravariance":[8388609,10944513,11075585],"continue":[45547521,58982401,65601537,72679426],"collecting":[7077890,11010050,35389441,35520513,37289985,42467329,48431106,53346306,75366402,76087298],"console":[9175041,10944514,15990785,16580609,19005441,23003137,43843585,44564481,45613057,49283073,51380225],"contained":[58589185,76414977],"constraints":[7864321,34144257,35192840,35258376,36896776,39649288,40960008,41877512,42336264,42991624,44761096,47054856,47972358,49086472,49545217,50921480,55836678,61014017,64094209,66584577,67829761,69402625,70975489,71041025,72155137,72220673,75366406,76087302,76152834],"configuration":[1835012,3866625,4325377,5111809,5242881,5439489,5701633,5767171,6619138,6684674,6815746,6946817,8650754,31457282,32505858,33423361,33619970,33882113,34406403,34471938,34668547,34734082,34799618,35061762,35323905,35782658,35913729,36503553,37158915,37617665,37814273,38141954,38469634,38600706,38666241,38928385,38993921,39321601,39911425,39976963,41615361,43384834,43450370,43712513,45285379,45547522,45678596,46792705,47775745,49545217,49610753,49872897,50069508,50200577,51118081,51707913,52494340,52690945,53739522,56754178,58654723,62652417,64618497,69074945,69992449,72417284,74514436,75431940,75890695,76742659,77201409,77266946,78577666,79626246,79888389,80478214],"compiling":[56229889,66453505,67698689],"cpuprofilesampleinterval":[59834369,60293121,71565316,74055684,75366401,76087297],"clearscrip":[45547521,49545217,63635457,69992449,75431937,77201409],"configure":[3866625,4325377,5111809,5242881,5439489,5701633,6946817,34406405,39976965,45285381,72417281,74514433,75431937,76742657,77266946,78577666,79626241,80478209],"cpu":[393217,7077892,11010052,35389443,35520515,35979267,37289987,38338562,39124994,42467331,42729475,48431107,49545221,53346307,59834369,60293121,66715649,71565315,71761921,74055683,75366405,76087301,80019457,80150529,80347137,80740353],"completeness":[15532033,24444929,39190529,40501249,44171265],"conversion":[3342337,5963777,76939272,80084993,80543745],"caution":[76939267,80805889],"coordinated":[76939265],"corresponds":[62128129,71237633],"convenient":[7995393,9109505,18219009,26542081,74121217],"collector":[21757953,51511297,72155137],"creating":[35520513,37289985,49545217,80150529],"copying":[76939265],"containing":[2818049,3276801,3473409,3997697,4390914,6619137,6684673,7405569,8650753,9043969,10682369,10747905,14090242,14942209,17432578,18022401,19595266,20447233,21561345,23330818,24313857,25821185,28180481,32243713,37486593,39518209,40173569,41418753,43515905,46858241,48365569,50724865,50987009,54001665,54460417,56819714,58261505,58589186,62914561,64028673,69337089,72482817,73007105,73138177,74645505,75497473,76414978,76480513,77135873,77725698,78184450,79298561,80347138,80674817],"comprise":[45547521,49545217,69992449,77201409],"collects":[7077889,11010049,38338561,39124993,75366401,76087297],"connection":[2293761,2555905,7471105,7798785,9764865,11010049,36700161,38731777,39649281,40304641,40828929,42336257,44498945,44892161,45481985,45547522,49086465,50921473,61800449,68943874,70909954,71696385,76087297,76546049,76939265,78118914],"combination":[6619137,6684673,6815745,8650753],"change":[39256065,40828929,43778049,45481985,56360961,62849025,64094209,66584577,67829761,69402625],"category":[1835010,1900545,3735556,5373956,6684681,6815745,7077896,7405575,8650761,8716292,9043974,9306116,9502724,9830404,10682375,11010060,11206660,11403268,14155784,14483464,16515080,21037065,21364744,21626889,26607625,26738697,36175880,38207496,40894472,42074120,43057160,43581448,44433416,44695554,45023240,45547521,45678594,45744136,47513608,47841282,48037896,49741832,49807368,51314690,51642376,51970056,52625416,54198275,54984712,55115778,57212936,57475074,59375620,59441158,61538306,65470467,68616194,70123522,71958531,75104260,75366408,76087308,76873729,77332485,77856772,78315522,78512132,78839810,79888386,79953924,80281604,81002500,81068036,81264644],"clsid":[3735560,5373960,8716296,8847361,9175041,9306120,9502728,9830408,11010056,11206664,11403272,13172743,13238273,13434887,13500423,13697025,13828097,14745607,14811143,15073287,15400961,15597569,15859713,17235975,17301505,17825799,18087944,18284552,18546689,19202049,19988488,20119553,20316161,20578305,20774913,21495809,22216712,22478856,22937608,23527425,23592968,24182792,25100289,42270721,45219841,45350916,47710212,48168964,50593793,51183620,52953089,53149697,54132737,75104264,76087304,77856776,78512136,79953928,80281608,81002504,81068040,81264648],"cause":[3014657,3407873,70975489,71041025,71827457,72220673,72548353,73400321,78970881],"contains":[1245185,1507329,1966081,2883585,3080193,3211267,7995393,8978433,9109505,9699329,10027009,10289153,10485761,10813441,11141121,11534337,11599873,11796481,11993089,12451841,12779521,13041665,13565953,15925249,17760257,18939907,21692417,22544385,23068673,26148865,45547522,48103425,49545218,51707905,52232193,53673985,60096513,66256897,69271553,71368705,72548353,74121218,74776582,75628545,76414979,77398017,78839809,78970881],"caught":[15990785,76939265],"class":[2,131074,524289,589825,262146,655361,720897,786434,851969,917506,983041,1048578,1114113,1179650,1245185,1310721,1376257,1441793,1507329,1703937,1769476,1835009,1900545,1966081,2031620,2162689,2359298,2228225,2490369,2293761,2686977,2555905,2883585,2621441,2949124,3014658,3080193,3145732,3407874,3342346,3538945,3604481,3670017,3735576,3866625,3932161,4128769,4194305,4325377,4653060,4521985,4587521,4849665,5046276,5111809,5177345,5242881,5308417,5373977,5439489,5505025,5636097,5701633,5832705,5963786,5767169,6029313,6094849,6160385,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7405569,7471105,7536641,7602177,7733249,7798785,7864321,7929860,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8519681,8454145,8585217,8650753,8716313,8781825,8847364,8912900,8978433,9043969,9109505,9175043,9306137,9371649,9437185,9502745,9568257,9633793,9699329,9764865,9830425,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10616833,10682369,10747905,10813441,10551297,10878978,10944513,11010073,11075585,11141121,11206681,11272193,11337729,11403289,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13107201,13041665,13172740,13238275,13369345,13434884,13500420,13565953,13631489,13697027,13762561,13828099,13893633,13959169,14221313,14614529,14745604,14811140,15073284,15138817,15204353,15400963,15597571,15859715,15990785,17039361,17170433,17235972,17301507,17367041,17498113,17563649,17694721,17825796,17891329,17956865,18087941,18284549,18415617,18481153,18546692,18612225,18808833,18939905,19005441,19202051,19267585,19398657,19529729,19660801,19726337,19791873,19922945,19988485,20054017,20119556,20250625,20316164,20381697,20578308,20709377,20774916,20840449,20971521,21037057,21102594,21233665,21299201,21430273,21495812,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22085633,22151169,22216709,22347777,22413313,22478853,22544385,22609922,22675457,22740993,22806529,22937605,22872065,23003137,23134209,23199745,23330817,23396353,23527428,23592965,23658497,23724033,23789569,23855105,23920641,24051713,24117249,24182789,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24903681,25100292,25165825,25231361,25362433,25427969,25690113,25296897,25755649,25821185,25886721,25952257,26017793,26083329,26476545,26542081,26607617,26738689,26804225,26935297,27066369,27197441,27262977,27394049,27787265,27983873,28049409,28114945,28311553,28639233,28966913,29360129,30474241,30539777,30932993,31457281,31522817,31981569,32505857,32636929,32899073,33161217,33226753,33423361,33554433,33619969,33685505,33882113,34013185,34144257,34406401,34471937,34603009,34668545,34734081,34799617,34996225,35061761,35127297,35192833,35258369,35323905,35389441,35454977,35520513,35782657,35913729,35979265,36044801,36110337,36175873,36241409,36438017,36372481,36503553,36634625,36700161,36765697,36896769,36962305,37027841,37093377,37158913,37289985,37355521,37486593,37552129,37617665,37748737,37814273,37879809,37945345,38010881,38076417,38141953,38207489,38273025,38338561,38404097,38469633,38535169,38600705,38666241,38731777,38862849,38928385,38993921,39059457,39124993,39190529,39256065,39321601,39387137,39452673,39518209,39649281,39714817,39780353,39845889,39911425,39976961,40042497,40108033,40173569,40239105,40304641,40370177,40501249,40435713,40632321,40697857,40763393,40828929,40894465,40960001,41025537,41091073,41287681,41353217,41418753,41484289,41549825,41615361,41680897,41811969,41877505,41943041,42074113,42139649,42205185,42270723,42336257,42401793,42467329,42532865,42598401,42729473,42926081,42991617,43057153,43122689,43188225,43253761,43319297,43384833,43450369,43515905,43581441,43646977,43712513,43778049,43843585,43974657,44040193,44171265,44236801,44302337,44433409,44498945,44564481,44761089,44892161,44957697,45023233,45088769,45154305,45219843,45285377,45350924,45481985,45547521,45613057,45678593,45744129,45809665,45875201,46006273,46071809,46333953,46399489,46465025,46530561,46596097,46727169,46792705,46858241,46923777,46989313,47054849,47120385,47185921,47251457,47316993,47448065,47513601,47579137,47710220,47775745,47841281,47972353,48037889,48103425,48168973,48234497,48300033,48365569,48431105,48496641,48562177,48889857,48955393,49086465,49217537,49283073,49414145,49479681,49545217,49610753,49741825,49807361,49872897,50003969,50069505,50135041,50200577,50331649,50397185,50462721,50528257,50593795,50659329,50724865,50790401,50921473,50987009,51118081,51183629,51314689,51380225,51511297,51576833,51642369,51707905,51773441,51838977,51904513,51970049,52101121,52166657,52232193,52297729,52363265,52428801,52494337,52559873,52625409,52690945,52756481,52822017,52887553,52953091,53084161,53149699,53346305,53477377,53542914,53673985,53739521,53805057,53870593,53936129,54001665,54132739,54198273,54263809,54329345,54394881,54460417,54591490,54657025,54722561,54788097,54853633,54919169,54984705,55181313,55246849,55312385,55377921,55443457,55508993,55640065,55705601,55771137,55836673,55967745,56098817,56164353,56295425,56426497,56492034,56623105,56754177,56819713,57016321,57081857,57147393,57212929,57344001,57409537,57475073,57540609,57671682,57737217,57802753,57933825,58130433,58261505,58392577,58458113,58654721,58720257,58851329,58916865,59047937,59179009,59310081,59375617,59768833,59834369,59965441,60096513,60162049,60293121,60358657,60424193,60489729,60555265,60620801,60686337,60817409,60948481,61014017,61210625,61276161,61341697,61669377,61800449,61931521,61997057,62193665,62324737,62390273,62521345,62586881,62652417,62717953,62849025,62914561,62980097,63045633,63242241,63373313,63504385,63569921,63635457,63700993,63963137,64028673,64094209,64159745,64225281,64487425,64618497,64684033,64749569,64815105,64946177,65077249,65142785,65273857,65470465,65536001,65601537,65732609,65798145,65863682,65994753,66125825,66191361,66256897,66322433,66453505,66584577,66650113,66715649,66781186,66912257,66977793,67239937,67371009,67436545,67502082,67567617,67633153,67698689,67829761,67895297,67960833,68091905,68157442,68288513,68354049,68419585,68550657,68616193,68747265,68878337,68943877,69009409,69074945,69140481,69206018,69271553,69402625,69468161,69533697,69664769,69730305,69795841,69861377,69926913,69992453,70057985,70123521,70189057,70254593,70320129,70451201,70516737,70713345,70778881,70844417,70909957,70975489,71041025,71106561,71172101,71237633,71303169,71368709,71434241,71499777,71565313,71630849,71696385,71761925,71827457,71892993,71958533,72024065,72089601,72155137,72220673,72286209,72351745,72417285,72482817,72548358,72613893,72744961,72810497,72876033,72941569,73007105,73072641,73138177,73269249,73203713,73334785,73400321,73531397,73596929,73662465,73793537,73859073,73924609,73990157,74055681,74121221,74186753,74252289,74317825,74383361,74448897,74514437,74579969,74645505,74711045,74842125,74907649,74973185,75038729,75104285,75169797,75235329,75300865,75366405,75431942,75497473,75563009,75628549,75694081,75759629,75825153,75956229,76021761,76087326,76152837,76218369,76283905,76349441,76414977,76480517,76546053,76611585,76677125,76742661,76808193,76873729,76939266,77004801,77070337,77135873,77201413,77266950,77332485,77398021,77463553,77529089,77594629,77660161,77791233,77856797,77922305,77987845,78118913,78184450,78249991,78315521,78381058,78446593,78512153,78577670,78708743,78774277,78839809,78905345,78970886,79101953,79167497,79233025,79364097,79429633,79495169,79560705,79626245,79691781,79757313,79888390,79953949,80019461,80085006,80150529,80216077,80281630,80347141,80412673,80478213,80543758,80674821,80740353,80805895,80871431,80936961,81002526,81068062,81133569,81199105,81264669,81330183],"caches":[7405569,9043969,10682369,54198274],"create":[1245185,1507329,7995393,8388609,8585219,8847361,8978433,9109505,9175041,10158081,10354690,10747906,10551297,10878977,10944514,11075587,11468801,11730945,11927553,12124161,12320769,12386305,12517377,12845057,12910593,13172737,13238273,13500417,13631489,13893633,13959170,14221313,15204353,15990785,17301505,18087937,18284545,18219009,18546689,21495809,24772610,25493506,26542081,37093377,39256065,40828929,42205185,43778049,45481985,54591493,58720257,72548353,77594625,78970881],"common":[45547521,48103426,68616193,74645505,77135873,78905345],"configurator":[31457286,32505862,33619974,34406405,34471942,34668550,34734086,34799622,35061766,35782662,37158918,38141958,38469638,38600710,39976965,43384838,43450374,45285381,75890689],"close":[70975489],"caller":[79757313],"compile":[7077900,11010060,36044801,36175873,36241416,36372488,37552129,37748737,37945345,38076424,38207489,38273032,39387144,39518216,40042504,40108039,40173575,40239105,40435713,40894465,41025537,41287687,41418759,42074113,42401800,42598401,43057153,43122695,43515912,43581441,44040199,44302343,44433409,45023233,45744129,45875208,46858248,47513601,48037889,48365575,49217543,49741825,49807361,50003981,50659335,50987016,51642369,51970049,52625409,54460423,54853645,54984705,57016327,57212929,75366412,76087308],"completion":[9043969,10682369],"compilation":[36175873,36241411,36372483,37552129,37945347,38207489,38273027,39387139,39518211,40108033,40239107,40435713,43122689,43515907,43581443,44040193,44433411,48037889,48365569,49217537,49545218,49741827,49807361,52625411,54460417,72744962,79560707,79757315],"commonjs":[61734913,61931521,65470466,68616197,71958530],"continuation":[58982401,65601537,72679425],"callback":[1835009,3735554,5373954,5767176,7077892,7405569,8585218,8650755,8716290,9043969,9306114,9502722,9830402,10682369,10944513,11010054,11075585,11206658,11403266,14155779,14483459,21037059,21626883,31457283,32505859,32899073,33423362,33554433,33619971,33882113,34013185,34406401,34471939,34668547,34734083,34799619,35061763,35127297,35323905,35782659,35913730,36110337,36438017,36503554,36765697,36962305,37158915,37355521,37617666,37814274,38141955,38469635,38600707,38666242,38928385,39321602,39845889,39911426,39976961,40370177,40894467,41615361,42074115,43384834,43450371,43581443,43712513,44433411,44695553,44957697,45285377,45678593,45744131,46792705,47513603,47775746,47841281,48037891,49610755,49807363,49872897,50069508,50200577,51118081,51314689,51642372,52494340,52756481,53739522,55115777,56754178,57212932,57737217,58130433,58654722,58982404,60293121,61341697,61407233,61538305,61734915,61931523,62193665,63045633,64225281,64684033,65273857,65601540,69337090,69533697,72417282,72679425,74514434,75104259,75366404,75431944,76087303,76742657,77725697,77856771,78512131,78839809,79298562,79626244,79888386,79953923,80281603,80478212,81002499,81068035,81264643],"contain":[7995393,9109505,12976129,13369345,13762561,15138817,20447233,25821185,61603841,70975489],"cleared":[589825,720897,1114113,1376257,71368705,74121217,75628545],"cancels":[11010049,38404097,76087297],"casts":[3538947,4521987,8912897,10223618,11272193,75956227,77987843],"custom":[851970,3342337,5963777,6357000,8126465,45547521,53936130,54657025,57737217,58130433,60293121,60882947,61407233,62193665,63045633,64684033,65273857,65536003,67960834,69533697,69992449,70254595,74711044,75104257,76087297,77856769,78512129,79888385,79953921,80084993,80281601,80543745,81002497,81068033,81264641],"compliance":[80412673],"character":[54001665,58261505,60096514,70057985,76480513,80674817],"components":[10747907],"control":[71827457,73400321,76611588],"connect":[1703937,2686977,7798789,9764869,72613889,73531393],"collect":[15532033,24444929,35389441,35520513,37289985,38338561,39124993,39190529,40501249,42467329,44171265],"comtype":[4521985,8847365,13434881,13697025,13828097,14811137,15073281,15597569,17235969,19202049,19988481,20316161,20578305,22216705,22478849,23527425,23592961,25100289,47710209,51183617,75956225],"collection":[589825,720897,851969,1114113,1376258,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883594,2949121,3014657,3080193,3145729,3211265,3342337,3407873,3538945,3604481,3735553,3866625,3932161,4063234,4128769,4194305,4259842,4325377,4521986,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373954,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077890,7340033,7864321,7929867,7995404,8716290,9109506,9306114,9502722,9830402,9895937,11010050,11206658,11403266,11534338,11599874,11796482,12058626,12255234,12451842,12713986,12976131,13107202,13369347,13565954,13762563,15138819,15532034,21757954,23068674,24444930,24838146,26148866,28180481,28377090,32243713,39190530,40501250,43974662,44171266,45547522,46596097,50462725,51838980,53084162,53805057,54394882,55705603,56819714,60358657,62586881,62980097,63242241,65732609,66256897,68943873,69271553,70320130,70909953,71172097,71368708,71761921,72417281,72548354,72613889,72744961,73531393,73990145,74121237,74514433,74711041,74842113,75038721,75104258,75169793,75366402,75431937,75628548,75759617,75956226,76087298,76152833,76349441,76414979,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77725697,77856770,77987841,78249985,78512129,78577665,78708737,78839809,78970882,79167489,79364097,79626241,79691777,79888385,79953922,80019458,80084993,80150529,80216065,80281602,80347139,80478209,80543745,80674817,80740353,80805889,80871425,80936962,81002498,81068034,81264642,81330177],"constant":[25559041,77660161],"comobject":[13172737,13238273,13500417,14745601,15400961,15859713,17301505,17825793,18087937,18284545,18546689,20119553,20774913,21495809,22937601,24182785,45350913,48168961],"correct":[16711681,23199745,56360961,58523649,62849025,64159745,75104257,79757313,79953921,81264641],"converting":[16580609,23003137,43843585,44564481,45613057,49283073,51380225],"collectcpuprofilesample":[7077889,11010049,38338564,39124996,75366401,76087297],"curiously":[77266945,78577665],"cacheaccepted":[36241414,36372486,37945350,38273030,39387142,39518214,40239110,43515910,43581446,44433414,49741830,52625414],"cleaning":[15990785],"corresponding":[7995393,8454145,8585218,8978433,9109505,10354689,14286849,14352385,14417921,15335425,15466497,15794177,15925249,17760257,20381697,20512769,21692417,22544385,24117249,24903681,26017793,26476545,27066369,27983873,72155137,74121217],"cachekind":[36044805,36175877,36241413,36372485,37552133,37748741,37945349,38076421,38207493,38273029,39387141,39518213,40042501,40108037,40239109,40435717,42401797,43122693,43515909,43581445,44040197,44433413,45744133,45875205,46858245,47513605,48037893,48365573,49217541,49741829,49807365,50987013,51970053,52625413,54460421,54984709],"conjunction":[70975489],"called":[13303809,17104897,21430273,25886721,36700161,37879809,38404097,41353217,45547523,46989313,50135041,52756482,61341697,64225281,69337089,76808193,79298561,79888386],"clearscript":[4,393220,131073,458753,524292,589825,262145,655364,65537,720897,327684,786436,851969,917508,983044,1048577,1114116,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2359300,2228225,2818049,2490369,2293761,2752513,2424833,2686977,2555905,2883585,2621441,2949121,3014657,3080193,3145729,3211265,3276801,3407873,3342337,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4653057,4587521,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505028,5570561,5636097,5701633,5832708,5963777,5898241,5767169,6029316,6094849,6160385,6225924,6291460,6356997,6422532,6488068,6553601,6619140,6684676,6750212,6815748,6881284,6946817,7012356,7077889,7143428,7208964,7274500,7340033,7405572,7471108,7536644,7602180,7667716,7733252,7798788,7864321,7929860,7995396,8060932,8126468,8192004,8257540,8323076,8388612,8454148,8519684,8585220,8650756,8781828,8716289,8847364,8912900,8978436,9043972,9109508,9175044,9240577,9306113,9371652,9437188,9502721,9568260,9633796,9699332,9764868,9830401,9895937,9961476,10027012,10092548,10158084,10223620,10289156,10354692,10420228,10485764,10551300,10616836,10682372,10747908,10813444,10878980,10944516,11010049,11075588,11141124,11272196,11206657,11337732,11403265,11468804,11534340,11599876,11665412,11730948,11796484,11862020,11927556,11993092,12058628,12124164,12189700,12255236,12320769,12386308,12451844,12517380,12582916,12648452,12713988,12779524,12845060,12910596,12976132,13041668,13107204,13172740,13238276,13303812,13369348,13434884,13500420,13565956,13631492,13697028,13762564,13828100,13893636,13959172,14024708,14090244,14155780,14221316,14286852,14352388,14417924,14483460,14548996,14614532,14680068,14745604,14811140,14876676,14942212,15007748,15073284,15138820,15204356,15269892,15335428,15400964,15466500,15532036,15597572,15663108,15728644,15794180,15859716,15925252,15990788,16056324,16121860,16187396,16252932,16318468,16384004,16449540,16515076,16580612,16646148,16711685,16777220,16842756,16908292,16973828,17039364,17104900,17170436,17235972,17301508,17367044,17432580,17498116,17563652,17629188,17694724,17760260,17825796,17891332,17956868,18022404,18087940,18153476,18219014,18284548,18350084,18415620,18481156,18546692,18612228,18677764,18743300,18808836,18874372,18939908,19005444,19070980,19136516,19202052,19267588,19333124,19398660,19464196,19529732,19595268,19660804,19726340,19791876,19857412,19922948,19988484,20054020,20119556,20185092,20250628,20316164,20381700,20447236,20512772,20578308,20643844,20709380,20774916,20840452,20905988,20971524,21037060,21102596,21168132,21233668,21299204,21364740,21430276,21495812,21561348,21626884,21692420,21757956,21823492,21889028,21954564,22020100,22085636,22151172,22216708,22282244,22347780,22413316,22478852,22544388,22609924,22675460,22740996,22806532,22872068,22937604,23003140,23068676,23134212,23199749,23265284,23330820,23396356,23461892,23527428,23592964,23658500,23724036,23789572,23855108,23920644,23986180,24051716,24117252,24182788,24248324,24313860,24379396,24444932,24510468,24576004,24641540,24707076,24772612,24838148,24903684,24969220,25034756,25100292,25165828,25231364,25296900,25362436,25427972,25493508,25559044,25624580,25690116,25755652,25821188,25886724,25952260,26017796,26083332,26148868,26214404,26279940,26345476,26411012,26476548,26542086,26607620,26673156,26738692,26804228,26869764,26935300,27000836,27066372,27131908,27197444,27262980,27328516,27394052,27459588,27525124,27590660,27656196,27721732,27787268,27852804,27918340,27983876,28049412,28114948,28246020,28180484,28311556,28377092,28442628,28508164,28573700,28639236,28704772,28770308,28835844,28901380,28966916,29032452,29097988,29163524,29229060,29294596,29360132,29425668,29491204,29556740,29622276,29687812,29753348,29818884,29884420,29949956,30015492,30081028,30146564,30212100,30277636,30343172,30408708,30474244,30539780,30605316,30670852,30736388,30801924,30867460,30932996,30998532,31064068,31129604,31195140,31260676,31326212,31391748,31457284,31522820,31588356,31653892,31719428,31784964,31850500,31916036,31981572,32047108,32112644,32178180,32243716,32309252,32374788,32440324,32505860,32571396,32636932,32702468,32768004,32833540,32899076,32964612,33030148,33095684,33161220,33226756,33292292,33357828,33423364,33488900,33554436,33619972,33685508,33751044,33816580,33882116,33947652,34013188,34078724,34144260,34209796,34275332,34340868,34406404,34471940,34537476,34603012,34668548,34734084,34799620,34865156,34930692,34996228,35061764,35127300,35192836,35258372,35323908,35389444,35454980,35520516,35586052,35651588,35717124,35782660,35848196,35913732,35979268,36044804,36110340,36175876,36241412,36306948,36372484,36438020,36503556,36569092,36634628,36700164,36765700,36831236,36896772,36962308,37027844,37093380,37158916,37224452,37289988,37355524,37421060,37486596,37552132,37617668,37683204,37748740,37814276,37879812,37945348,38010884,38076420,38141956,38207492,38273028,38338564,38404100,38469636,38535172,38600708,38666244,38731780,38797316,38862852,38928388,38993924,39059460,39124996,39190532,39256068,39321604,39387140,39452676,39518212,39583748,39649284,39714820,39780356,39845892,39911428,39976964,40042500,40108036,40173572,40239108,40304644,40370180,40435716,40501252,40566788,40632324,40697860,40763396,40828932,40894468,40960004,41025540,41091076,41156612,41222148,41287684,41353220,41418756,41484292,41549828,41615364,41680900,41746436,41811972,41877508,41943044,42008580,42074116,42139652,42205188,42270724,42336260,42401796,42467332,42532868,42598404,42663940,42729476,42795012,42860548,42926084,42991620,43057156,43122692,43188228,43253764,43319300,43384836,43450372,43515908,43581444,43646977,43712516,43778052,43843588,43909121,43974657,44040196,44105729,44171268,44236804,44302340,44367876,44433412,44498948,44564484,44630020,44695553,44761092,44826625,44892164,44957700,45023236,45088772,45154305,45219844,45285380,45350913,45416452,45481988,45547521,45613060,45678593,45744132,45809668,45875204,45940737,46006273,46071809,46137348,46202881,46268417,46333956,46399489,46465028,46530564,46596097,46661633,46727169,46792708,46858244,46923777,46989316,47054852,47120388,47185924,47251460,47316996,47382529,47448065,47513604,47579137,47644676,47710209,47775745,47841281,47906817,47972353,48037892,48103425,48168961,48234500,48300033,48365572,48431105,48496641,48562177,48627713,48693249,48758785,48824321,48889860,48955396,49020929,49086468,49152001,49217540,49283076,49348609,49414148,49479681,49545217,49610753,49676289,49741828,49807364,49872900,49938433,50003969,50069505,50135044,50200577,50266113,50331652,50397185,50462721,50528260,50593796,50659332,50724868,50790404,50855937,50921476,50987012,51052545,51118084,51183617,51249153,51314689,51380228,51445761,51511300,51576833,51642369,51707905,51773441,51838977,51904513,51970052,52035585,52101124,52166657,52232193,52297732,52363265,52428804,52494337,52559876,52625412,52690945,52756481,52822017,52887553,52953092,53018625,53084161,53149700,53215233,53280769,53346305,53411841,53477377,53542913,53608449,53673985,53739521,53805057,53870593,53936129,54001665,54067201,54132740,54198276,54263809,54329345,54394881,54460420,54525953,54591492,54657026,54722561,54788097,54853633,54919172,54984708,55050241,55115777,55181313,55246849,55312385,55377921,55443457,55508996,55574529,55640065,55705601,55771140,55836673,55902209,55967745,56033284,56098817,56164353,56229892,56295425,56360966,56426497,56492033,56557569,56623105,56688644,56754177,56819713,56885249,56950788,57016324,57081857,57147396,57212929,57278468,57344004,57409537,57475076,57540609,57606145,57671681,57737217,57802753,57868292,57933825,57999364,58064897,58130433,58195972,58261505,58327044,58392580,58458116,58523652,58589185,58654721,58785796,58720257,58851329,58916868,58982404,59047937,59113473,59179012,59244545,59310084,59375617,59441156,59506692,59572228,59637764,59703300,59768836,59834369,59899908,59965444,60030980,60096516,60162052,60227585,60293121,60358657,60489732,60424193,60555268,60620804,60686340,60751873,60817414,60882948,60948484,61014017,61079556,61145092,61210625,61276161,61341700,61407233,61472772,61538305,61603841,61669380,61734916,61800449,61865988,61931524,61997057,62062596,62128132,62193665,62259204,62324740,62390276,62455809,62521348,62586884,62652417,62717956,62783489,62849030,62914564,62980097,63045633,63111172,63176708,63242244,63307780,63373316,63438852,63504388,63569924,63635460,63700996,63766532,63832068,63897601,63963140,64028676,64094213,64159748,64225284,64290820,64356353,64421892,64487428,64552964,64618497,64684033,64749572,64815108,64880644,64946180,65011716,65077252,65142788,65208324,65273857,65339396,65404932,65470465,65536005,65601540,65732612,65667076,65798148,65863681,65929220,65994756,66060292,66125828,66191364,66256900,66322436,66387974,66453508,66519044,66584581,66650116,66715652,66781185,66846724,66912260,66977796,67043332,67108868,67174404,67239940,67305476,67371012,67436548,67502084,67567620,67633153,67698692,67764228,67829765,67895301,67960836,68026372,68091908,68157441,68222980,68288516,68354052,68419588,68485124,68550660,68616196,68681732,68747268,68812804,68878340,68943878,69009412,69074948,69140484,69206020,69271556,69337092,69402629,69468164,69533697,69599236,69664772,69730308,69795844,69861380,69926916,69992454,70057988,70123524,70189060,70254596,70320132,70385668,70451204,70516740,70582273,70647812,70713348,70778884,70844420,70909958,70975492,71041028,71106564,71172101,71237636,71303172,71368710,71434244,71499780,71565316,71630852,71696388,71761925,71827460,71892996,71958533,72024068,72089604,72155140,72220676,72286212,72351748,72417287,72482820,72548357,72613894,72679428,72744964,72810500,72876036,72941572,73007108,73072644,73138180,73203716,73269252,73334788,73400324,73465860,73531398,73596932,73662468,73728004,73793540,73859076,73924612,73990150,74055684,74121222,74186756,74252292,74317828,74383364,74448900,74514439,74579972,74645508,74711045,74776590,74842118,74907652,74973188,75038726,75104264,75169798,75235332,75300868,75366405,75431941,75497476,75563012,75628551,75694084,75759622,75825156,75890692,75956230,76021764,76087302,76152837,76218372,76283908,76349445,76414980,76480518,76546053,76611588,76677125,76742663,76808196,76873732,76939269,77004804,77070340,77135876,77201413,77266950,77332485,77398021,77463556,77529093,77594629,77660164,77725700,77791236,77856775,77922308,77987846,78053380,78118916,78184452,78249989,78315524,78381060,78446596,78512132,78577670,78643204,78708742,78774277,78839813,78905348,78970885,79036420,79101956,79167494,79233028,79298564,79364101,79429636,79495172,79560708,79626247,79691782,79757316,79822852,79888389,79953929,80019461,80084997,80150532,80216071,80281607,80347141,80412677,80478215,80543749,80609284,80674822,80740357,80805893,80871430,80936964,81002503,81068041,81133572,81199108,81264648,81330181],"createasyncenumerator":[4456449,4784129,4980737,24772612,73269249,74973185,75694081],"clearnocheck":[1966081,2883585,3080193,6422529,19660801,21889028,71368705,74121217,75628545],"concurrentpropertybag":[720898,1966082,6422535,7143431,9437190,12189702,45547521,53084162,56295433,71368718,75628545],"calls":[10878977],"compare":[75038721],"compatibility":[9961474,64094209,66584577,67829761,67895297,69402625],"compiled":[4587521,7077900,11010062,36044802,36175874,36241411,36372484,37552130,37748738,37945347,38076418,38207490,38273027,39387140,39518211,40042498,40108034,40173570,40239107,40435714,40894466,41025538,41287683,41418754,42074114,42401795,42598402,43122690,43057154,43515907,43581443,44040195,44302339,44433411,45023234,45088770,45744130,45875203,46858242,47120386,47513602,48037890,48365570,49217539,49545217,49741827,49807362,50003980,50659330,50987010,51511301,51970050,52625411,52822017,53870593,54198273,54460418,54853644,54984706,56426498,57016322,71172100,75366412,75825153,76087310,76218369,79757313],"closest":[62128129,71237633],"connects":[655361,1310721,1703937,2686977,7798785,9764865,72613889,73531393,75366401],"canceled":[62980097,72548353],"classes":[3342345,5963785,18219009,26542081,34406401,45285377,45547521,48103425,49545217,51707905,52232193,53673985,73990145,75759617,77266946,78577666,80085001,80543753],"consolet":[9175042,10944514,15990788,19005442],"column":[56819713,64487427,80347137],"cstr":[43843585,44564481],"command":[3735553,5373953,8716289,9306113,9502721,9830401,11010049,11206657,11403265,16580620,23003149,43843599,44564495,45613069,49283085,51380237,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"continuationcallback":[45547521,57737217,58130433,58982411,60293121,61407233,62193665,63045633,64684033,65273857,65601550,69533697,72679429,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"completes":[7077889,11010049,35979265,42729473,75366401,76087297],"completed":[7405569,9043969,10682369,15990785,35979265,42729473],"cancelinterrupt":[11010049,37879809,38404100,76087297],"contact":[458753],"compiles":[7077900,11010060,36044801,36175873,37552129,37748737,37945345,38207489,40239105,40435713,40894465,41025537,42074113,42598401,43057153,43581441,44433409,45023233,45744129,47513601,48037889,49741825,49807361,51642380,51970049,52625409,54984705,57212940,75366412,76087308],"concurrent":[720897,1966081,6422529,7143425,9437185,12189697,53084161,56295425,71368705],"checking":[1966083,2883587,3080195,20840449,21889025,22347777,71368707,74121219,75628547],"calling":[2490371,3342337,3670020,5963777,5898242,6422529,6553602,8060929,8192001,8323073,8716290,9306114,9502722,9830402,11206658,11403266,18415617,19398657,19660801,21233665,26935297,41156610,42926082,43319297,46333954,47644673,50397185,50790401,51511297,52166658,54263812,75104258,76087297,76677123,78774276,79101954,79953922,80084993,80281602,80543745,80805890,81002498,81068034,81264642],"checkaccess":[5898241,6553601,8716289,9306113,9502721,9830401,11206657,11403265,41156612,42926084,46333958,75104257,79101953,79953921,80281601,80805889,81002497,81068033,81264641],"copies":[2818052,3211265,3276804,3473412,3997700,4390920,16449537,16646145,16777217,16842753,16908289,18153473,18677761,18743297,20185089,21168129,22282241,23986177,44826626,47906818,49020930,50266114,51249154,53215234,73138180,74645508,75497476,76414977,77135876,78184456],"catch":[15990786,73924609,74448897],"caused":[20709377,27262977,58458113,59965441,60358659,60555265,60948481,62455811,62980099,63176705,68812801,70647809,72548355,78905347,78970883],"connected":[655361,78118913],"cancellationtoken":[62980097,72548353],"collectgarbage":[3735553,5373953,7077889,8716290,9306113,9502721,9830401,11010050,11206657,11403265,15532036,24444933,39190532,40501255,44171270,75104257,75366401,76087298,77856769,78512129,79953921,80281601,81002497,81068034,81264641],"consoles":[16580609,23003137,43843585,44564481,45613057,49283073,51380225],"code":[1638401,1769473,2031617,2424833,2490374,2949121,3145729,3342337,3538945,3670024,3735590,4521985,4653057,4718593,4915201,5046273,5373990,5963777,7340033,7995393,8060930,8192003,8323075,8388609,8585217,8716326,8781826,8847361,8912897,8978433,9109505,9175041,9306150,9502758,9830438,9895937,9961473,10092547,10158081,10223617,10354689,10420227,10747905,10551297,10878977,10944513,11010086,11075585,11206694,11403302,11730945,11862017,11927553,12124161,12386305,12517377,12582913,12845057,12910593,13172737,13238273,13303810,13434881,13500417,13631489,13697025,13828097,13893633,13959169,14024705,14155778,14221313,14286850,14352386,14417922,14483457,14548993,14745601,14811137,14942216,15073281,15204353,15269898,15335426,15400961,15466498,15597569,15663105,15728650,15794178,15859713,15925250,15990787,16187401,16384010,16515073,16580609,16711684,17039361,17170433,17235969,17301505,17760258,17825793,17891330,17956865,18022409,18087937,18219022,18284545,18415617,18546689,19005441,19202049,19398657,19464203,19857410,19988481,20119553,20250626,20316161,20381698,20512770,20578305,20774913,20840449,21037058,21102594,21233665,21364738,21495809,21561353,21626881,21692418,21757953,21889025,22151169,22216705,22347777,22478849,22544386,22609922,22872075,22937601,23003137,23199748,23396353,23527425,23592961,23658497,23855114,24117250,24182785,24313866,24379393,24641537,24903682,25100289,25165825,25231361,25427970,26017794,26476546,26542095,26607617,26738690,26804235,26935297,27066370,27983874,28311553,28639244,29360139,36175873,36241415,36372487,37552129,37945345,38076422,38207489,38273031,39387143,39518215,40042502,40108039,40173574,40239105,40435713,41287686,41418758,42401798,43122695,43515911,43581441,43843585,43909124,44040199,44302342,44433409,44564481,45088769,45350920,45547529,45613057,45875206,46858246,47710216,48037889,48168968,48365575,48496644,48955393,49152002,49217543,49283073,49741825,49807361,50397186,50659334,50855944,50987014,51183624,51380225,51707906,51773442,52035586,52166660,52428801,52625409,52822020,53018628,53870596,54263816,54460423,54722568,55377922,56033283,56229891,56360961,57016326,57278467,57409540,57737221,57868289,58130436,58327041,58523649,59703297,59834369,60293124,60358657,61014017,61407236,62062593,62128129,62193669,62324737,62455810,62717955,62849025,62980097,63045637,63963139,64094213,64159745,64684037,65077249,65273861,65863681,66453507,67043329,67567617,67698691,69009409,69140481,69533701,70582273,71106561,71237633,72548353,73465857,73793537,73924609,73990146,74121217,74448897,74842114,75038722,75104300,75366401,75759618,75956226,76021763,76087339,76152833,76349442,76414977,76611585,76677126,76808194,76939268,77529090,77856810,77987842,78446593,78512170,78708737,78774280,78839809,78905346,78970881,79167491,79364097,79429633,79560708,79953964,80084993,80216066,80281643,80412675,80543745,80740353,81002539,81068075,81133569,81264684],"core":[2,524290,262145,786436,917506,1114114,2359298,5505026,5832706,5898241,6029314,6225922,6291458,6356994,6422530,6488066,6553601,6619138,6684674,6750210,6815746,6881282,7012354,7143426,7208962,7274498,7405570,7471106,7536642,7602178,7667714,7733250,7798786,7929858,7995396,8060930,8126466,8192002,8257538,8323074,8388610,8454146,8519682,8585219,8650754,8781826,8716289,8847362,8912898,8978435,9043970,9109508,9175042,9371650,9437186,9568258,9633794,9699330,9764866,9830401,9961474,10027010,10092546,10158082,10223618,10289154,10354690,10420226,10485762,10551298,10616834,10682370,10747906,10813442,10878978,10944514,11075587,11141122,11272194,11337730,11403265,11468802,11534338,11599874,11665410,11730946,11796482,11862018,11927554,11993090,12058626,12124162,12189698,12255234,12386306,12451842,12517378,12582914,12648450,12713986,12779522,12845058,12910594,12976130,13041666,13107202,13172738,13238274,13303810,13369346,13434882,13500418,13565954,13631490,13697026,13762562,13828098,13893634,13959170,14024706,14090242,14155778,14221314,14286850,14352386,14417922,14483458,14548994,14614530,14680066,14745602,14811138,14876674,14942210,15007746,15073282,15138818,15204354,15269890,15335426,15400962,15466498,15532034,15597570,15663106,15728642,15794178,15859714,15925250,15990786,16056322,16121858,16187394,16252930,16318466,16384002,16449538,16515074,16580610,16646146,16711682,16777218,16842754,16908290,16973826,17039362,17104898,17170434,17235970,17301506,17367042,17432578,17498114,17563650,17629186,17694722,17760258,17825794,17891330,17956866,18022402,18087938,18153474,18219010,18284546,18350082,18415618,18481154,18546690,18612226,18677762,18743298,18808834,18874370,18939906,19005442,19070978,19136514,19202050,19267586,19333122,19398658,19464194,19529730,19595266,19660802,19726338,19791874,19857410,19922946,19988482,20054018,20119554,20185090,20250626,20316162,20381698,20447234,20512770,20578306,20643842,20709378,20774914,20840450,20905986,20971522,21037058,21102594,21168130,21233666,21299202,21364738,21430274,21495810,21561346,21626882,21692418,21757954,21823490,21889026,21954562,22020098,22085634,22151170,22216706,22282242,22347778,22413314,22478850,22544386,22609922,22675458,22740994,22806530,22872066,22937602,23003138,23134210,23199746,23330818,23396354,23527426,23592962,23658498,23724034,23789570,23855106,23920642,23986178,24051714,24117250,24182786,24313858,24379394,24444930,24510466,24576002,24641538,24707074,24903682,25100290,25165826,25231362,25296898,25362434,25427970,25690114,25755650,25821186,25886722,25952258,26017794,26083330,26476546,26542082,26607618,26738690,26804226,26935298,27066370,27197442,27262978,27394050,27983874,28049410,28114946,28311554,28639234,28966914,29360130,39714820,40632324,40697858,41156612,41484290,41746434,41943044,42139652,42270724,42663938,42860548,42926084,43319300,44171268,44564484,44630020,45219844,46333956,46989316,47251460,47644676,48758785,48889860,48955396,50135044,50331652,50790404,51380228,51576833,52297732,52559876,53149700,53477377,53673987,54198274,54591490,54919172,55443457,55508994,55771138,56033282,56229890,56360962,56623105,56688642,56950786,57147394,57278466,57344002,57475074,57868290,57999362,58195970,58327042,58392578,58458114,58523650,58785794,58916866,58982402,59179010,59310082,59441154,59506690,59572226,59637762,59703298,59768834,59899906,59965442,60096514,60162050,60489730,60555266,60620802,60686338,60817410,60882946,60948482,61079554,61145090,61341698,61669378,61734914,61931522,62062594,62128130,62259202,62324738,62390274,62521346,62717954,62849026,62914562,63045633,63111170,63176706,63242242,63307778,63373314,63504386,63569922,63635458,63700994,63766530,63963138,64159746,64225282,64290818,64421890,64552962,64749570,64815106,64880642,65077250,65208322,65273857,65339394,65404930,65536002,65601538,65732610,65667074,65798146,65929218,65994754,66125826,66387970,66453506,66519042,66650114,66846722,66912258,67043330,67108866,67174402,67239938,67305474,67502082,67567618,67764226,67895298,67960834,68222978,68288514,68419586,68485122,68616194,68812802,68878338,68943874,69009412,69140482,69337090,69468162,69533697,69599234,69664770,69795842,69861378,69926914,69992450,70057986,70123522,70254594,70647810,70713348,70909954,71106562,71237634,71368706,71499778,71630852,71958530,72089602,72286210,72351746,72482818,72548354,72613890,72679426,73072642,73138178,73334786,73465858,73531394,73793538,73990146,74121218,74645506,74711042,74776578,74842114,75038722,75104257,75169794,75497474,75628546,75759618,75956226,76021762,76283906,76414978,76480514,76677122,76808194,76873730,77135874,77332482,77463556,77594626,77725698,77856771,77922308,77987842,78118914,78184450,78249986,78315522,78381060,78446594,78512130,78708738,78774274,78839810,78905346,78970882,79101956,79167490,79233026,79298562,79429634,79495170,79691778,79888386,79953921,80084994,80216066,80281606,80412674,80543746,80674818,80805893,80871426,81002502,81068040,81133570,81199106,81264641,81330178],"consecutive":[59834369,60293121,68354049,72810497,75366401,76087297],"correspond":[62390273,66519041,70713345,74907649],"conversions":[18219009,26542081],"creates":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2818049,2883585,2949121,3014657,3080193,3145729,3276801,3342337,3407873,3473409,3538956,3604481,3735560,3866625,3932161,3997697,4128769,4194305,4325377,4390914,4456450,4521995,4653057,4587521,4718593,4784130,4849665,4915201,4980738,5046273,5111809,5177345,5242881,5308417,5373961,5439489,5636097,5701633,5963777,5767174,6094849,6160385,6553601,6946817,7077907,7340033,7864321,8388610,8585217,8716297,9175042,9306121,9502729,9830409,9895937,10158082,10747905,10878978,10944514,11010069,11075586,11206665,11337729,11403273,11468801,12320769,12582915,13172737,13238273,13500417,13959169,14090241,14745601,15400961,15859713,17301505,17432577,17825793,18087937,18284545,18546689,19595265,20119553,20774913,21495809,22937601,24182785,24772609,25493505,33423362,35913730,36241409,36372481,36503554,37093377,37617666,37814274,38076417,38273025,39256065,39387137,39518209,40042497,40108033,40173569,40828929,41287681,41418753,42205185,42401793,43122689,43515905,43778049,44040193,44302337,45154306,45350920,45481985,45875201,46858241,46923779,47775746,48168968,48365569,49217537,49610755,50003980,50659329,50987009,52887554,54460417,54591489,54853644,57016321,58720262,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73138177,73269250,73531393,73990145,74121217,74514433,74645505,74711041,74842113,74973186,75038721,75104265,75169793,75366419,75431942,75497473,75628545,75694082,75759617,75956235,76087317,76152833,76349441,76480513,76546049,76742657,77135873,77266945,77332481,77398017,77529089,77594625,77856777,77987852,78184450,78249985,78512136,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953929,80019457,80084993,80216065,80281609,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002505,81068041,81264649,81330177],"created":[35389441,35520513,35979265,37093377,37289985,38535169,39256065,40304641,40763393,40828929,41680897,41877505,42205185,42467329,42532865,42729473,42991617,43778049,44498945,44761089,45481985,47054849,49086465,50921473],"callbacks":[31981569,39780353],"callbackt":[8585218],"configuratio":[6619137,6684673,6815745,8650753],"cached":[2162690,2228226,6029314,6291458,7208962,7536643,7602179,8257538,54198273,57344001,69468161,75169794,77660161,79691778],"considered":[76873729],"caching":[49545217,79560707],"copyto":[3211265,76414977],"callable":[8454145,8978433,10158081,10354689,10878977,11337729,11468801,13172737,13238273,13434881,13500417,13697025,13828097,14024705,14286849,14352385,14417921,14745601,14811137,15073281,15335425,15400961,15466497,15597569,15794177,15859713,15925249,16711681,17235969,17301505,17760257,17825793,17891329,18087937,18284545,18546689,19202049,19988481,20119553,20250625,20316161,20381697,20512769,20578305,20774913,21102593,21495809,21692417,22216705,22478849,22544385,22609921,22937601,23199745,23527425,23592961,24117249,24182785,24379393,24903681,25100289,26017793,26476545,27066369,27983873,45547522,75956225,77987841],"convert":[3342337,5963777,8060929,8192001,8323073,8781825,10092545,10420225,10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,14221313,15204353,17039361,17170433,17956865,18415617,19398657,20054017,21233665,25231361,26935297,43843585,44564481,45613057,49283073,51380225,61669377,67764225,80084993,80543745],"containskey":[1966081,2883585,3080193,3211265,18939910,71368705,74121217,75628545,76414977],"customattributeloader":[851970,6356993,8126469,45547521,53936130,54657025,57737217,58130433,60293121,60882955,61407233,62193665,63045633,64684033,65273857,65536011,67960839,69533697,69992449,70254606,74711048,75104257,76087297,77856769,78512129,79953921,80281601,81002497,81068033,81264641],"cnn":[15990785],"consuming":[7077900,11010060,36175873,36241409,36372481,37552129,37945345,38207489,38273025,39387137,39518209,40108033,40239105,40435713,43122689,43515905,43581441,44040193,44433409,48037889,48365569,49217537,49741825,49807361,50003974,51642374,52625409,54460417,54853638,57212934,75366412,76087308],"capabilities":[75431937],"char":[3538945,4521985,4915204,7340038,9895942,12124167,14090241,16449537,16646145,16842753,17432577,18153473,18677761,20185089,21168129,23986177,25624583,26869767,28704775,28835841,29229057,29491207,30081031,30212097,30670849,30867457,32112641,32374785,32964615,34275335,35651591,35848193,36044801,36175873,36241409,36372481,37552129,37748737,37945345,38076417,38207489,38273025,38797313,39387137,39518209,39583751,40042497,40108033,40239105,40435713,41222151,42401793,42795009,43122689,43515905,43581441,44040193,44433409,45744129,45875201,46858241,47513601,48037889,48365569,49217537,49741825,49807361,50987009,51052548,51445764,51970049,52625409,54067204,54460417,54984705,75956225,76349446,77529094,77987841,78184449,79364100],"cleanup":[851969,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2162689,2228225,2293761,2555905,2621441,2686977,2883585,2949121,3014657,3080193,3145729,3342337,3407873,3538945,3604481,3866625,3932161,4128769,4194305,4325377,4521985,4653057,4587521,4718593,4849665,4915201,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5636097,5701633,5963777,5767169,6094849,6160385,6553601,6946817,7077889,7340033,7864321,8716289,9306113,9502721,9830401,9895937,11010049,11206657,11403265,15990785,21757953,68943873,70909953,71172097,71368705,71761921,72417281,72548353,72613889,73531393,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76349441,76480513,76546049,76742657,77266945,77332481,77398017,77529089,77856769,77987841,78249985,78577665,78708737,78839809,78970881,79167489,79364097,79626241,79691777,79888385,79953921,80019457,80084993,80216065,80281601,80347137,80478209,80543745,80674817,80740353,80805889,80871425,81002497,81068033,81264641,81330177],"child":[56819713,62586883,80347137],"contextual":[17563649,23724033],"compiledocument":[7077900,11010060,36044805,36175877,37552133,37748741,37945349,38207493,40239109,40435717,40894469,41025541,42074117,42598405,43057157,43581445,44433413,45023237,45744133,47513605,48037893,49741829,49807365,51642380,51970053,52625413,54984709,57212940,75366412,76087308],"currently":[524289,1441793,2490371,3670020,8060929,8192001,8323073,15269889,16384001,18219009,18415617,19398657,19464193,21233665,22085633,22740993,26542081,26804225,26935297,28639233,29360129,35258369,36372481,36896769,37027841,38731777,39387137,39649281,39714817,41287681,41680897,41943041,42205185,42270721,42401793,42532865,42991617,43778049,44040193,44302337,44498945,44761089,45219841,45481985,45875201,46530561,47316993,48234497,49086465,49217537,50331649,50397185,50528257,50593793,52101121,52166658,52297729,52953089,53149697,54132737,54263812,56229889,61734913,66453505,67698689,76677123,78249985,78446593,78774276],"cast":[3538946,4521986,8912900,10223626,11272193,75956226,77987842],"constructors":[71368705,72417281,72548353,73990145,74121217,74514433,74711041,74842113,75038721,75104257,75169793,75366401,75431937,75628545,75759617,75956225,76087297,76152833,76480513,76742657,77266945,77856769,77987841,78577665,78839809,78970881,79167489,79626241,79691777,79888385,79953921,80216065,80281601,80478209,80543745,80674817,81002497,81068033,81264641],"critical":[6356993],"current":[393217,851972,1638402,1703940,1769475,1835012,1900548,1966084,2031619,2162692,2228228,2293764,2555908,2621444,2686980,2883588,2949123,3014660,3080196,3145731,3342340,3407876,3538948,3604484,3866628,3932164,4063233,4128772,4194308,4259841,4325380,4521988,4653059,4587524,4718594,4849668,4915202,5046275,5111812,5177348,5242884,5308420,5373956,5439492,5636100,5701636,5963780,5767172,6094852,6160388,6553604,6946820,7077892,7340034,7864324,8716294,9175041,9306118,9502726,9830406,9895938,11010052,11206662,11403270,13959169,16711681,20709377,21299202,23068675,23199745,24576002,26083330,26148867,27262977,39256065,40697858,40828929,41484290,42926082,43778049,45481985,50790401,54198273,56033281,57278465,57737218,58130434,58327041,58458113,58523649,59965441,60358662,60555265,60948481,62193666,62455812,62717953,62980102,63045633,63176705,63963137,64159745,64684034,65273857,68419592,68812801,68943876,69533697,70320129,70647809,70909956,70975489,71106561,71172100,71368708,71630849,71761924,72417284,72548362,72613892,73531396,73793537,73990147,74121220,74514436,74579969,74711044,74842115,75038723,75104264,75169796,75235329,75366404,75431940,75563009,75628548,75759619,75956228,76087300,76152836,76349442,76480516,76546052,76742660,76939265,77266948,77332484,77398020,77529090,77856774,77987844,78249988,78577668,78708740,78839810,78905348,78970890,79167491,79364098,79626244,79691780,79888388,79953928,80019460,80084996,80216067,80281607,80347140,80412673,80478212,80543748,80674820,80740354,80805892,80871428,80936961,81002503,81068039,81264648,81330180],"compatible":[3538945,4521985,9961474,75956225,77987841],"causing":[76611585],"causes":[3735553,5373953,8716289,9306113,9502721,9830401,11010049,11206657,11403265,17104897,25886721,37879809,50135041,60358657,62980097,71041025,72220673,72548353,73924609,74448897,75104257,75235329,75563009,76087297,77856769,78512129,78970881,79953921,80281601,81002497,81068033,81264641],"com":[3735568,4521987,5373968,5570561,7929857,8716304,8847363,9175043,9306128,9502736,9830416,10747905,11010064,11206672,11403280,11468801,13172737,13238273,13434881,13500417,13697025,13828097,14745601,14811137,15073281,15400961,15597569,15859713,15990785,17235969,17301505,17825793,18087937,18284545,18546689,19202049,19988481,20119553,20316161,20578305,20774913,21495809,22216705,22478849,22937601,23527425,23592961,24182785,25100289,42663938,45350920,47710216,48168968,51183624,75104272,75956227,76087312,77856784,78446594,78512144,79953936,80281616,81002512,81068048,81199105,81264656],"copied":[16449538,16646146,16777218,16842754,16908290,18153474,18677762,18743298,20185090,21168130,22282242,23986178],"configured":[33882114,34668545,35323905,37158913,38666241,38928385,39911426,41615361,43712514,46792705,49872898,51118081],"cancel":[36700161,38404097],"count":[393218,1572865,5767170,16449541,16646149,16842757,18153477,18677765,20185093,21168133,23986181,32505858,33619970,34013186,34471938,34668546,35782658,36110338,36438018,37355522,38141954,38469634,38928386,40370178,44957698,50069508,52494340,53739522,56754178,56819713,58589185,58654722,60227585,65011717,66715650,72417282,74514434,75431938,76414977,77529089,79626244,80347137,80478212,80740353],"collections":[7995394,9109506,10354690,10551297,11730945,11927553,12124161,12386305,12517377,12845057,12910593,13631489,13893633,13959169,14221313,15204353,16711681,23199745,74121218],"certain":[11468801,14155777,14483457,14548993,14942209,15269889,15728641,16187393,16384001,16515073,18022401,18219009,19464193,19857409,21037057,21364737,21561345,21626881,22872065,23855105,24313857,24641537,25427969,26542081,26607617,26738689,26804225,28639233,29360129],"cache":[2162689,2228225,6291459,7077906,7208963,11010066,13303809,36044804,36175878,36241413,36372485,37552134,37748740,37945349,38076420,38207494,38273029,39387141,39518213,40042500,40108038,40239109,40435718,42401796,43122694,43515909,43581445,44040198,44433413,45744132,45875204,46858244,47513604,48037894,48365574,49217542,49545217,49741829,49807366,50003977,50987012,51642377,51970052,52625413,54198274,54460422,54853641,54984708,55640065,57212937,57344002,59375617,61997057,69468162,75169794,75366418,76087314,77332481,79560710,79691778,79757319],"cachebytes":[36044805,36175877,36241414,36372486,37552133,37748741,37945350,38076421,38207493,38273030,39387142,39518214,40042501,40108037,40239110,40435717,42401797,43122693,43515910,43581446,44040197,44433414,45744133,45875205,46858245,47513605,48037893,48365573,49217541,49741830,49807365,50987013,51970053,52625414,54460421,54984709],"check":[20840449,21889025,22347777,41156609,42926081,46333953,61603841],"childnodes":[56819713,62586884,80347137],"crtp":[77266945,78577665],"contents":[2818053,3276805,3473413,3997701,4390918,4456450,4784130,4980738,6619142,6684678,8650758,14090242,14876674,16318466,16973826,17432578,18874370,19070978,19136514,19595266,20905986,22020098,23330822,24772610,25493506,46202884,49938436,54001667,58261505,58392581,65798150,69337093,73072642,73138181,73269250,74645509,74973186,75497477,75694082,76480513,76939265,77135877,78184454,79233025,80674819],"clr":[7995396,9109506],"controls":[52690945,57278465,57737218,58130434,60293122,61407234,62193666,62324737,63045634,63963137,64684034,65273858,67043329,69074945,69533698,75104258,75431937,76087298,77856770,78512130,79953922,80281602,81002498,81068034,81264642]} \ No newline at end of file diff --git a/docs/Reference/fti/FTI_Files.json b/docs/Reference/fti/FTI_Files.json index 16a284f9b..e82a1da9b 100644 --- a/docs/Reference/fti/FTI_Files.json +++ b/docs/Reference/fti/FTI_Files.json @@ -1 +1 @@ -["ClearScript Library - Redirect\u0000index.html\u000018","V8Runtime Events\u0000html/Events_T_Microsoft_ClearScript_V8_V8Runtime.htm\u000066","ConcurrentPropertyBag Events\u0000html/Events_T_Microsoft_ClearScript_ConcurrentPropertyBag.htm\u000068","PropertyBag Events\u0000html/Events_T_Microsoft_ClearScript_PropertyBag.htm\u000061","HostTypeCollection Events\u0000html/Events_T_Microsoft_ClearScript_HostTypeCollection.htm\u000068","ScriptEngineException Events\u0000html/Events_T_Microsoft_ClearScript_ScriptEngineException.htm\u000072","Undefined Fields\u0000html/Fields_T_Microsoft_ClearScript_Undefined.htm\u000052","ValueRef\u0026lt;T\u0026gt; Fields\u0000html/Fields_T_Microsoft_ClearScript_ValueRef_1.htm\u000058","HitLine Fields\u0000html/Fields_T_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine.htm\u000067","PropertyBag.PropertyChanged Event\u0000html/E_Microsoft_ClearScript_PropertyBag_PropertyChanged.htm\u0000154","VoidResult Fields\u0000html/Fields_T_Microsoft_ClearScript_VoidResult.htm\u000053","V8Runtime.DebuggerConnected Event\u0000html/E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected.htm\u0000166","Nothing Fields\u0000html/Fields_T_Microsoft_ClearScript_Windows_Nothing.htm\u000053","NullSyncInvoker Fields\u0000html/Fields_T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm\u000056","V8Runtime.DebuggerDisconnected Event\u0000html/E_Microsoft_ClearScript_V8_V8Runtime_DebuggerDisconnected.htm\u0000166","General Error\u0000html/GeneralError.htm\u000032","V8CpuProfile.Node.HitLine.LineNumber Field\u0000html/F_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine_LineNumber.htm\u000099","Undefined.Value Field\u0000html/F_Microsoft_ClearScript_Undefined_Value.htm\u000098","V8CpuProfile.Node.HitLine.HitCount Field\u0000html/F_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine_HitCount.htm\u0000126","ValueRef\u0026lt;T\u0026gt;.Value Field\u0000html/F_Microsoft_ClearScript_ValueRef_1_Value.htm\u000096","ClearScript Library - Search\u0000search.html\u000011","VoidResult.Value Field\u0000html/F_Microsoft_ClearScript_VoidResult_Value.htm\u000099","Nothing.Value Field\u0000html/F_Microsoft_ClearScript_Windows_Nothing_Value.htm\u0000102","NullSyncInvoker.Instance Field\u0000html/F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance.htm\u0000106","CustomAttributeLoader Methods\u0000html/Methods_T_Microsoft_ClearScript_CustomAttributeLoader.htm\u0000168","Document Methods\u0000html/Methods_T_Microsoft_ClearScript_Document.htm\u0000152","DocumentInfo Methods\u0000html/Methods_T_Microsoft_ClearScript_DocumentInfo.htm\u0000154","ConcurrentPropertyBag Methods\u0000html/Methods_T_Microsoft_ClearScript_ConcurrentPropertyBag.htm\u0000278","DefaultDocumentLoader Methods\u0000html/Methods_T_Microsoft_ClearScript_DefaultDocumentLoader.htm\u0000237","EventConnection Methods\u0000html/Methods_T_Microsoft_ClearScript_EventConnection.htm\u0000165","DocumentLoader Methods\u0000html/Methods_T_Microsoft_ClearScript_DocumentLoader.htm\u0000188","DocumentSettings Methods\u0000html/Methods_T_Microsoft_ClearScript_DocumentSettings.htm\u0000226","EventSource Methods\u0000html/Methods_T_Microsoft_ClearScript_EventSource.htm\u0000166","EventConnection\u0026lt;T\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_EventConnection_1.htm\u0000174","EventSource\u0026lt;T\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_EventSource_1.htm\u0000169","Extensions Methods\u0000html/Methods_T_Microsoft_ClearScript_Extensions.htm\u0000221","DocumentCategory Methods\u0000html/Methods_T_Microsoft_ClearScript_DocumentCategory.htm\u0000153","IScriptableObject Methods\u0000html/Methods_T_Microsoft_ClearScript_IScriptableObject.htm\u000058","ImmutableValueAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_ImmutableValueAttribute.htm\u0000215","DefaultScriptUsageAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm\u0000216","IArrayBuffer Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm\u0000315","IDataView Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_IDataView.htm\u0000338","IPropertyBag Methods\u0000html/Methods_T_Microsoft_ClearScript_IPropertyBag.htm\u0000296","ITypedArray Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_ITypedArray.htm\u0000338","NoScriptAccessAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_NoScriptAccessAttribute.htm\u0000216","JavaScriptExtensions Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_JavaScriptExtensions.htm\u0000283","DynamicHostObject Methods\u0000html/Methods_T_Microsoft_ClearScript_DynamicHostObject.htm\u0000698","ScriptInterruptedException Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptInterruptedException.htm\u000069","IJavaScriptObject Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_IJavaScriptObject.htm\u0000224","IArrayBufferView Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm\u0000309","PropertyBag Methods\u0000html/Methods_T_Microsoft_ClearScript_PropertyBag.htm\u0000235","NoDefaultScriptAccessAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm\u0000217","HostFunctions Methods\u0000html/Methods_T_Microsoft_ClearScript_HostFunctions.htm\u0000847","StringDocument Methods\u0000html/Methods_T_Microsoft_ClearScript_StringDocument.htm\u0000153","ScriptMemberAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptMemberAttribute.htm\u0000215","V8CpuProfile Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8CpuProfile.htm\u0000177","ITypedArray\u0026lt;T\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm\u0000378","IScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_IScriptEngine.htm\u00001148","HitLine Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine.htm\u0000159","Undefined Methods\u0000html/Methods_T_Microsoft_ClearScript_Undefined.htm\u0000152","V8RuntimeDebuggerEventArgs Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs.htm\u0000156","Node Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8CpuProfile_Node.htm\u0000155","V8Script Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8Script.htm\u0000163","IScriptObject Methods\u0000html/Methods_T_Microsoft_ClearScript_IScriptObject.htm\u0000168","ValueRef Methods\u0000html/Methods_T_Microsoft_ClearScript_ValueRef.htm\u000056","HostTypeCollection Methods\u0000html/Methods_T_Microsoft_ClearScript_HostTypeCollection.htm\u0000430","Sample Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8CpuProfile_Sample.htm\u0000155","VoidResult Methods\u0000html/Methods_T_Microsoft_ClearScript_VoidResult.htm\u0000153","V8RuntimeHeapInfo Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm\u0000155","ScriptObject Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptObject.htm\u0000804","ScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptEngine.htm\u00001267","ValueRef\u0026lt;T\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_ValueRef_1.htm\u0000156","IHostWindow Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_IHostWindow.htm\u000054","ISyncInvoker Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_ISyncInvoker.htm\u0000108","ScriptUsageAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptUsageAttribute.htm\u0000215","ConcurrentPropertyBag Constructor\u0000html/M_Microsoft_ClearScript_ConcurrentPropertyBag__ctor.htm\u000099","V8Runtime Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8Runtime.htm\u0000947","ExtendedHostFunctions Methods\u0000html/Methods_T_Microsoft_ClearScript_ExtendedHostFunctions.htm\u00001188","ScriptEngineException Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptEngineException.htm\u0000208","IWindowsScriptObject Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_IWindowsScriptObject.htm\u0000234","CustomAttributeLoader.LoadCustomAttributes\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_CustomAttributeLoader_LoadCustomAttributes__1.htm\u0000311","DefaultDocumentLoader Constructor\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader__ctor.htm\u000091","ConcurrentPropertyBag(Boolean) Constructor\u0000html/M_Microsoft_ClearScript_ConcurrentPropertyBag__ctor_1.htm\u0000154","V8RuntimeConstraints Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm\u0000154","DefaultDocumentLoader.GetCachedDocument Method\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader_GetCachedDocument.htm\u0000163","DefaultScriptUsageAttribute(ScriptAccess) Constructor\u0000html/M_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor_1.htm\u0000132","DefaultScriptUsageAttribute Constructor\u0000html/M_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor.htm\u000094","CustomAttributeLoader Constructor\u0000html/M_Microsoft_ClearScript_CustomAttributeLoader__ctor.htm\u000091","DocumentInfo(Uri) Constructor\u0000html/M_Microsoft_ClearScript_DocumentInfo__ctor_1.htm\u0000124","DocumentInfo(String) Constructor\u0000html/M_Microsoft_ClearScript_DocumentInfo__ctor.htm\u0000124","ConcurrentPropertyBag(Boolean, IEqualityComparer\u0026lt;String\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_ConcurrentPropertyBag__ctor_2.htm\u0000195","DocumentLoader.DiscardCachedDocuments Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_DiscardCachedDocuments.htm\u0000107","DefaultDocumentLoader.LoadDocumentAsync Method\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader_LoadDocumentAsync.htm\u0000417","DefaultDocumentLoader.CacheDocument Method\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader_CacheDocument.htm\u0000217","ConcurrentPropertyBag(IEqualityComparer\u0026lt;String\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_ConcurrentPropertyBag__ctor_3.htm\u0000159","DocumentLoader.CacheDocument Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_CacheDocument.htm\u0000215","JScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_JScriptEngine.htm\u00001611","VBScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_VBScriptEngine.htm\u00001611","DocumentLoader.GetCachedDocument Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_GetCachedDocument.htm\u0000161","DocumentLoader.LoadDocument Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_LoadDocument.htm\u0000371","VBScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_VBScriptEngine.htm\u00001610","Document Constructor\u0000html/M_Microsoft_ClearScript_Document__ctor.htm\u000089","DefaultDocumentLoader.DiscardCachedDocuments Method\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader_DiscardCachedDocuments.htm\u0000109","EventSource\u0026lt;T\u0026gt;.connect Method\u0000html/M_Microsoft_ClearScript_EventSource_1_connect.htm\u0000162","DocumentSettings.AddSystemDocument(String, DocumentCategory, String) Method\u0000html/M_Microsoft_ClearScript_DocumentSettings_AddSystemDocument_1.htm\u0000238","NullSyncInvoker Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm\u0000218","DynamicHostObject.HasMember Method\u0000html/M_Microsoft_ClearScript_DynamicHostObject_HasMember.htm\u0000198","EventSource.connect Method\u0000html/M_Microsoft_ClearScript_EventSource_connect.htm\u0000144","ExtendedHostFunctions.typeLibEnums\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_typeLibEnums__1.htm\u0000276","ExtendedHostFunctions.lib(HostTypeCollection, String[]) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_lib.htm\u0000426","V8ScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8ScriptEngine.htm\u00002292","DocumentLoader.LoadDocumentAsync Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_LoadDocumentAsync.htm\u0000370","DynamicHostObject Constructor\u0000html/M_Microsoft_ClearScript_DynamicHostObject__ctor.htm\u000091","DocumentSettings.AddSystemDocument(String, DocumentCategory, String, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_DocumentSettings_AddSystemDocument_2.htm\u0000276","Extensions.ToHostType(Type) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToHostType.htm\u0000244","JScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_JScriptEngine.htm\u00001610","ExtendedHostFunctions.arrType\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_arrType__1.htm\u0000204","DocumentLoader Constructor\u0000html/M_Microsoft_ClearScript_DocumentLoader__ctor.htm\u000090","EventConnection.disconnect Method\u0000html/M_Microsoft_ClearScript_EventConnection_disconnect.htm\u000099","Nothing Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Nothing.htm\u0000153","DocumentSettings.AddSystemDocument(String, String) Method\u0000html/M_Microsoft_ClearScript_DocumentSettings_AddSystemDocument_3.htm\u0000201","Extensions.ToRestrictedHostObject(Object, Type) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToRestrictedHostObject.htm\u0000298","Extensions.ToHostType(Type, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToHostType_1.htm\u0000282","ExtendedHostFunctions.lib(String[]) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_lib_1.htm\u0000353","ExtendedHostFunctions.type(String, String, Object[]) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_type_1.htm\u0000474","DocumentSettings Constructor\u0000html/M_Microsoft_ClearScript_DocumentSettings__ctor.htm\u000090","HostFunctions.asType\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_asType__1.htm\u0000306","ExtendedHostFunctions.comType Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_comType.htm\u0000349","HostFunctions.func(Int32, Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_func.htm\u0000272","ExtendedHostFunctions.type(Type) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_type_2.htm\u0000215","HostFunctions.getProperty(IDynamicMetaObjectProvider, String) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_getProperty_1.htm\u0000206","Extensions.ToRestrictedHostObject(Object, Type, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToRestrictedHostObject_1.htm\u0000336","ExtendedHostFunctions.newComObj Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_newComObj.htm\u0000354","WindowsScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine.htm\u00001602","ExtendedHostFunctions Constructor\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions__ctor.htm\u000091","DocumentSettings.AddSystemDocument(String, Document) Method\u0000html/M_Microsoft_ClearScript_DocumentSettings_AddSystemDocument.htm\u0000211","HostFunctions.isType\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_isType__1.htm\u0000267","WindowsScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm\u00001609","HostFunctions.cast\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_cast__1.htm\u0000251","HostFunctions.newObj(IDynamicMetaObjectProvider, Object[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newObj_1.htm\u0000220","HostFunctions.isNull Method\u0000html/M_Microsoft_ClearScript_HostFunctions_isNull.htm\u0000170","Extensions.ToRestrictedHostObject\u0026lt;T\u0026gt;(T) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToRestrictedHostObject__1.htm\u0000288","HostFunctions.func\u0026lt;T\u0026gt;(Int32, Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_func__1.htm\u0000470","HostFunctions.removeProperty(IPropertyBag, String) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_removeProperty.htm\u0000204","ExtendedHostFunctions.type(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_type.htm\u0000408","HostFunctions.newArr(Int32[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newArr.htm\u0000202","HostFunctions.proc Method\u0000html/M_Microsoft_ClearScript_HostFunctions_proc.htm\u0000409","HostFunctions.setProperty(IDynamicMetaObjectProvider, String, Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_setProperty_1.htm\u0000247","HostFunctions.toDouble Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toDouble.htm\u0000304","HostFunctions.isTypeObj(Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_isTypeObj.htm\u0000202","HostFunctions.del\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_del__1.htm\u0000408","Extensions.ToRestrictedHostObject\u0026lt;T\u0026gt;(T, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToRestrictedHostObject__1_1.htm\u0000325","HostFunctions.getElement Method\u0000html/M_Microsoft_ClearScript_HostFunctions_getElement.htm\u0000220","HostFunctions.removeProperty(IDynamicMetaObjectProvider, String) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_removeProperty_1.htm\u0000206","HostFunctions.newObj(Object, Object[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newObj_2.htm\u0000290","HostFunctions.removeElement Method\u0000html/M_Microsoft_ClearScript_HostFunctions_removeElement.htm\u0000220","HostFunctions.isTypeObj\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_isTypeObj__1.htm\u0000192","HostFunctions.toSByte Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toSByte.htm\u0000304","HostFunctions.newArr\u0026lt;T\u0026gt;(Int32[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newArr__1.htm\u0000295","HostFunctions.toByte Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toByte.htm\u0000304","HostFunctions.toInt16 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toInt16.htm\u0000305","HostFunctions.getProperty(IPropertyBag, String) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_getProperty.htm\u0000204","HostFunctions.flags\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_flags__1.htm\u0000371","HostFunctions.toUInt32 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toUInt32.htm\u0000305","HostFunctions.setElement Method\u0000html/M_Microsoft_ClearScript_HostFunctions_setElement.htm\u0000258","HostTypeCollection.AddAssembly(String) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly_2.htm\u0000145","HostFunctions.typeOf\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_typeOf__1.htm\u0000276","HostFunctions.newObj Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newObj.htm\u0000212","HostTypeCollection.AddType(Type) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddType_2.htm\u0000129","HostFunctions.toSingle Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toSingle.htm\u0000304","HostFunctions.newObj\u0026lt;T\u0026gt;(Object[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newObj__1.htm\u0000352","HostFunctions.toChar Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toChar.htm\u0000304","HostTypeCollection(Predicate\u0026lt;Type\u0026gt;, String[]) Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor_2.htm\u0000226","HostFunctions.toInt32 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toInt32.htm\u0000305","HostFunctions Constructor\u0000html/M_Microsoft_ClearScript_HostFunctions__ctor.htm\u000090","HostTypeCollection.AddAssembly(String, Predicate\u0026lt;Type\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly_3.htm\u0000204","HostFunctions.setProperty(IPropertyBag, String, Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_setProperty.htm\u0000245","HostTypeCollection.GetNamespaceNode Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_GetNamespaceNode.htm\u0000151","HostFunctions.toUInt64 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toUInt64.htm\u0000305","HostFunctions.toStaticType Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toStaticType.htm\u0000188","HostTypeCollection(Assembly[]) Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor_3.htm\u0000159","HostTypeCollection.AddAssembly(Assembly) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly.htm\u0000135","IScriptEngine.AddCOMObject(String, HostItemFlags, String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_3.htm\u0000323","HostTypeCollection Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor.htm\u000094","HostFunctions.toDecimal Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toDecimal.htm\u0000304","HostTypeCollection.AddType(String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddType.htm\u0000233","HostFunctions.toInt64 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toInt64.htm\u0000305","HostFunctions.newVar\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newVar__1.htm\u0000460","IScriptEngine.AddCOMObject(String, String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_7.htm\u0000285","HostTypeCollection(String[]) Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor_4.htm\u0000169","HostTypeCollection.AddAssembly(Assembly, Predicate\u0026lt;Type\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly_1.htm\u0000194","HostTypeCollection.AddType(String, Type[]) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddType_1.htm\u0000192","HostFunctions.toUInt16 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toUInt16.htm\u0000305","IScriptEngine.AddCOMObject(String, Guid) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_4.htm\u0000209","IScriptEngine.AddHostTypes Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostTypes.htm\u0000232","HostTypeCollection(Predicate\u0026lt;Type\u0026gt;, Assembly[]) Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor_1.htm\u0000216","IScriptEngine.AddCOMType(String, String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_7.htm\u0000285","HostFunctions.tryCatch Method\u0000html/M_Microsoft_ClearScript_HostFunctions_tryCatch.htm\u0000539","ImmutableValueAttribute Constructor\u0000html/M_Microsoft_ClearScript_ImmutableValueAttribute__ctor.htm\u000091","IScriptEngine.AddHostType(String, String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_4.htm\u0000342","IScriptEngine.AddCOMType(String, HostItemFlags, Guid) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType.htm\u0000247","IScriptEngine.EvaluateDocument(String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_EvaluateDocument.htm\u0000197","IScriptEngine.ExecuteDocument(String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_ExecuteDocument.htm\u0000162","IScriptEngine.AddRestrictedHostObject\u0026lt;T\u0026gt;(String, HostItemFlags, T) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddRestrictedHostObject__1.htm\u0000281","IScriptEngine.AddCOMObject(String, Guid, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_5.htm\u0000250","IScriptableObject.OnExposedToScriptCode Method\u0000html/M_Microsoft_ClearScript_IScriptableObject_OnExposedToScriptCode.htm\u0000187","IScriptEngine.AddHostType(String, HostItemFlags, String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_1.htm\u0000380","HostFunctions.typeOf(Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_typeOf.htm\u0000300","IScriptEngine.Evaluate(String, Boolean, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Evaluate_2.htm\u0000530","IScriptEngine.AddHostType(String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_5.htm\u0000301","IScriptEngine.ExecuteDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_ExecuteDocument_1.htm\u0000199","IScriptEngine.AddHostObject(String, HostItemFlags, Object) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostObject.htm\u0000471","IScriptEngine.EvaluateDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_EvaluateDocument_1.htm\u0000234","IScriptEngine.AddRestrictedHostObject\u0026lt;T\u0026gt;(String, T) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddRestrictedHostObject__1_1.htm\u0000245","IScriptEngine.AddCOMObject(String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_6.htm\u0000244","IScriptEngine.AddCOMType(String, HostItemFlags, Guid, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_1.htm\u0000288","IScriptEngine.AddCOMObject(String, HostItemFlags, Guid) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject.htm\u0000247","IScriptEngine.Invoke Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Invoke.htm\u0000190","IScriptEngine.AddHostType(String, HostItemFlags, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_2.htm\u0000339","IScriptEngine.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_CollectGarbage.htm\u0000121","IScriptEngine.AddHostObject(String, Object) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostObject_1.htm\u0000188","IScriptEngine.AddHostType(String, Type) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_6.htm\u0000238","IScriptEngine.Evaluate(String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Evaluate_3.htm\u0000274","IScriptObject.GetProperty(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_GetProperty_1.htm\u0000193","IScriptEngine.ExecuteDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_ExecuteDocument_2.htm\u0000238","IScriptEngine.EvaluateDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_EvaluateDocument_2.htm\u0000273","IScriptObject.DeleteProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_DeleteProperty.htm\u0000139","IScriptEngine.AddCOMObject(String, HostItemFlags, Guid, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_1.htm\u0000288","IScriptEngine.AddCOMType(String, HostItemFlags, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_2.htm\u0000282","IScriptEngine.AddHostType(String, HostItemFlags, Type) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_3.htm\u0000276","IScriptEngine.Evaluate(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Evaluate.htm\u0000225","IScriptEngine.AddHostType(Type) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_7.htm\u0000221","IScriptEngine.Execute(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Execute.htm\u0000190","IScriptEngine.AddHostType(HostItemFlags, Type) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType.htm\u0000259","IScriptObject.DeleteProperty(String) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_DeleteProperty_1.htm\u0000140","IScriptObject.Invoke Method\u0000html/M_Microsoft_ClearScript_IScriptObject_Invoke.htm\u0000180","IScriptEngine.Execute(String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Execute_1.htm\u0000184","IScriptEngine.Evaluate(String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Evaluate_1.htm\u0000218","IScriptEngine.AddCOMObject(String, HostItemFlags, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_2.htm\u0000282","IScriptObject.GetProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_GetProperty.htm\u0000140","IArrayBuffer.InvokeWithDirectAccess(Action\u0026lt;IntPtr\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_InvokeWithDirectAccess.htm\u0000206","IArrayBufferView.InvokeWithDirectAccess\u0026lt;T\u0026gt;(Func\u0026lt;IntPtr, T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_InvokeWithDirectAccess__1.htm\u0000249","IScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_ExecuteCommand.htm\u0000183","IScriptEngine.AddCOMType(String, HostItemFlags, String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_3.htm\u0000323","IScriptObject.InvokeAsFunction Method\u0000html/M_Microsoft_ClearScript_IScriptObject_InvokeAsFunction.htm\u0000152","ITypedArray\u0026lt;T\u0026gt;.Read Method\u0000html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_Read.htm\u0000252","PropertyBag.Add Method\u0000html/M_Microsoft_ClearScript_PropertyBag_Add.htm\u0000182","IScriptEngine.Execute(String, Boolean, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Execute_2.htm\u0000297","JavaScriptExtensions.ToPromise(ValueTask, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise_3.htm\u0000300","PropertyBag(Boolean) Constructor\u0000html/M_Microsoft_ClearScript_PropertyBag__ctor_1.htm\u0000153","ScriptEngineException(String, Exception) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngineException__ctor_3.htm\u0000163","ITypedArray\u0026lt;T\u0026gt;.ToArray Method\u0000html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_ToArray.htm\u0000128","PropertyBag.ClearNoCheck Method\u0000html/M_Microsoft_ClearScript_PropertyBag_ClearNoCheck.htm\u0000112","IArrayBuffer.InvokeWithDirectAccess\u0026lt;T\u0026gt;(Func\u0026lt;IntPtr, T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_InvokeWithDirectAccess__1.htm\u0000254","IScriptObject.InvokeMethod Method\u0000html/M_Microsoft_ClearScript_IScriptObject_InvokeMethod.htm\u0000180","IArrayBufferView.ReadBytes Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_ReadBytes.htm\u0000257","IScriptEngine.AddCOMType(String, Guid) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_4.htm\u0000209","ScriptEngine.AddCOMObject(String, String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_7.htm\u0000325","IScriptEngine.Execute(String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Execute_3.htm\u0000240","PropertyBag(Boolean, IEqualityComparer\u0026lt;String\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_PropertyBag__ctor_2.htm\u0000194","PropertyBag.ContainsKey Method\u0000html/M_Microsoft_ClearScript_PropertyBag_ContainsKey.htm\u0000172","JavaScriptExtensions.ToPromise\u0026lt;T\u0026gt;(Task\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise__1.htm\u0000288","IScriptObject.SetProperty(Int32, Object) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_SetProperty.htm\u0000156","ScriptEngine.AddCOMObject(String, HostItemFlags, Guid) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject.htm\u0000287","ITypedArray\u0026lt;T\u0026gt;.Write Method\u0000html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_Write.htm\u0000252","IScriptEngine.GetStackTrace Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_GetStackTrace.htm\u0000140","IArrayBuffer.ReadBytes Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_ReadBytes.htm\u0000256","IArrayBufferView.WriteBytes Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_WriteBytes.htm\u0000257","IScriptEngine.AddCOMType(String, Guid, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_5.htm\u0000250","PropertyBag(IEqualityComparer\u0026lt;String\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_PropertyBag__ctor_3.htm\u0000158","PropertyBag.Remove Method\u0000html/M_Microsoft_ClearScript_PropertyBag_Remove.htm\u0000165","ScriptEngine.AddCOMType(String, HostItemFlags, Guid) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType.htm\u0000287","JavaScriptExtensions.ToPromise\u0026lt;T\u0026gt;(Task\u0026lt;T\u0026gt;, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise__1_1.htm\u0000324","IScriptObject.SetProperty(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_SetProperty_1.htm\u0000208","IScriptEngine.Interrupt Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Interrupt.htm\u0000107","IArrayBuffer.GetBytes Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_GetBytes.htm\u0000135","ScriptEngine.AddCOMObject(String, HostItemFlags, Guid, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_1.htm\u0000336","JavaScriptExtensions.ToAsyncEnumerable Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToAsyncEnumerable.htm\u0000281","IArrayBuffer.WriteBytes Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_WriteBytes.htm\u0000257","PropertyBag.RemovePropertyNoCheck Method\u0000html/M_Microsoft_ClearScript_PropertyBag_RemovePropertyNoCheck.htm\u0000159","IScriptEngine.AddCOMType(String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_6.htm\u0000244","ScriptEngineException.GetObjectData Method\u0000html/M_Microsoft_ClearScript_ScriptEngineException_GetObjectData.htm\u0000193","IArrayBufferView.GetBytes Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_GetBytes.htm\u0000132","JavaScriptExtensions.ToPromise\u0026lt;T\u0026gt;(ValueTask\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise__1_2.htm\u0000306","ScriptEngine.AddCOMType(String, String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_7.htm\u0000325","ScriptEngineException.ToString Method\u0000html/M_Microsoft_ClearScript_ScriptEngineException_ToString.htm\u0000127","ScriptEngine.AddCOMType(String, HostItemFlags, Guid, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_1.htm\u0000336","PropertyBag.SetPropertyNoCheck Method\u0000html/M_Microsoft_ClearScript_PropertyBag_SetPropertyNoCheck.htm\u0000170","ScriptEngine.Dispose(Boolean) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Dispose_1.htm\u0000202","ScriptEngine.Execute(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Execute.htm\u0000222","JavaScriptExtensions.ToEnumerable Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToEnumerable.htm\u0000276","ScriptEngine.AddCOMObject(String, HostItemFlags, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_2.htm\u0000322","ScriptEngine.AddHostType(String, String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_4.htm\u0000394","IArrayBufferView.InvokeWithDirectAccess(Action\u0026lt;IntPtr\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_InvokeWithDirectAccess.htm\u0000201","ScriptEngineException Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngineException__ctor.htm\u000093","JavaScriptExtensions.ToPromise\u0026lt;T\u0026gt;(ValueTask\u0026lt;T\u0026gt;, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise__1_3.htm\u0000342","ScriptEngine.AddHostObject(String, HostItemFlags, Object) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostObject.htm\u0000511","ScriptEngine.Evaluate(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Evaluate.htm\u0000257","ScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_ExecuteCommand.htm\u0000208","PropertyBag.TryGetValue Method\u0000html/M_Microsoft_ClearScript_PropertyBag_TryGetValue.htm\u0000225","ScriptEngine.AddCOMType(String, HostItemFlags, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_2.htm\u0000322","JavaScriptExtensions.ToPromise(Task) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise.htm\u0000246","ScriptEngine.Finalize Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Finalize.htm\u0000160","ScriptEngineException(SerializationInfo, StreamingContext) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngineException__ctor_1.htm\u0000160","ScriptEngine.AddHostType(String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_5.htm\u0000345","ScriptEngine.AddCOMObject(String, HostItemFlags, String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_3.htm\u0000371","JavaScriptExtensions.ToTask Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToTask.htm\u0000277","ScriptEngine.AddHostObject(String, Object) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostObject_1.htm\u0000220","PropertyBag Constructor\u0000html/M_Microsoft_ClearScript_PropertyBag__ctor.htm\u000098","ScriptEngine.ExecuteDocument(String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_ExecuteDocument.htm\u0000186","ScriptEngine.GetStackTrace Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_GetStackTrace.htm\u0000152","ScriptEngineException(String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngineException__ctor_2.htm\u0000124","ScriptEngine.EvaluateDocument(String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_EvaluateDocument.htm\u0000221","JavaScriptExtensions.ToPromise(Task, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise_1.htm\u0000283","NoDefaultScriptAccessAttribute Constructor\u0000html/M_Microsoft_ClearScript_NoDefaultScriptAccessAttribute__ctor.htm\u000093","ScriptEngine.AddCOMType(String, HostItemFlags, String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_3.htm\u0000371","ScriptEngine.AddHostType(String, Type) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_6.htm\u0000270","ScriptEngine.AddCOMObject(String, Guid) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_4.htm\u0000241","ScriptInterruptedException Constructor\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor.htm\u000093","ScriptMemberAttribute(String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_4.htm\u0000134","ScriptEngine.Interrupt Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Interrupt.htm\u0000119","ScriptEngine.AddHostType(HostItemFlags, Type) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType.htm\u0000291","ScriptEngine.ExecuteDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_ExecuteDocument_1.htm\u0000231","NoScriptAccessAttribute Constructor\u0000html/M_Microsoft_ClearScript_NoScriptAccessAttribute__ctor.htm\u000092","ScriptEngine.EvaluateDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_EvaluateDocument_1.htm\u0000266","JavaScriptExtensions.ToPromise(ValueTask) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise_2.htm\u0000263","ScriptEngine.AddCOMType(String, Guid) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_4.htm\u0000241","ScriptEngine.AddHostType(Type) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_7.htm\u0000245","ScriptEngine.AddCOMObject(String, Guid, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_5.htm\u0000290","ScriptMemberAttribute(String, ScriptAccess) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_5.htm\u0000172","ScriptObject.GetProperty(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_GetProperty_1.htm\u0000210","ScriptInterruptedException(SerializationInfo, StreamingContext) Constructor\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor_1.htm\u0000160","ScriptEngine.Invoke Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Invoke.htm\u0000226","ScriptEngine.ExecuteDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_ExecuteDocument_2.htm\u0000278","ScriptEngine.AddHostTypes Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostTypes.htm\u0000261","StringDocument Constructor\u0000html/M_Microsoft_ClearScript_StringDocument__ctor.htm\u0000148","ScriptInterruptedException(String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor_2.htm\u0000124","ScriptEngine.EvaluateDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_EvaluateDocument_2.htm\u0000313","ScriptEngine(String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngine__ctor.htm\u0000225","ScriptEngine.Execute(String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Execute_1.htm\u0000208","ScriptObject.Invoke Method\u0000html/M_Microsoft_ClearScript_ScriptObject_Invoke.htm\u0000197","ScriptMemberAttribute(String, ScriptAccess, ScriptMemberFlags) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_6.htm\u0000210","ScriptEngine.AddCOMType(String, Guid, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_5.htm\u0000290","ScriptEngine.AddCOMObject(String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_6.htm\u0000276","Undefined.ToString Method\u0000html/M_Microsoft_ClearScript_Undefined_ToString.htm\u0000139","ScriptEngine.AddRestrictedHostObject\u0026lt;T\u0026gt;(String, HostItemFlags, T) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject__1.htm\u0000324","ScriptInterruptedException(String, Exception) Constructor\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor_3.htm\u0000163","ScriptEngine(String, String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngine__ctor_1.htm\u0000187","ScriptEngine.Evaluate(String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_1.htm\u0000242","ScriptMemberAttribute(String, ScriptMemberFlags) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_7.htm\u0000171","V8Runtime.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CollectGarbage.htm\u0000127","ScriptObject.InvokeAsFunction Method\u0000html/M_Microsoft_ClearScript_ScriptObject_InvokeAsFunction.htm\u0000181","ScriptEngine.Execute(String, Boolean, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Execute_2.htm\u0000337","V8CpuProfile.ToJson Method\u0000html/M_Microsoft_ClearScript_V8_V8CpuProfile_ToJson.htm\u0000128","ScriptEngine.AddHostType(String, HostItemFlags, String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_1.htm\u0000440","ScriptEngine.AddCOMType(String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_6.htm\u0000276","ScriptMemberAttribute Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor.htm\u000093","ScriptEngine.AddRestrictedHostObject\u0026lt;T\u0026gt;(String, T) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject__1_1.htm\u0000280","V8Runtime.Compile(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile.htm\u0000186","ScriptObject.DeleteProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_DeleteProperty.htm\u0000153","ScriptObject.InvokeMethod Method\u0000html/M_Microsoft_ClearScript_ScriptObject_InvokeMethod.htm\u0000197","ScriptInterruptedException.GetObjectData Method\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException_GetObjectData.htm\u0000185","V8CpuProfile.WriteJson Method\u0000html/M_Microsoft_ClearScript_V8_V8CpuProfile_WriteJson.htm\u0000146","ScriptEngine.Evaluate(String, Boolean, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_2.htm\u0000570","ScriptMemberAttribute(ScriptAccess) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_1.htm\u0000131","ScriptEngine.Execute(String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Execute_3.htm\u0000272","ScriptEngine.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_CollectGarbage.htm\u0000135","V8Runtime.CompileDocument(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument.htm\u0000154","ScriptObject.DeleteProperty(String) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_DeleteProperty_1.htm\u0000154","ScriptObject.SetProperty(Int32, Object) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_SetProperty.htm\u0000172","ScriptEngine.AddHostType(String, HostItemFlags, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_2.htm\u0000391","V8RuntimeConstraints Constructor\u0000html/M_Microsoft_ClearScript_V8_V8RuntimeConstraints__ctor.htm\u000092","ScriptInterruptedException.ToString Method\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException_ToString.htm\u0000126","V8Runtime.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_4.htm\u0000350","ScriptMemberAttribute(ScriptAccess, ScriptMemberFlags) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_2.htm\u0000168","ScriptEngine.Dispose Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Dispose.htm\u0000119","ScriptEngine.Evaluate(String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_3.htm\u0000306","ScriptObject.Dispose Method\u0000html/M_Microsoft_ClearScript_ScriptObject_Dispose.htm\u0000110","V8Runtime.CompileDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_1.htm\u0000191","V8Runtime.BeginCpuProfile(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_BeginCpuProfile.htm\u0000156","ScriptObject.SetProperty(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_SetProperty_1.htm\u0000225","V8Runtime.Compile(String, String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_11.htm\u0000390","ScriptMemberAttribute(ScriptMemberFlags) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_3.htm\u0000130","ScriptEngine.AddHostType(String, HostItemFlags, Type) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_3.htm\u0000316","V8Runtime.EndCpuProfile Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_EndCpuProfile.htm\u0000158","V8Runtime(V8RuntimeConstraints, V8RuntimeFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_3.htm\u0000204","ScriptObject.GetProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_GetProperty.htm\u0000154","V8Runtime.Compile(String, String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_9.htm\u0000410","ScriptUsageAttribute Constructor\u0000html/M_Microsoft_ClearScript_ScriptUsageAttribute__ctor.htm\u000093","V8Runtime.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_5.htm\u0000417","V8Runtime.CompileDocument(String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_10.htm\u0000274","V8Runtime.BeginCpuProfile(String, V8CpuProfileFlags) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_BeginCpuProfile_1.htm\u0000191","V8Runtime(V8RuntimeFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_4.htm\u0000129","V8ScriptEngine.BeginCpuProfile(String, V8CpuProfileFlags) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_BeginCpuProfile_1.htm\u0000193","V8Runtime.Compile(DocumentInfo, String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_2.htm\u0000319","ScriptUsageAttribute(ScriptAccess) Constructor\u0000html/M_Microsoft_ClearScript_ScriptUsageAttribute__ctor_1.htm\u0000131","V8Runtime.CreateScriptEngine Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine.htm\u0000138","V8ScriptEngine.CompileDocument(String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_10.htm\u0000275","V8ScriptEngine.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_8.htm\u0000379","V8Runtime.CollectCpuProfileSample Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CollectCpuProfileSample.htm\u0000105","V8Runtime(V8RuntimeFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_5.htm\u0000168","V8ScriptEngine.CancelAwaitDebugger Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CancelAwaitDebugger.htm\u0000117","V8Runtime.GetHeapInfo Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_GetHeapInfo.htm\u0000111","V8Runtime.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_6.htm\u0000388","V8ScriptEngine.Execute(V8Script) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Execute.htm\u0000164","V8Runtime.CompileDocument(String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_11.htm\u0000341","V8Runtime.Compile(DocumentInfo, String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_3.htm\u0000373","V8ScriptEngine(String, V8ScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_10.htm\u0000200","V8Runtime(String) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_6.htm\u0000148","V8Runtime.CreateScriptEngine(V8ScriptEngineFlags) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_1.htm\u0000217","V8ScriptEngine.CancelInterrupt Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CancelInterrupt.htm\u0000112","V8ScriptEngine.CompileDocument(String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_11.htm\u0000342","V8Runtime.WriteHeapSnapshot Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_WriteHeapSnapshot.htm\u0000145","V8ScriptEngine.CompileDocument(String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_9.htm\u0000352","V8Runtime.Compile(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_4.htm\u0000146","V8ScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_ExecuteCommand.htm\u0000231","V8ScriptEngine.CollectCpuProfileSample Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CollectCpuProfileSample.htm\u0000106","V8Runtime Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor.htm\u000094","V8Runtime.CompileDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_2.htm\u0000230","V8Runtime(String, V8RuntimeConstraints) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_7.htm\u0000183","V8Runtime.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_7.htm\u0000311","V8ScriptEngine(String, V8ScriptEngineFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_11.htm\u0000240","V8Runtime.CreateScriptEngine(V8ScriptEngineFlags, Int32) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_2.htm\u0000256","V8ScriptEngine.CompileDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_2.htm\u0000231","V8ScriptEngine.GetRuntimeHeapInfo Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_GetRuntimeHeapInfo.htm\u0000121","V8Runtime(V8RuntimeConstraints) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_1.htm\u0000129","V8ScriptEngine.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CollectGarbage.htm\u0000153","V8Runtime.Compile(String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_5.htm\u0000351","V8ScriptEngine.Compile(DocumentInfo, String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_1.htm\u0000391","V8ScriptEngine(V8RuntimeConstraints, V8ScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_2.htm\u0000186","V8Runtime.CreateScriptEngine(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_3.htm\u0000192","V8ScriptEngine.GetStackTrace Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_GetStackTrace.htm\u0000165","V8Runtime.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_8.htm\u0000378","V8Runtime.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_3.htm\u0000427","V8ScriptEngine.Compile(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile.htm\u0000185","V8Runtime(String, V8RuntimeFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_10.htm\u0000183","V8ScriptEngine.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_3.htm\u0000428","V8Runtime(String, V8RuntimeConstraints, V8RuntimeFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_8.htm\u0000219","V8Runtime.Compile(String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_6.htm\u0000277","V8ScriptEngine.Interrupt Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Interrupt.htm\u0000133","V8ScriptEngine(V8RuntimeConstraints, V8ScriptEngineFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_3.htm\u0000226","V8Runtime.CreateScriptEngine(String, V8ScriptEngineFlags) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_4.htm\u0000271","V8ScriptEngine.Compile(String, String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_10.htm\u0000336","V8ScriptEngine.CompileDocument(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument.htm\u0000155","V8ScriptEngine(String, V8RuntimeConstraints, V8ScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_8.htm\u0000241","V8Runtime(String, V8RuntimeFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_11.htm\u0000223","V8ScriptEngine.WriteRuntimeHeapSnapshot Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_WriteRuntimeHeapSnapshot.htm\u0000151","V8Runtime.CompileDocument(String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_9.htm\u0000351","V8ScriptEngine(V8ScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_4.htm\u0000146","V8Runtime(String, V8RuntimeConstraints, V8RuntimeFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_9.htm\u0000258","V8Runtime.Compile(String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_7.htm\u0000333","V8ScriptEngine.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_4.htm\u0000351","V8Runtime.CreateScriptEngine(String, V8ScriptEngineFlags, Int32) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_5.htm\u0000311","V8Runtime(V8RuntimeConstraints, V8RuntimeFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_2.htm\u0000164","V8ScriptEngine.CompileDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_1.htm\u0000192","V8ScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor.htm\u0000110","V8ScriptEngine(String, V8RuntimeConstraints, V8ScriptEngineFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_9.htm\u0000280","V8ScriptEngine.Compile(String, String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_11.htm\u0000389","V8ScriptEngine(V8ScriptEngineFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_5.htm\u0000185","V8ScriptEngine.BeginCpuProfile(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_BeginCpuProfile.htm\u0000158","V8Runtime.Compile(String, String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_8.htm\u0000203","V8Runtime.Dispose Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Dispose.htm\u0000118","ISyncInvoker.VerifyAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_ISyncInvoker_VerifyAccess.htm\u0000102","V8Runtime.Compile(DocumentInfo, String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_1.htm\u0000393","V8ScriptEngine(V8RuntimeConstraints) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_1.htm\u0000150","NullSyncInvoker.Invoke(Action) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Invoke.htm\u0000174","V8Script.Dispose Method\u0000html/M_Microsoft_ClearScript_V8_V8Script_Dispose.htm\u0000162","IHostWindow.EnableModeless Method\u0000html/M_Microsoft_ClearScript_Windows_IHostWindow_EnableModeless.htm\u0000126","DocumentSettings.AddSystemDocument Method\u0000html/Overload_Microsoft_ClearScript_DocumentSettings_AddSystemDocument.htm\u0000113","V8ScriptEngine.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_5.htm\u0000418","Nothing.ToString Method\u0000html/M_Microsoft_ClearScript_Windows_Nothing_ToString.htm\u0000143","JScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine_ExecuteCommand.htm\u0000235","ExtendedHostFunctions.lib Method\u0000html/Overload_Microsoft_ClearScript_ExtendedHostFunctions_lib.htm\u000077","V8ScriptEngine.Compile(DocumentInfo, String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_2.htm\u0000319","IScriptEngine.AddCOMObject Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddCOMObject.htm\u0000319","V8ScriptEngine(String) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_6.htm\u0000164","IWindowsScriptObject.GetUnderlyingObject Method\u0000html/M_Microsoft_ClearScript_Windows_IWindowsScriptObject_GetUnderlyingObject.htm\u0000116","NullSyncInvoker.Invoke\u0026lt;T\u0026gt;(Func\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Invoke__1.htm\u0000235","ValueRef.Create\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_ValueRef_Create__1.htm\u0000257","V8Runtime.Compile(String, String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_10.htm\u0000336","ExtendedHostFunctions.type Method\u0000html/Overload_Microsoft_ClearScript_ExtendedHostFunctions_type.htm\u000084","JScriptEngine(ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor.htm\u0000133","VBScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine_ExecuteCommand.htm\u0000274","VoidResult.ToString Method\u0000html/M_Microsoft_ClearScript_VoidResult_ToString.htm\u0000140","PropertyBag Constructor\u0000html/Overload_Microsoft_ClearScript_PropertyBag__ctor.htm\u000089","Extensions.ToHostType Method\u0000html/Overload_Microsoft_ClearScript_Extensions_ToHostType.htm\u000085","V8ScriptEngine(String, V8RuntimeConstraints) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_7.htm\u0000204","NullSyncInvoker.VerifyAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_VerifyAccess.htm\u0000133","V8ScriptEngine.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_6.htm\u0000389","IScriptEngine.AddCOMType Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddCOMType.htm\u0000319","JScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine_ExecuteCommand.htm\u0000231","V8ScriptEngine.Compile(DocumentInfo, String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_3.htm\u0000372","VBScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor.htm\u000095","JScriptEngine(WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor_1.htm\u0000172","ScriptEngine.Evaluate Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_Evaluate.htm\u000097","IScriptEngine.AddHostObject Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddHostObject.htm\u000072","Extensions.ToRestrictedHostObject Method\u0000html/Overload_Microsoft_ClearScript_Extensions_ToRestrictedHostObject.htm\u0000172","ScriptEngineException Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptEngineException__ctor.htm\u000089","ISyncInvoker.CheckAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_ISyncInvoker_CheckAccess.htm\u0000122","JScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor.htm\u000095","V8ScriptEngine.Compile(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_4.htm\u0000145","VBScriptEngine(WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_1.htm\u0000132","HostFunctions.func Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_func.htm\u000081","VBScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine_ExecuteCommand.htm\u0000278","ScriptEngine.EvaluateDocument Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_EvaluateDocument.htm\u000084","V8ScriptEngine.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_7.htm\u0000312","JScriptEngine(String, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor_2.htm\u0000189","ISyncInvoker.Invoke(Action) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_ISyncInvoker_Invoke.htm\u0000137","IScriptEngine.AddHostType Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddHostType.htm\u0000224","HostFunctions.getProperty Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_getProperty.htm\u000081","ScriptEngine.AddCOMObject Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddCOMObject.htm\u0000319","ScriptEngine.Execute Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_Execute.htm\u000097","VBScriptEngine(String) Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_2.htm\u0000149","IScriptEngine.AddRestrictedHostObject Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddRestrictedHostObject.htm\u000085","JScriptEngine(String, WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor_3.htm\u0000230","HostFunctions.isTypeObj Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_isTypeObj.htm\u000095","V8Runtime Constructor\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime__ctor.htm\u0000265","ScriptEngine.ExecuteDocument Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_ExecuteDocument.htm\u000084","ISyncInvoker.Invoke\u0026lt;T\u0026gt;(Func\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_ISyncInvoker_Invoke__1.htm\u0000189","V8ScriptEngine.Compile(String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_5.htm\u0000350","IScriptEngine.Evaluate Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_Evaluate.htm\u000097","VBScriptEngine(ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor.htm\u0000133","ScriptEngine.AddCOMType Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddCOMType.htm\u0000319","VBScriptEngine(String, WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_3.htm\u0000186","V8ScriptEngine.BeginCpuProfile Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_BeginCpuProfile.htm\u000067","HostFunctions.newArr Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_newArr.htm\u000072","ScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptEngine__ctor.htm\u000070","ConcurrentPropertyBag Properties\u0000html/Properties_T_Microsoft_ClearScript_ConcurrentPropertyBag.htm\u0000116","ScriptEngine.AddHostObject Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddHostObject.htm\u000072","IScriptEngine.EvaluateDocument Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_EvaluateDocument.htm\u000084","JScriptEngine(String, String, String, WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor_4.htm\u0000346","ScriptInterruptedException Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptInterruptedException__ctor.htm\u000089","HostFunctions.newObj Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_newObj.htm\u0000119","V8ScriptEngine.Compile(String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_6.htm\u0000277","CustomAttributeLoader Properties\u0000html/Properties_T_Microsoft_ClearScript_CustomAttributeLoader.htm\u000053","IScriptEngine.Execute Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_Execute.htm\u000097","VBScriptEngine(String, String, String, WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_4.htm\u0000303","V8ScriptEngine.Compile Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Compile.htm\u0000329","ScriptEngine.AddHostType Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddHostType.htm\u0000224","HostFunctions.removeProperty Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_removeProperty.htm\u000075","DefaultDocumentLoader Properties\u0000html/Properties_T_Microsoft_ClearScript_DefaultDocumentLoader.htm\u000064","VBScriptEngine(WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor_1.htm\u0000172","NullSyncInvoker.CheckAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_CheckAccess.htm\u0000154","IScriptEngine.ExecuteDocument Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_ExecuteDocument.htm\u000084","ScriptMemberAttribute Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptMemberAttribute__ctor.htm\u0000169","ScriptEngine.AddRestrictedHostObject Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject.htm\u000085","HostFunctions.setProperty Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_setProperty.htm\u000081","V8ScriptEngine.Compile(String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_7.htm\u0000332","IScriptObject.DeleteProperty Method\u0000html/Overload_Microsoft_ClearScript_IScriptObject_DeleteProperty.htm\u000059","ScriptObject.DeleteProperty Method\u0000html/Overload_Microsoft_ClearScript_ScriptObject_DeleteProperty.htm\u000059","WindowsScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_Windows_WindowsScriptEngine__ctor.htm\u0000285","ScriptEngine.Dispose Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_Dispose.htm\u000073","HostFunctions.typeOf Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_typeOf.htm\u000094","IScriptObject.GetProperty Method\u0000html/Overload_Microsoft_ClearScript_IScriptObject_GetProperty.htm\u000068","VBScriptEngine(String, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor_2.htm\u0000189","V8ScriptEngine.CompileDocument Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument.htm\u0000355","ScriptObject.GetProperty Method\u0000html/Overload_Microsoft_ClearScript_ScriptObject_GetProperty.htm\u000068","JScriptEngine(WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_1.htm\u0000132","V8ScriptEngine.Compile(String, String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_8.htm\u0000202","StringDocument Properties\u0000html/Properties_T_Microsoft_ClearScript_StringDocument.htm\u0000101","IScriptObject.Item Property\u0000html/Overload_Microsoft_ClearScript_IScriptObject_Item.htm\u000068","HostTypeCollection.AddAssembly Method\u0000html/Overload_Microsoft_ClearScript_HostTypeCollection_AddAssembly.htm\u0000120","V8ScriptEngine.Dispose Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Dispose.htm\u000074","ScriptObject.Item Property\u0000html/Overload_Microsoft_ClearScript_ScriptObject_Item.htm\u000068","IScriptObject.SetProperty Method\u0000html/Overload_Microsoft_ClearScript_IScriptObject_SetProperty.htm\u000070","IArrayBuffer Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm\u0000167","V8CpuProfile Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8CpuProfile.htm\u000087","HostTypeCollection.AddType Method\u0000html/Overload_Microsoft_ClearScript_HostTypeCollection_AddType.htm\u0000102","VBScriptEngine(String, WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor_3.htm\u0000230","ScriptObject.SetProperty Method\u0000html/Overload_Microsoft_ClearScript_ScriptObject_SetProperty.htm\u000070","V8ScriptEngine.Evaluate Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Evaluate.htm\u0000106","IArrayBufferView.InvokeWithDirectAccess Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_IArrayBufferView_InvokeWithDirectAccess.htm\u000091","JScriptEngine(String) Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_2.htm\u0000149","ScriptUsageAttribute Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptUsageAttribute__ctor.htm\u000060","Node Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8CpuProfile_Node.htm\u0000164","HostTypeCollection Constructor\u0000html/Overload_Microsoft_ClearScript_HostTypeCollection__ctor.htm\u0000144","V8ScriptEngine.Execute Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Execute.htm\u0000106","IArrayBufferView Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm\u0000184","V8ScriptEngine.Compile(String, String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_9.htm\u0000409","IArrayBuffer.InvokeWithDirectAccess Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_IArrayBuffer_InvokeWithDirectAccess.htm\u000094","Microsoft.ClearScript Namespace\u0000html/N_Microsoft_ClearScript.htm\u0000582","V8Runtime.BeginCpuProfile Method\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime_BeginCpuProfile.htm\u000066","Sample Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8CpuProfile_Sample.htm\u000065","VBScriptEngine(String, String, String, WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor_4.htm\u0000346","V8ScriptEngine.Dispose(Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Dispose.htm\u0000205","V8ScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine__ctor.htm\u0000278","V8Runtime Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8Runtime.htm\u0000168","JScriptEngine(String, WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_3.htm\u0000186","Microsoft.ClearScript.JavaScript Namespace\u0000html/N_Microsoft_ClearScript_JavaScript.htm\u0000136","ISyncInvoker.Invoke Method\u0000html/Overload_Microsoft_ClearScript_Windows_Core_ISyncInvoker_Invoke.htm\u000076","V8Runtime.Compile Method\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime_Compile.htm\u0000329","V8ScriptEngine.EndCpuProfile Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_EndCpuProfile.htm\u0000159","IDataView Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_IDataView.htm\u0000201","JavaScriptExtensions.ToPromise Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise.htm\u0000245","DefaultScriptUsageAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm\u000080","V8RuntimeConstraints Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm\u0000137","JScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_JScriptEngine.htm\u0000558","JScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor.htm\u0000143","JScriptEngine(String, String, String, WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_4.htm\u0000303","Document Properties\u0000html/Properties_T_Microsoft_ClearScript_Document.htm\u000073","Microsoft.ClearScript.V8 Namespace\u0000html/N_Microsoft_ClearScript_V8.htm\u0000245","V8RuntimeDebuggerEventArgs Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs.htm\u000068","V8ScriptEngine.Evaluate(V8Script) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Evaluate.htm\u0000162","IJavaScriptObject Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_IJavaScriptObject.htm\u0000146","DocumentLoader.MaxCacheSize Property\u0000html/P_Microsoft_ClearScript_DocumentLoader_MaxCacheSize.htm\u0000180","NullSyncInvoker.Invoke Method\u0000html/Overload_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Invoke.htm\u000077","V8Runtime.CompileDocument Method\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime_CompileDocument.htm\u0000354","DocumentCategory Properties\u0000html/Properties_T_Microsoft_ClearScript_DocumentCategory.htm\u000075","IScriptEngineException.ExecutionStarted Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_ExecutionStarted.htm\u0000120","V8RuntimeHeapInfo Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm\u0000113","Microsoft.ClearScript.Windows Namespace\u0000html/N_Microsoft_ClearScript_Windows.htm\u0000142","IScriptEngine.DisableTypeRestriction Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableTypeRestriction.htm\u0000195","DocumentSettings.AccessFlags Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_AccessFlags.htm\u0000128","VBScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor.htm\u0000143","ITypedArray Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_ITypedArray.htm\u0000208","DocumentInfo Properties\u0000html/Properties_T_Microsoft_ClearScript_DocumentInfo.htm\u000097","V8Runtime.CreateScriptEngine Method\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine.htm\u0000143","V8Script Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8Script.htm\u000068","IScriptEngineException.HResult Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_HResult.htm\u0000114","Microsoft.ClearScript.Windows.Core Namespace\u0000html/N_Microsoft_ClearScript_Windows_Core.htm\u0000107","VBScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_VBScriptEngine.htm\u0000558","DocumentLoader Properties\u0000html/Properties_T_Microsoft_ClearScript_DocumentLoader.htm\u000064","WindowsScriptEngine.Dispose Method\u0000html/Overload_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Dispose.htm\u000076","IScriptEngine.DocumentSettings Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DocumentSettings.htm\u0000131","DocumentSettings.AsyncLoadCallback Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_AsyncLoadCallback.htm\u0000144","IScriptObject.Engine Property\u0000html/P_Microsoft_ClearScript_IScriptObject_Engine.htm\u0000113","IScriptEngineException.InnerException Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_InnerException.htm\u0000127","ConcurrentPropertyBag Constructor\u0000html/Overload_Microsoft_ClearScript_ConcurrentPropertyBag__ctor.htm\u000090","ITypedArray\u0026lt;T\u0026gt; Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm\u0000217","DocumentSettings Properties\u0000html/Properties_T_Microsoft_ClearScript_DocumentSettings.htm\u0000135","JScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_Windows_JScriptEngine__ctor.htm\u0000125","IScriptEngine.EnableAutoHostVariables Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_EnableAutoHostVariables.htm\u0000183","DefaultScriptUsageAttribute Constructor\u0000html/Overload_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor.htm\u000062","ModuleCategory Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_ModuleCategory.htm\u000065","DocumentSettings.ContextCallback Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_ContextCallback.htm\u0000225","IScriptEngineException.IsFatal Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_IsFatal.htm\u0000115","IScriptObject.Item(Int32) Property\u0000html/P_Microsoft_ClearScript_IScriptObject_Item.htm\u0000185","WindowsScriptEngine.CheckAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_CheckAccess.htm\u0000130","VBScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_Windows_VBScriptEngine__ctor.htm\u0000125","DocumentInfo Constructor\u0000html/Overload_Microsoft_ClearScript_DocumentInfo__ctor.htm\u000065","Page Not Found\u0000html/PageNotFound.htm\u000066","NoDefaultScriptAccessAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm\u000087","V8ScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8ScriptEngine.htm\u0000613","IScriptEngineException.Message Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_Message.htm\u0000110","WindowsScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm\u0000553","DocumentSettings.FileNameExtensions Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_FileNameExtensions.htm\u0000141","IScriptEngine.EnableNullResultWrapping Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_EnableNullResultWrapping.htm\u0000212","IScriptObject.Item(String, Object[]) Property\u0000html/P_Microsoft_ClearScript_IScriptObject_Item_1.htm\u0000263","WindowsScriptEngine.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_CollectGarbage.htm\u0000154","V8Settings Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8Settings.htm\u000062","NoScriptAccessAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_NoScriptAccessAttribute.htm\u000087","PropertyBag.Keys Property\u0000html/P_Microsoft_ClearScript_PropertyBag_Keys.htm\u0000168","IScriptEngineException.ScriptException Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_ScriptException.htm\u0000127","ScriptEngine.DisableFloatNarrowing Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableFloatNarrowing.htm\u0000205","CustomAttributeLoader.Default Property\u0000html/P_Microsoft_ClearScript_CustomAttributeLoader_Default.htm\u0000121","DocumentSettings.LoadCallback Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_LoadCallback.htm\u0000142","IScriptObject.PropertyIndices Property\u0000html/P_Microsoft_ClearScript_IScriptObject_PropertyIndices.htm\u0000137","IScriptEngine.EnforceAnonymousTypeAccess Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_EnforceAnonymousTypeAccess.htm\u0000212","WindowsScriptEngine.Dispose(Boolean) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Dispose.htm\u0000210","PropertyBag Properties\u0000html/Properties_T_Microsoft_ClearScript_PropertyBag.htm\u000091","PropertyBag.Values Property\u0000html/P_Microsoft_ClearScript_PropertyBag_Values.htm\u0000168","DocumentSettings.Loader Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_Loader.htm\u0000133","DefaultDocumentLoader.MaxCacheSize Property\u0000html/P_Microsoft_ClearScript_DefaultDocumentLoader_MaxCacheSize.htm\u0000185","ScriptEngine.DisableListIndexTypeRestriction Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableListIndexTypeRestriction.htm\u0000212","IScriptObject.PropertyNames Property\u0000html/P_Microsoft_ClearScript_IScriptObject_PropertyNames.htm\u0000139","IScriptEngine.ExposeHostObjectStaticMembers Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_ExposeHostObjectStaticMembers.htm\u0000137","IScriptEngineException.ScriptExceptionAsObject Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_ScriptExceptionAsObject.htm\u0000135","ScriptEngineException.EngineName Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_EngineName.htm\u0000134","WindowsScriptEngine.GetStackTrace Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_GetStackTrace.htm\u0000190","DocumentSettings.SearchPath Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_SearchPath.htm\u0000144","JScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_Core_JScriptEngine.htm\u0000542","DefaultScriptUsageAttribute.Access Property\u0000html/P_Microsoft_ClearScript_DefaultScriptUsageAttribute_Access.htm\u0000117","IArrayBufferView.ArrayBuffer Property\u0000html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_ArrayBuffer.htm\u0000114","IScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_FileNameExtension.htm\u0000118","ScriptEngine.DisableTypeRestriction Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableTypeRestriction.htm\u0000218","ScriptEngineException.ErrorDetails Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_ErrorDetails.htm\u0000137","Document.Contents Property\u0000html/P_Microsoft_ClearScript_Document_Contents.htm\u0000124","WindowsScriptEngine.Interrupt Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Interrupt.htm\u0000135","IScriptEngine.AccessContext Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_AccessContext.htm\u0000193","DocumentCategory.Json Property\u0000html/P_Microsoft_ClearScript_DocumentCategory_Json.htm\u0000121","IArrayBufferView.Offset Property\u0000html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_Offset.htm\u0000117","ScriptEngine.DocumentSettings Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DocumentSettings.htm\u0000154","WindowsScriptEngine.VerifyAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_VerifyAccess.htm\u0000109","Document.Encoding Property\u0000html/P_Microsoft_ClearScript_Document_Encoding.htm\u0000143","IArrayBufferView.Size Property\u0000html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_Size.htm\u0000114","ScriptEngineException.ExecutionStarted Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_ExecutionStarted.htm\u0000138","VBScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_Core_VBScriptEngine.htm\u0000542","DocumentCategory.MaxCacheSize Property\u0000html/P_Microsoft_ClearScript_DocumentCategory_MaxCacheSize.htm\u0000191","ScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptEngine.htm\u0000364","IScriptEngine.AllowReflection Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_AllowReflection.htm\u0000197","ScriptEngine.EnableAutoHostVariables Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_EnableAutoHostVariables.htm\u0000206","Document.Info Property\u0000html/P_Microsoft_ClearScript_Document_Info.htm\u0000119","IArrayBuffer.Size Property\u0000html/P_Microsoft_ClearScript_JavaScript_IArrayBuffer_Size.htm\u0000115","HostSettings Properties\u0000html/Properties_T_Microsoft_ClearScript_HostSettings.htm\u000080","ScriptEngineException.IsFatal Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_IsFatal.htm\u0000133","DocumentCategory.Script Property\u0000html/P_Microsoft_ClearScript_DocumentCategory_Script.htm\u0000121","WindowsScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine__ctor.htm\u0000325","IScriptEngine.ContinuationCallback Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_ContinuationCallback.htm\u0000172","ScriptEngineException Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptEngineException.htm\u0000314","HostTypeCollection Properties\u0000html/Properties_T_Microsoft_ClearScript_HostTypeCollection.htm\u0000116","ScriptEngine.EnableNullResultWrapping Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_EnableNullResultWrapping.htm\u0000235","IJavaScriptObject.Flags Property\u0000html/P_Microsoft_ClearScript_JavaScript_IJavaScriptObject_Flags.htm\u0000109","ScriptEngineException.ScriptException Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_ScriptException.htm\u0000145","HostSettings.AuxiliarySearchPath Property\u0000html/P_Microsoft_ClearScript_HostSettings_AuxiliarySearchPath.htm\u0000171","ImmutableValueAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_ImmutableValueAttribute.htm\u000068","ScriptInterruptedException Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptInterruptedException.htm\u0000153","WindowsScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine.htm\u0000531","ScriptEngine.UseReflectionBindFallback Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_UseReflectionBindFallback.htm\u0000223","IJavaScriptObject.Kind Property\u0000html/P_Microsoft_ClearScript_JavaScript_IJavaScriptObject_Kind.htm\u0000109","ScriptEngine.EnforceAnonymousTypeAccess Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_EnforceAnonymousTypeAccess.htm\u0000235","IScriptEngine.CustomAttributeLoader Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_CustomAttributeLoader.htm\u0000148","IHostWindow Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_IHostWindow.htm\u000062","DocumentInfo.Category Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_Category.htm\u0000133","ScriptEngineException.ScriptExceptionAsObject Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_ScriptExceptionAsObject.htm\u0000153","HostSettings.CustomAttributeLoader Property\u0000html/P_Microsoft_ClearScript_HostSettings_CustomAttributeLoader.htm\u0000164","IPropertyBag Properties\u0000html/Properties_T_Microsoft_ClearScript_IPropertyBag.htm\u0000165","ScriptMemberAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptMemberAttribute.htm\u0000117","ITypedArray.Length Property\u0000html/P_Microsoft_ClearScript_JavaScript_ITypedArray_Length.htm\u0000112","ScriptEngine.VoidResultValue Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_VoidResultValue.htm\u0000219","IWindowsScriptObject Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_IWindowsScriptObject.htm\u0000132","ScriptEngine.ExposeHostObjectStaticMembers Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_ExposeHostObjectStaticMembers.htm\u0000160","DocumentInfo.ContextCallback Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_ContextCallback.htm\u0000224","IScriptEngine.DefaultAccess Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DefaultAccess.htm\u0000197","HostSettings.UseAssemblyTable Property\u0000html/P_Microsoft_ClearScript_HostSettings_UseAssemblyTable.htm\u0000208","ModuleCategory.CommonJS Property\u0000html/P_Microsoft_ClearScript_JavaScript_ModuleCategory_CommonJS.htm\u0000124","ScriptInterruptedException.EngineName Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_EngineName.htm\u0000134","ScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_FileNameExtension.htm\u0000131","ScriptObject Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptObject.htm\u0000100","IScriptEngine.FormatCode Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_FormatCode.htm\u0000170","IScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_IScriptEngine.htm\u0000348","IScriptEngineException.EngineName Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_EngineName.htm\u0000116","IScriptEngine.DisableDynamicBinding Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableDynamicBinding.htm\u0000172","ScriptUsageAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptUsageAttribute.htm\u000080","ModuleCategory.Standard Property\u0000html/P_Microsoft_ClearScript_JavaScript_ModuleCategory_Standard.htm\u0000125","ScriptInterruptedException.ErrorDetails Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_ErrorDetails.htm\u0000137","IScriptEngine.Global Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_Global.htm\u0000157","ScriptEngine.FormatCode Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_FormatCode.htm\u0000193","IScriptEngine.DisableExtensionMethods Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableExtensionMethods.htm\u0000124","IScriptEngineException Properties\u0000html/Properties_T_Microsoft_ClearScript_IScriptEngineException.htm\u0000195","PropertyBag.Comparer Property\u0000html/P_Microsoft_ClearScript_PropertyBag_Comparer.htm\u0000146","IScriptEngine.HostData Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_HostData.htm\u0000134","V8CpuProfile.RootNode Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_RootNode.htm\u0000128","ScriptInterruptedException.ExecutionStarted Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_ExecutionStarted.htm\u0000138","IScriptEngineException.ErrorDetails Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_ErrorDetails.htm\u0000119","ScriptEngine.Global Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_Global.htm\u0000170","IScriptObject Properties\u0000html/Properties_T_Microsoft_ClearScript_IScriptObject.htm\u0000100","IScriptEngine.DisableFloatNarrowing Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableFloatNarrowing.htm\u0000182","IScriptEngine.Name Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_Name.htm\u0000114","ScriptInterruptedException.IsFatal Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_IsFatal.htm\u0000133","V8RuntimeHeapInfo.TotalHeapSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalHeapSize.htm\u0000122","PropertyBag.Item Property\u0000html/P_Microsoft_ClearScript_PropertyBag_Item.htm\u0000209","V8CpuProfile.Samples Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Samples.htm\u0000162","ScriptEngine.HostData Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_HostData.htm\u0000157","V8ScriptEngine.Global Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_Global.htm\u0000181","IScriptEngine.DisableListIndexTypeRestriction Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableListIndexTypeRestriction.htm\u0000189","V8RuntimeHeapInfo.TotalHeapSizeExecutable Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalHeapSizeExecutable.htm\u0000124","ScriptInterruptedException.ScriptException Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_ScriptException.htm\u0000145","IScriptEngine.NullExportValue Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_NullExportValue.htm\u0000206","WindowsScriptEngine.Script Property\u0000html/P_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Script.htm\u0000174","ScriptEngine.Name Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_Name.htm\u0000132","V8CpuProfile.Sample.Node Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Sample_Node.htm\u0000129","V8RuntimeHeapInfo.TotalPhysicalSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalPhysicalSize.htm\u0000123","IScriptEngine.Script Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_Script.htm\u0000147","DocumentContextCallback Delegate\u0000html/T_Microsoft_ClearScript_DocumentContextCallback.htm\u0000183","WindowsScriptEngine.SyncInvoker Property\u0000html/P_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_SyncInvoker.htm\u0000128","ScriptInterruptedException.ScriptExceptionAsObject Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_ScriptExceptionAsObject.htm\u0000153","V8ScriptEngine.MaxRuntimeHeapSize Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_MaxRuntimeHeapSize.htm\u0000286","V8CpuProfile.Sample.Timestamp Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Sample_Timestamp.htm\u0000147","V8RuntimeHeapInfo.UsedHeapSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_UsedHeapSize.htm\u0000122","IHostWindow.OwnerHandle Property\u0000html/P_Microsoft_ClearScript_Windows_IHostWindow_OwnerHandle.htm\u0000121","ScriptMemberAttribute.Flags Property\u0000html/P_Microsoft_ClearScript_ScriptMemberAttribute_Flags.htm\u0000133","IScriptEngine.UndefinedImportValue Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_UndefinedImportValue.htm\u0000188","DocumentFlags Enumeration\u0000html/T_Microsoft_ClearScript_DocumentFlags.htm\u0000204","ScriptEngine.AccessContext Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_AccessContext.htm\u0000216","V8ScriptEngine.MaxRuntimeStackUsage Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_MaxRuntimeStackUsage.htm\u0000216","ScriptEngine.NullExportValue Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_NullExportValue.htm\u0000229","V8CpuProfile.StartTimestamp Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_StartTimestamp.htm\u0000147","StringDocument.Contents Property\u0000html/P_Microsoft_ClearScript_StringDocument_Contents.htm\u0000144","V8Runtime.CpuProfileSampleInterval Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_CpuProfileSampleInterval.htm\u0000165","IScriptEngine.UseReflectionBindFallback Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_UseReflectionBindFallback.htm\u0000200","DocumentInfo.Flags Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_Flags.htm\u0000152","ScriptEngine.Script Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_Script.htm\u0000160","V8ScriptEngine.RuntimeHeapSizeSampleInterval Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_RuntimeHeapSizeSampleInterval.htm\u0000157","ScriptEngine.AllowReflection Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_AllowReflection.htm\u0000220","V8Runtime.DocumentSettings Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_DocumentSettings.htm\u0000137","StringDocument.Encoding Property\u0000html/P_Microsoft_ClearScript_StringDocument_Encoding.htm\u0000136","V8RuntimeConstraints.HeapExpansionMultiplier Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_HeapExpansionMultiplier.htm\u0000225","DocumentInfo Structure\u0000html/T_Microsoft_ClearScript_DocumentInfo.htm\u0000311","IScriptEngine.VoidResultValue Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_VoidResultValue.htm\u0000196","DocumentInfo.Name Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_Name.htm\u0000145","V8ScriptEngine.RuntimeHeapSizeViolationPolicy Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_RuntimeHeapSizeViolationPolicy.htm\u0000144","ScriptEngine.UndefinedImportValue Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_UndefinedImportValue.htm\u0000211","ScriptEngine.ContinuationCallback Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_ContinuationCallback.htm\u0000195","StringDocument.Info Property\u0000html/P_Microsoft_ClearScript_StringDocument_Info.htm\u0000127","V8Runtime.EnableInterruptPropagation Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_EnableInterruptPropagation.htm\u0000203","V8RuntimeConstraints.MaxArrayBufferAllocation Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxArrayBufferAllocation.htm\u0000186","DocumentLoadCallback Delegate\u0000html/T_Microsoft_ClearScript_DocumentLoadCallback.htm\u0000153","DocumentInfo.SourceMapUri Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_SourceMapUri.htm\u0000140","V8ScriptEngine.Script Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_Script.htm\u0000171","StringDocument.StringContents Property\u0000html/P_Microsoft_ClearScript_StringDocument_StringContents.htm\u0000118","ModuleCategory Class\u0000html/T_Microsoft_ClearScript_JavaScript_ModuleCategory.htm\u0000142","ScriptEngine.Current Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_Current.htm\u0000174","V8Runtime.FormatCode Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_FormatCode.htm\u0000176","DocumentInfo.Uri Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_Uri.htm\u0000129","V8RuntimeConstraints.MaxExecutableSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxExecutableSize.htm\u0000282","V8CpuProfile.EndTimestamp Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_EndTimestamp.htm\u0000147","V8ScriptEngine.SuppressExtensionMethodEnumeration Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_SuppressExtensionMethodEnumeration.htm\u0000208","V8Runtime.HeapSizeSampleInterval Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_HeapSizeSampleInterval.htm\u0000155","ScriptEngine.CustomAttributeLoader Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_CustomAttributeLoader.htm\u0000171","DocumentLoader.Default Property\u0000html/P_Microsoft_ClearScript_DocumentLoader_Default.htm\u0000119","DocumentLoader Class\u0000html/T_Microsoft_ClearScript_DocumentLoader.htm\u0000291","V8RuntimeConstraints.MaxNewSpaceSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxNewSpaceSize.htm\u0000193","V8CpuProfile.Name Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Name.htm\u0000116","V8ScriptEngine.SuppressInstanceMethodEnumeration Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_SuppressInstanceMethodEnumeration.htm\u0000189","V8Runtime.HeapSizeViolationPolicy Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_HeapSizeViolationPolicy.htm\u0000142","ScriptEngine.DefaultAccess Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DefaultAccess.htm\u0000220","NoDefaultScriptAccessAttribute Class\u0000html/T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm\u0000552","V8RuntimeConstraints.MaxOldSpaceSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxOldSpaceSize.htm\u0000193","V8CpuProfile.Node.BailoutReason Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_BailoutReason.htm\u0000130","V8CpuProfile Class\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfile.htm\u0000281","V8Script.DocumentInfo Property\u0000html/P_Microsoft_ClearScript_V8_V8Script_DocumentInfo.htm\u0000117","JScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_Windows_JScriptEngine_FileNameExtension.htm\u0000153","DocumentSettings Class\u0000html/T_Microsoft_ClearScript_DocumentSettings.htm\u0000400","V8Runtime.MaxHeapSize Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_MaxHeapSize.htm\u0000284","ScriptEngine.DisableDynamicBinding Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableDynamicBinding.htm\u0000195","HostTypeCollection Class\u0000html/T_Microsoft_ClearScript_HostTypeCollection.htm\u0000822","V8Script.Name Property\u0000html/P_Microsoft_ClearScript_V8_V8Script_Name.htm\u0000178","V8CpuProfileFlags Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfileFlags.htm\u0000131","V8RuntimeConstraints.MaxYoungSpaceSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxYoungSpaceSize.htm\u0000251","VBScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_Windows_VBScriptEngine_FileNameExtension.htm\u0000151","V8CpuProfile.Node.ChildNodes Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_ChildNodes.htm\u0000167","V8Runtime.MaxStackUsage Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_MaxStackUsage.htm\u0000211","ScriptEngine.DisableExtensionMethods Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableExtensionMethods.htm\u0000147","ScriptMemberAttribute.Name Property\u0000html/P_Microsoft_ClearScript_ScriptMemberAttribute_Name.htm\u0000203","V8RuntimeDebuggerEventArgs.Name Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs_Name.htm\u0000123","NoScriptAccessAttribute Class\u0000html/T_Microsoft_ClearScript_NoScriptAccessAttribute.htm\u0000604","WindowsScriptEngine.Dispatcher Property\u0000html/P_Microsoft_ClearScript_Windows_WindowsScriptEngine_Dispatcher.htm\u0000122","V8Settings.EnableTopLevelAwait Property\u0000html/P_Microsoft_ClearScript_V8_V8Settings_EnableTopLevelAwait.htm\u0000308","V8CpuProfile.Node.ColumnNumber Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_ColumnNumber.htm\u0000141","V8Runtime.Name Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_Name.htm\u0000120","ScriptObject.Engine Property\u0000html/P_Microsoft_ClearScript_ScriptObject_Engine.htm\u0000126","V8CpuProfile.Node Class\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfile_Node.htm\u0000352","V8RuntimeDebuggerEventArgs.Port Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs_Port.htm\u0000118","ValueRef Class\u0000html/T_Microsoft_ClearScript_ValueRef.htm\u0000133","ImmutableValueAttribute Class\u0000html/T_Microsoft_ClearScript_ImmutableValueAttribute.htm\u0000451","ClearScript Library Reference\u0000html/R_Project_Reference.htm\u0000149","V8Settings.GlobalFlags Property\u0000html/P_Microsoft_ClearScript_V8_V8Settings_GlobalFlags.htm\u0000161","V8CpuProfile.Node.FunctionName Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_FunctionName.htm\u0000123","V8ScriptEngine.CpuProfileSampleInterval Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_CpuProfileSampleInterval.htm\u0000166","V8RuntimeHeapInfo.HeapSizeLimit Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_HeapSizeLimit.htm\u0000122","DynamicHostObject Class\u0000html/T_Microsoft_ClearScript_DynamicHostObject.htm\u0000795","ScriptObject.Item(Int32) Property\u0000html/P_Microsoft_ClearScript_ScriptObject_Item.htm\u0000201","ValueRef\u0026lt;T\u0026gt; Class\u0000html/T_Microsoft_ClearScript_ValueRef_1.htm\u0000312","V8CpuProfile.Node.HitLine Structure\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine.htm\u0000258","JScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_Windows_Core_JScriptEngine_FileNameExtension.htm\u0000157","V8CpuProfile.Node.HitCount Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitCount.htm\u0000144","V8ScriptEngine.EnableRuntimeInterruptPropagation Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_EnableRuntimeInterruptPropagation.htm\u0000205","V8RuntimeHeapInfo.TotalAvailableSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalAvailableSize.htm\u0000123","EventConnection Class\u0000html/T_Microsoft_ClearScript_EventConnection.htm\u0000247","VBScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_Windows_Core_VBScriptEngine_FileNameExtension.htm\u0000155","ScriptObject.Item(String, Object[]) Property\u0000html/P_Microsoft_ClearScript_ScriptObject_Item_1.htm\u0000281","PropertyBag Class\u0000html/T_Microsoft_ClearScript_PropertyBag.htm\u0000631","VoidResult Class\u0000html/T_Microsoft_ClearScript_VoidResult.htm\u0000284","V8RuntimeHeapInfo.TotalExternalSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalExternalSize.htm\u0000123","V8ScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_FileNameExtension.htm\u0000153","V8CpuProfile.Node.HitLines Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLines.htm\u0000171","V8CpuProfile.Sample Class\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfile_Sample.htm\u0000249","WindowsScriptEngine.Global Property\u0000html/P_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Global.htm\u0000184","ScriptObject.PropertyIndices Property\u0000html/P_Microsoft_ClearScript_ScriptObject_PropertyIndices.htm\u0000150","ScriptAccess Enumeration\u0000html/T_Microsoft_ClearScript_ScriptAccess.htm\u0000193","ISyncInvoker Interface\u0000html/T_Microsoft_ClearScript_Windows_Core_ISyncInvoker.htm\u0000168","V8CpuProfile.Node.LineNumber Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_LineNumber.htm\u0000141","V8GlobalFlags Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8GlobalFlags.htm\u0000189","EventConnection\u0026lt;T\u0026gt; Class\u0000html/T_Microsoft_ClearScript_EventConnection_1.htm\u0000289","AsyncDocumentLoadCallback Delegate\u0000html/T_Microsoft_ClearScript_AsyncDocumentLoadCallback.htm\u0000221","WindowsScriptEngine.HostWindow Property\u0000html/P_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_HostWindow.htm\u0000151","ScriptObject.PropertyNames Property\u0000html/P_Microsoft_ClearScript_ScriptObject_PropertyNames.htm\u0000152","V8CpuProfile.Node.NodeId Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_NodeId.htm\u0000146","IPropertyBag Interface\u0000html/T_Microsoft_ClearScript_IPropertyBag.htm\u0000724","ScriptUsageAttribute.Access Property\u0000html/P_Microsoft_ClearScript_ScriptUsageAttribute_Access.htm\u0000117","EventSource Class\u0000html/T_Microsoft_ClearScript_EventSource.htm\u0000240","V8CpuProfile.Node.ScriptId Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_ScriptId.htm\u0000141","IScriptableObject Interface\u0000html/T_Microsoft_ClearScript_IScriptableObject.htm\u0000117","V8CpuProfile.Node.ScriptName Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_ScriptName.htm\u0000128","EventSource\u0026lt;T\u0026gt; Class\u0000html/T_Microsoft_ClearScript_EventSource_1.htm\u0000276","ConcurrentPropertyBag Class\u0000html/T_Microsoft_ClearScript_ConcurrentPropertyBag.htm\u0000507","ContinuationCallback Delegate\u0000html/T_Microsoft_ClearScript_ContinuationCallback.htm\u0000120","CustomAttributeLoader Class\u0000html/T_Microsoft_ClearScript_CustomAttributeLoader.htm\u0000247","ScriptEngine Class\u0000html/T_Microsoft_ClearScript_ScriptEngine.htm\u00001727","V8Runtime Class\u0000html/T_Microsoft_ClearScript_V8_V8Runtime.htm\u00001413","IScriptEngine Interface\u0000html/T_Microsoft_ClearScript_IScriptEngine.htm\u00001514","JScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_Core_JScriptEngine.htm\u00002349","IScriptEngineException Interface\u0000html/T_Microsoft_ClearScript_IScriptEngineException.htm\u0000245","DefaultDocumentLoader Class\u0000html/T_Microsoft_ClearScript_DefaultDocumentLoader.htm\u0000341","V8RuntimeConstraints Class\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm\u0000331","ScriptEngineException Class\u0000html/T_Microsoft_ClearScript_ScriptEngineException.htm\u0000683","NullSyncInvoker Class\u0000html/T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm\u0000330","ExtendedHostFunctions Class\u0000html/T_Microsoft_ClearScript_ExtendedHostFunctions.htm\u00001281","V8RuntimeDebuggerEventArgs Class\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs.htm\u0000266","IScriptObject Interface\u0000html/T_Microsoft_ClearScript_IScriptObject.htm\u0000286","ScriptInterruptedException Class\u0000html/T_Microsoft_ClearScript_ScriptInterruptedException.htm\u0000343","Extensions Class\u0000html/T_Microsoft_ClearScript_Extensions.htm\u0000316","DefaultScriptUsageAttribute Class\u0000html/T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm\u0000506","V8RuntimeFlags Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeFlags.htm\u0000179","V8RuntimeHeapInfo Class\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm\u0000287","Document Class\u0000html/T_Microsoft_ClearScript_Document.htm\u0000268","IArrayBuffer Interface\u0000html/T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm\u0000523","V8RuntimeViolationPolicy Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeViolationPolicy.htm\u0000208","ScriptMemberAttribute Class\u0000html/T_Microsoft_ClearScript_ScriptMemberAttribute.htm\u0000632","DocumentAccessFlags Enumeration\u0000html/T_Microsoft_ClearScript_DocumentAccessFlags.htm\u0000226","ScriptMemberFlags Enumeration\u0000html/T_Microsoft_ClearScript_ScriptMemberFlags.htm\u0000213","V8Script Class\u0000html/T_Microsoft_ClearScript_V8_V8Script.htm\u0000276","HostFunctions Class\u0000html/T_Microsoft_ClearScript_HostFunctions.htm\u0000951","IArrayBufferView Interface\u0000html/T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm\u0000537","DocumentCategory Class\u0000html/T_Microsoft_ClearScript_DocumentCategory.htm\u0000253","HostItemFlags Enumeration\u0000html/T_Microsoft_ClearScript_HostItemFlags.htm\u0000239","HostSettings Class\u0000html/T_Microsoft_ClearScript_HostSettings.htm\u0000156","VBScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_Core_VBScriptEngine.htm\u00002328","IDataView Interface\u0000html/T_Microsoft_ClearScript_JavaScript_IDataView.htm\u0000591","ScriptObject Class\u0000html/T_Microsoft_ClearScript_ScriptObject.htm\u0000968","IJavaScriptObject Interface\u0000html/T_Microsoft_ClearScript_JavaScript_IJavaScriptObject.htm\u0000398","ScriptUsageAttribute Class\u0000html/T_Microsoft_ClearScript_ScriptUsageAttribute.htm\u0000560","ITypedArray Interface\u0000html/T_Microsoft_ClearScript_JavaScript_ITypedArray.htm\u0000604","StringDocument Class\u0000html/T_Microsoft_ClearScript_StringDocument.htm\u0000300","Undefined Class\u0000html/T_Microsoft_ClearScript_Undefined.htm\u0000259","V8CacheKind Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8CacheKind.htm\u0000182","V8CacheResult Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8CacheResult.htm\u0000210","ITypedArray\u0026lt;T\u0026gt; Interface\u0000html/T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm\u0000753","V8ScriptEngine Class\u0000html/T_Microsoft_ClearScript_V8_V8ScriptEngine.htm\u00003270","WindowsScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine.htm\u00002245","IHostWindow Interface\u0000html/T_Microsoft_ClearScript_Windows_IHostWindow.htm\u0000135","IWindowsScriptObject Interface\u0000html/T_Microsoft_ClearScript_Windows_IWindowsScriptObject.htm\u0000397","JavaScriptExtensions Class\u0000html/T_Microsoft_ClearScript_JavaScript_JavaScriptExtensions.htm\u0000379","V8ScriptEngineFlags Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8ScriptEngineFlags.htm\u0000708","JavaScriptObjectFlags Enumeration\u0000html/T_Microsoft_ClearScript_JavaScript_JavaScriptObjectFlags.htm\u0000171","V8Settings Class\u0000html/T_Microsoft_ClearScript_V8_V8Settings.htm\u0000140","JavaScriptObjectKind Enumeration\u0000html/T_Microsoft_ClearScript_JavaScript_JavaScriptObjectKind.htm\u0000190","JScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_JScriptEngine.htm\u00002375","Nothing Class\u0000html/T_Microsoft_ClearScript_Windows_Nothing.htm\u0000283","VBScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_VBScriptEngine.htm\u00002354","WindowsScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm\u00002294","WindowsScriptEngineFlags Enumeration\u0000html/T_Microsoft_ClearScript_Windows_WindowsScriptEngineFlags.htm\u0000427"] \ No newline at end of file +["Nothing.Value Field\u0000html/F_Microsoft_ClearScript_Windows_Nothing_Value.htm\u000083","ClearScript Library - Search\u0000search.html\u000011","Nothing Fields\u0000html/Fields_T_Microsoft_ClearScript_Windows_Nothing.htm\u000034","ClearScript Library - Redirect\u0000index.html\u000018","NullSyncInvoker Fields\u0000html/Fields_T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm\u000037","V8CpuProfile.Node.HitLine.LineNumber Field\u0000html/F_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine_LineNumber.htm\u000080","V8CpuProfile.Node.HitLine.HitCount Field\u0000html/F_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine_HitCount.htm\u0000107","General Error\u0000html/GeneralError.htm\u000032","ValueRef\u0026lt;T\u0026gt;.Value Field\u0000html/F_Microsoft_ClearScript_ValueRef_1_Value.htm\u000077","PropertyBag Events\u0000html/Events_T_Microsoft_ClearScript_PropertyBag.htm\u000042","V8Runtime.DebuggerConnected Event\u0000html/E_Microsoft_ClearScript_V8_V8Runtime_DebuggerConnected.htm\u0000147","ConcurrentPropertyBag Events\u0000html/Events_T_Microsoft_ClearScript_ConcurrentPropertyBag.htm\u000049","NullSyncInvoker.Instance Field\u0000html/F_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Instance.htm\u000087","CustomAttributeLoader Methods\u0000html/Methods_T_Microsoft_ClearScript_CustomAttributeLoader.htm\u0000149","VoidResult.Value Field\u0000html/F_Microsoft_ClearScript_VoidResult_Value.htm\u000080","V8Runtime.DebuggerDisconnected Event\u0000html/E_Microsoft_ClearScript_V8_V8Runtime_DebuggerDisconnected.htm\u0000147","Undefined Fields\u0000html/Fields_T_Microsoft_ClearScript_Undefined.htm\u000033","PropertyBag.PropertyChanged Event\u0000html/E_Microsoft_ClearScript_PropertyBag_PropertyChanged.htm\u0000135","VoidResult Fields\u0000html/Fields_T_Microsoft_ClearScript_VoidResult.htm\u000034","ScriptInterruptedException Events\u0000html/Events_T_Microsoft_ClearScript_ScriptInterruptedException.htm\u000053","V8Runtime Events\u0000html/Events_T_Microsoft_ClearScript_V8_V8Runtime.htm\u000047","HostTypeCollection Events\u0000html/Events_T_Microsoft_ClearScript_HostTypeCollection.htm\u000049","ValueRef\u0026lt;T\u0026gt; Fields\u0000html/Fields_T_Microsoft_ClearScript_ValueRef_1.htm\u000039","ScriptEngineException Events\u0000html/Events_T_Microsoft_ClearScript_ScriptEngineException.htm\u000053","HitLine Fields\u0000html/Fields_T_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine.htm\u000048","DocumentInfo Methods\u0000html/Methods_T_Microsoft_ClearScript_DocumentInfo.htm\u0000135","EventSource Methods\u0000html/Methods_T_Microsoft_ClearScript_EventSource.htm\u0000147","DefaultScriptUsageAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm\u0000197","DocumentSettings Methods\u0000html/Methods_T_Microsoft_ClearScript_DocumentSettings.htm\u0000207","DocumentCategory Methods\u0000html/Methods_T_Microsoft_ClearScript_DocumentCategory.htm\u0000134","ConcurrentPropertyBag Methods\u0000html/Methods_T_Microsoft_ClearScript_ConcurrentPropertyBag.htm\u0000259","ImmutableValueAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_ImmutableValueAttribute.htm\u0000196","IScriptObject Methods\u0000html/Methods_T_Microsoft_ClearScript_IScriptObject.htm\u0000149","DocumentLoader Methods\u0000html/Methods_T_Microsoft_ClearScript_DocumentLoader.htm\u0000169","DefaultDocumentLoader Methods\u0000html/Methods_T_Microsoft_ClearScript_DefaultDocumentLoader.htm\u0000218","EventConnection Methods\u0000html/Methods_T_Microsoft_ClearScript_EventConnection.htm\u0000146","Undefined.Value Field\u0000html/F_Microsoft_ClearScript_Undefined_Value.htm\u000079","IScriptableObject Methods\u0000html/Methods_T_Microsoft_ClearScript_IScriptableObject.htm\u000039","Extensions Methods\u0000html/Methods_T_Microsoft_ClearScript_Extensions.htm\u0000202","EventConnection\u0026lt;T\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_EventConnection_1.htm\u0000155","Document Methods\u0000html/Methods_T_Microsoft_ClearScript_Document.htm\u0000133","EventSource\u0026lt;T\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_EventSource_1.htm\u0000150","IJavaScriptObject Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_IJavaScriptObject.htm\u0000205","IArrayBufferView Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm\u0000423","HostTypeCollection Methods\u0000html/Methods_T_Microsoft_ClearScript_HostTypeCollection.htm\u0000411","NoScriptAccessAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_NoScriptAccessAttribute.htm\u0000197","ScriptEngineException Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptEngineException.htm\u0000189","PropertyBag Methods\u0000html/Methods_T_Microsoft_ClearScript_PropertyBag.htm\u0000216","NoDefaultScriptAccessAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm\u0000198","IPropertyBag Methods\u0000html/Methods_T_Microsoft_ClearScript_IPropertyBag.htm\u0000277","ITypedArray Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_ITypedArray.htm\u0000476","DynamicHostObject Methods\u0000html/Methods_T_Microsoft_ClearScript_DynamicHostObject.htm\u0000679","ScriptInterruptedException Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptInterruptedException.htm\u0000189","IArrayBuffer Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm\u0000434","HostFunctions Methods\u0000html/Methods_T_Microsoft_ClearScript_HostFunctions.htm\u0000828","StringDocument Methods\u0000html/Methods_T_Microsoft_ClearScript_StringDocument.htm\u0000134","JavaScriptExtensions Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_JavaScriptExtensions.htm\u0000264","IScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_IScriptEngine.htm\u00001129","IV8FastHostDynamicProperties Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties.htm\u0000136","V8FastHostMethodOperations\u0026lt;TObject, TMethod\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethodOperations_2.htm\u0000166","Undefined Methods\u0000html/Methods_T_Microsoft_ClearScript_Undefined.htm\u0000133","IDataView Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_IDataView.htm\u0000476","IV8FastAsyncEnumerator Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_IV8FastAsyncEnumerator.htm\u000077","Node Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8CpuProfile_Node.htm\u0000136","Sample Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8CpuProfile_Sample.htm\u0000136","IV8FastEnumerator Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_IV8FastEnumerator.htm\u000074","V8FastHostObjectOperations\u0026lt;TObject\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectOperations_1.htm\u0000152","ITypedArray\u0026lt;T\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm\u0000579","IV8FastHostFunctionOperations Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostFunctionOperations.htm\u0000282","ExtendedHostFunctions Methods\u0000html/Methods_T_Microsoft_ClearScript_ExtendedHostFunctions.htm\u00001169","V8Script Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8Script.htm\u0000144","ScriptMemberAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptMemberAttribute.htm\u0000196","HitLine Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine.htm\u0000140","IV8FastHostObjectOperations Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations.htm\u0000199","V8RuntimeDebuggerEventArgs Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs.htm\u0000137","V8FastResult Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastResult.htm\u0000386","IV8FastHostMethodOperations Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostMethodOperations.htm\u0000282","ScriptUsageAttribute Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptUsageAttribute.htm\u0000196","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1.htm\u0000159","VoidResult Methods\u0000html/Methods_T_Microsoft_ClearScript_VoidResult.htm\u0000134","V8FastHostDynamicObject\u0026lt;TObject\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1.htm\u0000257","ValueRef\u0026lt;T\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_ValueRef_1.htm\u0000137","ScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptEngine.htm\u00001248","V8FastHostObject\u0026lt;TObject\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostObject_1.htm\u0000150","DocumentLoader Constructor\u0000html/M_Microsoft_ClearScript_DocumentLoader__ctor.htm\u000071","IWindowsScriptObject Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_IWindowsScriptObject.htm\u0000215","Nothing Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Nothing.htm\u0000134","V8FastHostMethod\u0026lt;TObject\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethod_1.htm\u0000158","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt; Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1.htm\u0000537","DefaultDocumentLoader Constructor\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader__ctor.htm\u000072","ISyncInvoker Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_ISyncInvoker.htm\u000089","ScriptObject Methods\u0000html/Methods_T_Microsoft_ClearScript_ScriptObject.htm\u0000785","DocumentLoader.DiscardCachedDocuments Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_DiscardCachedDocuments.htm\u000088","V8RuntimeHeapInfo Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm\u0000136","V8CpuProfile Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8CpuProfile.htm\u0000158","DocumentInfo(Uri) Constructor\u0000html/M_Microsoft_ClearScript_DocumentInfo__ctor_1.htm\u0000105","DefaultDocumentLoader.CacheDocument Method\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader_CacheDocument.htm\u0000198","CustomAttributeLoader.LoadCustomAttributes\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_CustomAttributeLoader_LoadCustomAttributes__1.htm\u0000292","ConcurrentPropertyBag(Boolean) Constructor\u0000html/M_Microsoft_ClearScript_ConcurrentPropertyBag__ctor_1.htm\u0000135","DefaultScriptUsageAttribute(ScriptAccess) Constructor\u0000html/M_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor_1.htm\u0000113","NullSyncInvoker Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm\u0000199","DocumentSettings.AddSystemDocument(String, String) Method\u0000html/M_Microsoft_ClearScript_DocumentSettings_AddSystemDocument_3.htm\u0000182","DocumentSettings.AddSystemDocument(String, DocumentCategory, String) Method\u0000html/M_Microsoft_ClearScript_DocumentSettings_AddSystemDocument_1.htm\u0000219","Document Constructor\u0000html/M_Microsoft_ClearScript_Document__ctor.htm\u000070","DocumentSettings.AddSystemDocument(String, Document) Method\u0000html/M_Microsoft_ClearScript_DocumentSettings_AddSystemDocument.htm\u0000192","DefaultScriptUsageAttribute Constructor\u0000html/M_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor.htm\u000075","V8FastHostFunction Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction.htm\u0000191","DynamicHostObject Constructor\u0000html/M_Microsoft_ClearScript_DynamicHostObject__ctor.htm\u000072","V8Runtime Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8Runtime.htm\u0000928","ConcurrentPropertyBag(Boolean, IEqualityComparer\u0026lt;String\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_ConcurrentPropertyBag__ctor_2.htm\u0000176","DocumentLoader.CacheDocument Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_CacheDocument.htm\u0000196","DocumentSettings Constructor\u0000html/M_Microsoft_ClearScript_DocumentSettings__ctor.htm\u000071","V8FastArg Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastArg.htm\u0000609","DocumentLoader.LoadDocument Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_LoadDocument.htm\u0000352","EventConnection.disconnect Method\u0000html/M_Microsoft_ClearScript_EventConnection_disconnect.htm\u000080","DefaultDocumentLoader.GetCachedDocument Method\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader_GetCachedDocument.htm\u0000144","DocumentLoader.GetCachedDocument Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_GetCachedDocument.htm\u0000142","DocumentInfo(String) Constructor\u0000html/M_Microsoft_ClearScript_DocumentInfo__ctor.htm\u0000105","ExtendedHostFunctions.arrType\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_arrType__1.htm\u0000185","EventSource\u0026lt;T\u0026gt;.connect Method\u0000html/M_Microsoft_ClearScript_EventSource_1_connect.htm\u0000143","V8RuntimeConstraints Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm\u0000135","ExtendedHostFunctions.typeLibEnums\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_typeLibEnums__1.htm\u0000257","ExtendedHostFunctions.lib(HostTypeCollection, String[]) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_lib.htm\u0000407","Extensions.ToHostType(Type) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToHostType.htm\u0000225","CustomAttributeLoader Constructor\u0000html/M_Microsoft_ClearScript_CustomAttributeLoader__ctor.htm\u000072","Extensions.ToRestrictedHostObject(Object, Type) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToRestrictedHostObject.htm\u0000279","DefaultDocumentLoader.DiscardCachedDocuments Method\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader_DiscardCachedDocuments.htm\u000090","Extensions.ToRestrictedHostObject\u0026lt;T\u0026gt;(T) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToRestrictedHostObject__1.htm\u0000269","HostFunctions.func(Int32, Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_func.htm\u0000253","ExtendedHostFunctions.type(Type) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_type_2.htm\u0000196","DynamicHostObject.HasMember Method\u0000html/M_Microsoft_ClearScript_DynamicHostObject_HasMember.htm\u0000179","HostFunctions.del\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_del__1.htm\u0000389","DocumentSettings.AddSystemDocument(String, DocumentCategory, String, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_DocumentSettings_AddSystemDocument_2.htm\u0000257","WindowsScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine.htm\u00001583","Extensions.ToHostType(Type, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToHostType_1.htm\u0000263","ExtendedHostFunctions.comType Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_comType.htm\u0000330","HostFunctions.asType\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_asType__1.htm\u0000287","ExtendedHostFunctions.type(String, String, Object[]) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_type_1.htm\u0000455","DocumentLoader.LoadDocumentAsync Method\u0000html/M_Microsoft_ClearScript_DocumentLoader_LoadDocumentAsync.htm\u0000351","ExtendedHostFunctions.lib(String[]) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_lib_1.htm\u0000334","ExtendedHostFunctions.newComObj Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_newComObj.htm\u0000335","IHostWindow Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_IHostWindow.htm\u000035","VBScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_VBScriptEngine.htm\u00001591","ExtendedHostFunctions Constructor\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions__ctor.htm\u000072","ConcurrentPropertyBag(IEqualityComparer\u0026lt;String\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_ConcurrentPropertyBag__ctor_3.htm\u0000140","WindowsScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm\u00001590","HostFunctions.isTypeObj(Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_isTypeObj.htm\u0000183","HostFunctions.newObj(IDynamicMetaObjectProvider, Object[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newObj_1.htm\u0000201","HostFunctions.getProperty(IDynamicMetaObjectProvider, String) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_getProperty_1.htm\u0000187","EventSource.connect Method\u0000html/M_Microsoft_ClearScript_EventSource_connect.htm\u0000125","VBScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_VBScriptEngine.htm\u00001592","V8FastArgs Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_FastProxy_V8FastArgs.htm\u0000851","HostFunctions.isType\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_isType__1.htm\u0000248","HostFunctions.getElement Method\u0000html/M_Microsoft_ClearScript_HostFunctions_getElement.htm\u0000201","Extensions.ToRestrictedHostObject(Object, Type, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToRestrictedHostObject_1.htm\u0000317","HostFunctions.newArr\u0026lt;T\u0026gt;(Int32[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newArr__1.htm\u0000276","HostFunctions.cast\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_cast__1.htm\u0000232","HostFunctions.removeProperty(IPropertyBag, String) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_removeProperty.htm\u0000185","ExtendedHostFunctions.type(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_ExtendedHostFunctions_type.htm\u0000389","Extensions.ToRestrictedHostObject\u0026lt;T\u0026gt;(T, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_Extensions_ToRestrictedHostObject__1_1.htm\u0000306","HostFunctions.setElement Method\u0000html/M_Microsoft_ClearScript_HostFunctions_setElement.htm\u0000239","HostFunctions.toDouble Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toDouble.htm\u0000285","HostFunctions.isNull Method\u0000html/M_Microsoft_ClearScript_HostFunctions_isNull.htm\u0000151","DefaultDocumentLoader.LoadDocumentAsync Method\u0000html/M_Microsoft_ClearScript_DefaultDocumentLoader_LoadDocumentAsync.htm\u0000398","HostFunctions.flags\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_flags__1.htm\u0000352","HostFunctions.setProperty(IDynamicMetaObjectProvider, String, Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_setProperty_1.htm\u0000228","HostFunctions.newObj\u0026lt;T\u0026gt;(Object[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newObj__1.htm\u0000333","HostFunctions.proc Method\u0000html/M_Microsoft_ClearScript_HostFunctions_proc.htm\u0000390","V8ScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_V8_V8ScriptEngine.htm\u00002273","HostFunctions.func\u0026lt;T\u0026gt;(Int32, Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_func__1.htm\u0000451","HostFunctions.getProperty(IPropertyBag, String) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_getProperty.htm\u0000185","JScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_JScriptEngine.htm\u00001591","HostFunctions.toStaticType Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toStaticType.htm\u0000169","HostFunctions.newArr(Int32[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newArr.htm\u0000183","JScriptEngine Methods\u0000html/Methods_T_Microsoft_ClearScript_Windows_Core_JScriptEngine.htm\u00001592","HostFunctions.newObj(Object, Object[]) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newObj_2.htm\u0000271","HostTypeCollection.AddAssembly(String) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly_2.htm\u0000126","HostTypeCollection.AddType(String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddType.htm\u0000214","HostFunctions.isTypeObj\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_isTypeObj__1.htm\u0000173","HostFunctions.toInt32 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toInt32.htm\u0000286","HostTypeCollection.AddAssembly(Assembly) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly.htm\u0000116","HostFunctions.typeOf\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_typeOf__1.htm\u0000257","HostFunctions.toSByte Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toSByte.htm\u0000285","HostFunctions.removeProperty(IDynamicMetaObjectProvider, String) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_removeProperty_1.htm\u0000187","HostTypeCollection.AddType(Type) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddType_2.htm\u0000110","HostFunctions.toChar Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toChar.htm\u0000285","ConcurrentPropertyBag Constructor\u0000html/M_Microsoft_ClearScript_ConcurrentPropertyBag__ctor.htm\u000080","HostTypeCollection Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor.htm\u000075","ValueRef Methods\u0000html/Methods_T_Microsoft_ClearScript_ValueRef.htm\u000037","HostFunctions.toByte Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toByte.htm\u0000285","HostTypeCollection.AddAssembly(String, Predicate\u0026lt;Type\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly_3.htm\u0000185","HostFunctions.toUInt32 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toUInt32.htm\u0000286","HostFunctions.newObj Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newObj.htm\u0000193","HostFunctions Constructor\u0000html/M_Microsoft_ClearScript_HostFunctions__ctor.htm\u000071","HostTypeCollection.AddType(String, Type[]) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddType_1.htm\u0000173","HostFunctions.setProperty(IPropertyBag, String, Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_setProperty.htm\u0000226","HostFunctions.toInt16 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toInt16.htm\u0000286","HostFunctions.toSingle Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toSingle.htm\u0000285","HostTypeCollection(String[]) Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor_4.htm\u0000150","HostFunctions.removeElement Method\u0000html/M_Microsoft_ClearScript_HostFunctions_removeElement.htm\u0000201","HostTypeCollection.GetNamespaceNode Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_GetNamespaceNode.htm\u0000132","IScriptEngine.AddCOMObject(String, Guid, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_5.htm\u0000231","IScriptEngine.AddCOMObject(String, String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_7.htm\u0000266","IScriptableObject.OnExposedToScriptCode Method\u0000html/M_Microsoft_ClearScript_IScriptableObject_OnExposedToScriptCode.htm\u0000168","HostTypeCollection(Predicate\u0026lt;Type\u0026gt;, String[]) Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor_2.htm\u0000207","IScriptEngine.AddCOMType(String, Guid, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_5.htm\u0000231","IScriptEngine.AddCOMObject(String, HostItemFlags, Guid, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_1.htm\u0000269","HostTypeCollection.AddAssembly(Assembly, Predicate\u0026lt;Type\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_HostTypeCollection_AddAssembly_1.htm\u0000175","HostFunctions.toUInt16 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toUInt16.htm\u0000286","IScriptEngine.AddCOMType(String, HostItemFlags, String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_3.htm\u0000304","HostTypeCollection(Predicate\u0026lt;Type\u0026gt;, Assembly[]) Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor_1.htm\u0000197","IScriptEngine.AddCOMType(String, String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_7.htm\u0000266","HostFunctions.toDecimal Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toDecimal.htm\u0000285","HostFunctions.newVar\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_HostFunctions_newVar__1.htm\u0000441","IScriptEngine.AddHostObject(String, Object) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostObject_1.htm\u0000169","IArrayBufferView.GetBytes Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_GetBytes.htm\u0000113","IScriptEngine.EvaluateDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_EvaluateDocument_2.htm\u0000254","HostFunctions.toUInt64 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toUInt64.htm\u0000286","IScriptEngine.AddHostType(String, Type) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_6.htm\u0000219","IScriptEngine.AddHostType(String, HostItemFlags, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_2.htm\u0000320","IScriptEngine.AddHostTypes Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostTypes.htm\u0000213","IScriptEngine.ExecuteDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_ExecuteDocument_2.htm\u0000219","IScriptEngine.ExecuteDocument(String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_ExecuteDocument.htm\u0000143","ImmutableValueAttribute Constructor\u0000html/M_Microsoft_ClearScript_ImmutableValueAttribute__ctor.htm\u000072","IScriptObject.InvokeAsFunction Method\u0000html/M_Microsoft_ClearScript_IScriptObject_InvokeAsFunction.htm\u0000133","IScriptEngine.AddCOMObject(String, HostItemFlags, Guid) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject.htm\u0000228","IScriptEngine.AddCOMType(String, HostItemFlags, Guid) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType.htm\u0000228","IArrayBufferView.InvokeWithDirectAccess\u0026lt;TArg, TResult\u0026gt;(Func\u0026lt;IntPtr, TArg, TResult\u0026gt;, TArg) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_InvokeWithDirectAccess__2.htm\u0000306","IScriptEngine.Execute(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Execute.htm\u0000171","IScriptObject.GetProperty(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_GetProperty_1.htm\u0000174","IScriptEngine.AddCOMType(String, Guid) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_4.htm\u0000190","HostTypeCollection(Assembly[]) Constructor\u0000html/M_Microsoft_ClearScript_HostTypeCollection__ctor_3.htm\u0000140","HostFunctions.toInt64 Method\u0000html/M_Microsoft_ClearScript_HostFunctions_toInt64.htm\u0000286","IScriptEngine.Execute(String, Boolean, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Execute_2.htm\u0000278","IScriptEngine.AddHostType(Type) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_7.htm\u0000202","IScriptEngine.AddCOMObject(String, HostItemFlags, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_2.htm\u0000263","IScriptEngine.AddHostType(HostItemFlags, Type) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType.htm\u0000240","IScriptEngine.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_CollectGarbage.htm\u0000102","IScriptEngine.AddCOMType(String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_6.htm\u0000225","IScriptEngine.GetStackTrace Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_GetStackTrace.htm\u0000121","IScriptEngine.Evaluate(String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Evaluate_1.htm\u0000199","IScriptEngine.AddHostType(String, HostItemFlags, Type) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_3.htm\u0000257","IScriptEngine.AddCOMObject(String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_6.htm\u0000225","IScriptEngine.AddHostType(String, HostItemFlags, String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_1.htm\u0000361","HostFunctions.tryCatch Method\u0000html/M_Microsoft_ClearScript_HostFunctions_tryCatch.htm\u0000520","IScriptEngine.Invoke Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Invoke.htm\u0000171","IScriptObject.Invoke Method\u0000html/M_Microsoft_ClearScript_IScriptObject_Invoke.htm\u0000161","IScriptEngine.Execute(String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Execute_1.htm\u0000165","IScriptObject.InvokeMethod Method\u0000html/M_Microsoft_ClearScript_IScriptObject_InvokeMethod.htm\u0000161","IArrayBufferView.InvokeWithDirectAccess(Action\u0026lt;IntPtr\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_InvokeWithDirectAccess.htm\u0000182","IScriptEngine.Execute(String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Execute_3.htm\u0000221","IArrayBufferView.ReadBytes(UInt64, UInt64, Byte[], UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_ReadBytes.htm\u0000252","IScriptEngine.ExecuteDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_ExecuteDocument_1.htm\u0000180","IScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_ExecuteCommand.htm\u0000164","IArrayBuffer.ReadBytes(UInt64, UInt64, Byte[], UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_ReadBytes.htm\u0000251","IScriptEngine.AddHostObject(String, HostItemFlags, Object) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostObject.htm\u0000452","ITypedArray\u0026lt;T\u0026gt;.Read(UInt64, UInt64, Span\u0026lt;T\u0026gt;, UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_Read.htm\u0000253","IArrayBufferView.WriteBytes(ReadOnlySpan\u0026lt;Byte\u0026gt;, UInt64, UInt64, UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_WriteBytes_1.htm\u0000262","ITypedArray\u0026lt;T\u0026gt;.Write(T[], UInt64, UInt64, UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_Write_1.htm\u0000248","IArrayBuffer.InvokeWithDirectAccess\u0026lt;TResult\u0026gt;(Func\u0026lt;IntPtr, TResult\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_InvokeWithDirectAccess__1_1.htm\u0000235","JavaScriptExtensions.ToPromise(Task, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise_1.htm\u0000264","IScriptEngine.Interrupt Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Interrupt.htm\u000088","JavaScriptExtensions.ToPromise(ValueTask, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise_3.htm\u0000263","IScriptEngine.AddCOMType(String, HostItemFlags, Guid, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_1.htm\u0000269","IScriptEngine.AddCOMObject(String, HostItemFlags, String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_3.htm\u0000304","NoDefaultScriptAccessAttribute Constructor\u0000html/M_Microsoft_ClearScript_NoDefaultScriptAccessAttribute__ctor.htm\u000074","IArrayBuffer.GetBytes Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_GetBytes.htm\u0000116","PropertyBag.TryGetValue Method\u0000html/M_Microsoft_ClearScript_PropertyBag_TryGetValue.htm\u0000206","ScriptEngineException(SerializationInfo, StreamingContext) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngineException__ctor_1.htm\u0000141","IScriptObject.DeleteProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_DeleteProperty.htm\u0000119","PropertyBag(IEqualityComparer\u0026lt;String\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_PropertyBag__ctor_3.htm\u0000139","IScriptEngine.AddHostType(String, String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_4.htm\u0000323","IScriptEngine.AddCOMObject(String, Guid) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMObject_4.htm\u0000190","IScriptEngine.AddRestrictedHostObject\u0026lt;T\u0026gt;(String, HostItemFlags, T) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddRestrictedHostObject__1.htm\u0000262","JavaScriptExtensions.ToPromise\u0026lt;T\u0026gt;(ValueTask\u0026lt;T\u0026gt;, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise__1_3.htm\u0000305","IScriptEngine.Evaluate(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Evaluate.htm\u0000206","ScriptEngine.AddCOMObject(String, Guid, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_5.htm\u0000271","IArrayBuffer.ReadBytes(UInt64, UInt64, Span\u0026lt;Byte\u0026gt;, UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_ReadBytes_1.htm\u0000259","IScriptEngine.Evaluate(String, Boolean, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Evaluate_2.htm\u0000511","ScriptEngine.AddCOMObject(String, HostItemFlags, Guid, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_1.htm\u0000317","IScriptObject.SetProperty(Int32, Object) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_SetProperty.htm\u0000137","JavaScriptExtensions.ToPromise(ValueTask) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise_2.htm\u0000226","PropertyBag Constructor\u0000html/M_Microsoft_ClearScript_PropertyBag__ctor.htm\u000079","ScriptEngine.AddCOMObject(String, String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_7.htm\u0000306","NoScriptAccessAttribute Constructor\u0000html/M_Microsoft_ClearScript_NoScriptAccessAttribute__ctor.htm\u000073","IArrayBufferView.ReadBytes(UInt64, UInt64, Span\u0026lt;Byte\u0026gt;, UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_ReadBytes_1.htm\u0000260","ITypedArray\u0026lt;T\u0026gt;.Read(UInt64, UInt64, T[], UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_Read_1.htm\u0000247","JavaScriptExtensions.ToAsyncEnumerable Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToAsyncEnumerable.htm\u0000262","IArrayBufferView.InvokeWithDirectAccess\u0026lt;TArg\u0026gt;(Action\u0026lt;IntPtr, TArg\u0026gt;, TArg) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_InvokeWithDirectAccess__1.htm\u0000264","PropertyBag.ContainsKey Method\u0000html/M_Microsoft_ClearScript_PropertyBag_ContainsKey.htm\u0000153","HostFunctions.typeOf(Object) Method\u0000html/M_Microsoft_ClearScript_HostFunctions_typeOf.htm\u0000281","IArrayBuffer.InvokeWithDirectAccess(Action\u0026lt;IntPtr\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_InvokeWithDirectAccess.htm\u0000187","IArrayBuffer.InvokeWithDirectAccess\u0026lt;TArg, TResult\u0026gt;(Func\u0026lt;IntPtr, TArg, TResult\u0026gt;, TArg) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_InvokeWithDirectAccess__2.htm\u0000311","IScriptEngine.AddCOMType(String, HostItemFlags, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddCOMType_2.htm\u0000263","ScriptEngineException(String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngineException__ctor_2.htm\u0000105","IScriptObject.DeleteProperty(String) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_DeleteProperty_1.htm\u0000120","JavaScriptExtensions.ToPromise\u0026lt;T\u0026gt;(Task\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise__1.htm\u0000269","IScriptEngine.Evaluate(String, String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_Evaluate_3.htm\u0000255","PropertyBag.Add Method\u0000html/M_Microsoft_ClearScript_PropertyBag_Add.htm\u0000163","ITypedArray\u0026lt;T\u0026gt;.ToArray Method\u0000html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_ToArray.htm\u0000109","PropertyBag(Boolean) Constructor\u0000html/M_Microsoft_ClearScript_PropertyBag__ctor_1.htm\u0000134","ScriptEngineException.GetObjectData Method\u0000html/M_Microsoft_ClearScript_ScriptEngineException_GetObjectData.htm\u0000174","PropertyBag.Remove Method\u0000html/M_Microsoft_ClearScript_PropertyBag_Remove.htm\u0000145","IScriptEngine.EvaluateDocument(String) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_EvaluateDocument.htm\u0000178","JavaScriptExtensions.ToEnumerable Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToEnumerable.htm\u0000257","ScriptEngine.AddCOMType(String, HostItemFlags, Guid) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType.htm\u0000268","JavaScriptExtensions.ToTask Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToTask.htm\u0000258","ScriptEngine.AddCOMObject(String, HostItemFlags, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_2.htm\u0000303","IArrayBufferView.WriteBytes(Byte[], UInt64, UInt64, UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_WriteBytes.htm\u0000253","IScriptEngine.AddRestrictedHostObject\u0026lt;T\u0026gt;(String, T) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddRestrictedHostObject__1_1.htm\u0000226","ScriptEngine.AddCOMType(String, HostItemFlags, String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_3.htm\u0000352","ScriptEngine.AddHostTypes Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostTypes.htm\u0000242","IScriptObject.SetProperty(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_SetProperty_1.htm\u0000189","IScriptEngine.AddHostType(String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_AddHostType_5.htm\u0000282","ScriptEngine.AddCOMType(String, String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_7.htm\u0000306","IScriptObject.GetProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_IScriptObject_GetProperty.htm\u0000121","ScriptEngineException(String, Exception) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngineException__ctor_3.htm\u0000144","ScriptEngine.AddCOMObject(String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_6.htm\u0000257","PropertyBag.RemovePropertyNoCheck Method\u0000html/M_Microsoft_ClearScript_PropertyBag_RemovePropertyNoCheck.htm\u0000140","IArrayBuffer.InvokeWithDirectAccess\u0026lt;TArg\u0026gt;(Action\u0026lt;IntPtr, TArg\u0026gt;, TArg) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_InvokeWithDirectAccess__1.htm\u0000269","PropertyBag(Boolean, IEqualityComparer\u0026lt;String\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_PropertyBag__ctor_2.htm\u0000175","ScriptEngine.EvaluateDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_EvaluateDocument_2.htm\u0000294","ScriptEngine.AddRestrictedHostObject\u0026lt;T\u0026gt;(String, HostItemFlags, T) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject__1.htm\u0000305","IArrayBuffer.WriteBytes(Byte[], UInt64, UInt64, UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_WriteBytes.htm\u0000253","JavaScriptExtensions.ToPromise(Task) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise.htm\u0000227","ScriptEngineException.ToString Method\u0000html/M_Microsoft_ClearScript_ScriptEngineException_ToString.htm\u0000108","IScriptEngine.EvaluateDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_IScriptEngine_EvaluateDocument_1.htm\u0000215","ScriptEngine.Dispose(Boolean) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Dispose_1.htm\u0000183","ScriptEngine.AddCOMObject(String, HostItemFlags, String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_3.htm\u0000352","ScriptEngine.Execute(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Execute.htm\u0000203","ScriptEngine.ExecuteDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_ExecuteDocument_2.htm\u0000259","ScriptEngine.AddHostType(String, String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_4.htm\u0000375","ScriptEngine.Finalize Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Finalize.htm\u0000141","ScriptInterruptedException Constructor\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor.htm\u000074","PropertyBag.ClearNoCheck Method\u0000html/M_Microsoft_ClearScript_PropertyBag_ClearNoCheck.htm\u000093","ScriptObject.DeleteProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_DeleteProperty.htm\u0000133","IArrayBufferView.InvokeWithDirectAccess\u0026lt;TResult\u0026gt;(Func\u0026lt;IntPtr, TResult\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBufferView_InvokeWithDirectAccess__1_1.htm\u0000230","ScriptEngine(String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngine__ctor.htm\u0000206","ScriptMemberAttribute(String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_4.htm\u0000115","ScriptEngine.AddCOMType(String, Guid) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_4.htm\u0000222","ITypedArray\u0026lt;T\u0026gt;.Write(ReadOnlySpan\u0026lt;T\u0026gt;, UInt64, UInt64, UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_ITypedArray_1_Write.htm\u0000255","PropertyBag.SetPropertyNoCheck Method\u0000html/M_Microsoft_ClearScript_PropertyBag_SetPropertyNoCheck.htm\u0000151","ScriptObject.GetProperty(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_GetProperty_1.htm\u0000191","ScriptEngine.AddCOMType(String, HostItemFlags, Guid, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_1.htm\u0000317","ScriptEngine.AddHostType(String, HostItemFlags, String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_1.htm\u0000421","ScriptEngine.AddRestrictedHostObject\u0026lt;T\u0026gt;(String, T) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject__1_1.htm\u0000261","ScriptObject.DeleteProperty(String) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_DeleteProperty_1.htm\u0000134","ScriptEngine(String, String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngine__ctor_1.htm\u0000168","ScriptMemberAttribute Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor.htm\u000074","ScriptEngine.Evaluate(String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_1.htm\u0000223","ScriptEngine.AddCOMObject(String, HostItemFlags, Guid) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject.htm\u0000268","ScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_ExecuteCommand.htm\u0000189","IV8FastEnumerator.GetCurrent Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastEnumerator_GetCurrent.htm\u0000124","ScriptEngineException Constructor\u0000html/M_Microsoft_ClearScript_ScriptEngineException__ctor.htm\u000074","ScriptEngine.AddHostObject(String, HostItemFlags, Object) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostObject.htm\u0000492","IV8FastHostDynamicProperties.GetDynamicProperty(Int32, V8FastResult) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_GetDynamicProperty.htm\u0000164","StringDocument Constructor\u0000html/M_Microsoft_ClearScript_StringDocument__ctor.htm\u0000129","ScriptMemberAttribute(String, ScriptAccess) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_5.htm\u0000153","IV8FastHostDynamicProperties.SetDynamicProperty(Int32, V8FastArg) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_SetDynamicProperty.htm\u0000154","ScriptEngine.AddCOMType(String, HostItemFlags, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_2.htm\u0000303","ScriptEngine.AddCOMType(String, Guid, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_5.htm\u0000271","ScriptEngine.GetStackTrace Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_GetStackTrace.htm\u0000133","ScriptInterruptedException(SerializationInfo, StreamingContext) Constructor\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor_1.htm\u0000141","ScriptObject.Invoke Method\u0000html/M_Microsoft_ClearScript_ScriptObject_Invoke.htm\u0000178","ScriptEngine.Execute(String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Execute_1.htm\u0000189","ScriptObject.SetProperty(Int32, Object) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_SetProperty.htm\u0000153","IArrayBuffer.WriteBytes(ReadOnlySpan\u0026lt;Byte\u0026gt;, UInt64, UInt64, UInt64) Method\u0000html/M_Microsoft_ClearScript_JavaScript_IArrayBuffer_WriteBytes_1.htm\u0000262","ScriptMemberAttribute(ScriptAccess) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_1.htm\u0000112","ScriptEngine.AddHostType(String, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_5.htm\u0000326","ScriptEngine.AddCOMObject(String, Guid) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMObject_4.htm\u0000222","IV8FastHostObjectOperations.GetFriendlyName Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_GetFriendlyName.htm\u0000131","ScriptEngine.Evaluate(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Evaluate.htm\u0000238","ScriptEngine.AddHostObject(String, Object) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostObject_1.htm\u0000201","ScriptEngine.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_CollectGarbage.htm\u0000116","ScriptObject.Dispose Method\u0000html/M_Microsoft_ClearScript_ScriptObject_Dispose.htm\u000091","Undefined.ToString Method\u0000html/M_Microsoft_ClearScript_Undefined_ToString.htm\u0000120","ScriptEngine.ExecuteDocument(String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_ExecuteDocument.htm\u0000167","ScriptInterruptedException.GetObjectData Method\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException_GetObjectData.htm\u0000174","IV8FastHostObjectOperations.CreateAsyncEnumerator Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_CreateAsyncEnumerator.htm\u0000134","IV8FastEnumerator.MoveNext Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastEnumerator_MoveNext.htm\u0000109","ScriptEngine.AddHostType(String, HostItemFlags, String, Type[]) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_2.htm\u0000372","IV8FastHostDynamicProperties.GetDynamicProperty(String, V8FastResult) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_GetDynamicProperty_1.htm\u0000165","IV8FastHostDynamicProperties.SetDynamicProperty(String, V8FastArg) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_SetDynamicProperty_1.htm\u0000155","ScriptEngine.AddCOMType(String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddCOMType_6.htm\u0000257","ScriptMemberAttribute(String, ScriptAccess, ScriptMemberFlags) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_6.htm\u0000191","JavaScriptExtensions.ToPromise\u0026lt;T\u0026gt;(Task\u0026lt;T\u0026gt;, ScriptEngine) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise__1_1.htm\u0000305","ScriptEngine.Dispose Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Dispose.htm\u0000100","ScriptObject.InvokeAsFunction Method\u0000html/M_Microsoft_ClearScript_ScriptObject_InvokeAsFunction.htm\u0000162","ScriptEngine.EvaluateDocument(String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_EvaluateDocument.htm\u0000202","IV8FastHostObjectOperations.CreateEnumerator Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_CreateEnumerator.htm\u0000130","IV8FastHostObjectOperations.GetProperty(IV8FastHostObject, String, V8FastResult, Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_GetProperty_1.htm\u0000252","V8FastArgs.GetChar Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetChar.htm\u0000197","ScriptObject.GetProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_GetProperty.htm\u0000135","ScriptInterruptedException(String) Constructor\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor_2.htm\u0000105","ScriptObject.SetProperty(String, Object[]) Method\u0000html/M_Microsoft_ClearScript_ScriptObject_SetProperty_1.htm\u0000206","ScriptEngine.Interrupt Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Interrupt.htm\u0000100","ScriptMemberAttribute(ScriptAccess, ScriptMemberFlags) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_2.htm\u0000149","ScriptEngine.AddHostType(HostItemFlags, Type) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType.htm\u0000272","ScriptInterruptedException.ToString Method\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException_ToString.htm\u0000108","IV8FastAsyncEnumerator.GetCurrent Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastAsyncEnumerator_GetCurrent.htm\u0000125","IV8FastHostObjectOperations.SetProperty(IV8FastHostObject, String, V8FastArg) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_SetProperty_1.htm\u0000187","V8FastArgs.GetDouble Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetDouble.htm\u0000197","IV8FastHostObjectOperations.GetProperty(IV8FastHostObject, Int32, V8FastResult) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_GetProperty.htm\u0000196","IV8FastHostDynamicProperties.HasDynamicProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_HasDynamicProperty.htm\u0000134","ScriptEngine.AddHostType(String, Type) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_6.htm\u0000251","ScriptEngine.Evaluate(String, Boolean, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_2.htm\u0000551","ScriptEngine.ExecuteDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_ExecuteDocument_1.htm\u0000212","IV8FastHostObjectOperations.DeleteProperty(IV8FastHostObject, Int32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_DeleteProperty.htm\u0000170","ScriptEngine.EvaluateDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_EvaluateDocument_1.htm\u0000247","ScriptEngine.Execute(String, Boolean, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Execute_2.htm\u0000318","V8FastArgs.GetCharSpan Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetCharSpan.htm\u0000232","JavaScriptExtensions.ToPromise\u0026lt;T\u0026gt;(ValueTask\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise__1_2.htm\u0000269","IV8FastHostFunctionOperations.Invoke Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostFunctionOperations_Invoke.htm\u0000184","ScriptEngine.AddHostType(String, HostItemFlags, Type) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_3.htm\u0000297","IV8FastHostDynamicProperties.DeleteDynamicProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_DeleteDynamicProperty.htm\u0000112","ScriptUsageAttribute Constructor\u0000html/M_Microsoft_ClearScript_ScriptUsageAttribute__ctor.htm\u000074","ScriptInterruptedException(String, Exception) Constructor\u0000html/M_Microsoft_ClearScript_ScriptInterruptedException__ctor_3.htm\u0000144","V8FastArgs.IsFalsy Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_IsFalsy.htm\u0000129","ScriptMemberAttribute(ScriptMemberFlags) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_3.htm\u0000111","IV8FastHostDynamicProperties.HasDynamicProperty(String) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_HasDynamicProperty_1.htm\u0000135","V8FastArgs.TryGet(Int32, Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet.htm\u0000187","IV8FastHostObjectOperations.DeleteProperty(IV8FastHostObject, String) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_DeleteProperty_1.htm\u0000171","V8FastArgs.GetInt16 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetInt16.htm\u0000198","IV8FastHostObjectOperations.QueryProperty(IV8FastHostObject, Int32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_QueryProperty.htm\u0000159","V8FastArgs.GetNullable\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetNullable__1.htm\u0000281","V8FastArgs.GetUInt16 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetUInt16.htm\u0000199","V8FastArgs.TryGet(Int32, Single) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_12.htm\u0000187","ScriptEngine.AddHostType(Type) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_AddHostType_7.htm\u0000226","ScriptEngine.Invoke Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Invoke.htm\u0000207","ScriptObject.InvokeMethod Method\u0000html/M_Microsoft_ClearScript_ScriptObject_InvokeMethod.htm\u0000178","IV8FastHostObjectOperations.GetPropertyIndices Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_GetPropertyIndices.htm\u0000150","V8FastArgs.TryGet(Int32, UInt64) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_16.htm\u0000190","ScriptMemberAttribute(String, ScriptMemberFlags) Constructor\u0000html/M_Microsoft_ClearScript_ScriptMemberAttribute__ctor_7.htm\u0000152","IV8FastAsyncEnumerator.MoveNextAsync Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastAsyncEnumerator_MoveNextAsync.htm\u0000140","V8FastArgs.GetBigInteger Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetBigInteger.htm\u0000198","V8FastArgs.TryGet(Int32, BigInteger) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_9.htm\u0000188","V8FastArg.GetInt32 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetInt32.htm\u0000165","ScriptEngine.Evaluate(String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Evaluate_3.htm\u0000287","V8FastArg.TryGet(ReadOnlySpan\u0026lt;Char\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_10.htm\u0000185","V8FastArg.TryGet(UInt16) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_14.htm\u0000153","V8FastArgs.TryGet(Int32, Byte) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_1.htm\u0000188","V8FastArgs.IsNull Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_IsNull.htm\u0000129","ScriptUsageAttribute(ScriptAccess) Constructor\u0000html/M_Microsoft_ClearScript_ScriptUsageAttribute__ctor_1.htm\u0000112","V8FastArg.GetBoolean Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetBoolean.htm\u0000164","V8FastArg.GetSingle Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetSingle.htm\u0000164","IV8FastHostMethodOperations.Invoke Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostMethodOperations_Invoke.htm\u0000151","V8FastArgs.GetSByte Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetSByte.htm\u0000198","V8FastArg.GetDateTime Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetDateTime.htm\u0000165","ScriptEngine.Execute(String, String) Method\u0000html/M_Microsoft_ClearScript_ScriptEngine_Execute_3.htm\u0000253","V8FastArgs.GetInt32 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetInt32.htm\u0000198","V8FastArgs.TryGet(Int32, Char) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_2.htm\u0000187","V8FastArg.TryGet(DateTime) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_3.htm\u0000152","V8FastArgs.GetUInt32 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetUInt32.htm\u0000199","IV8FastHostDynamicProperties.DeleteDynamicProperty(String) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_DeleteDynamicProperty_1.htm\u0000113","IV8FastHostObjectOperations.QueryProperty(IV8FastHostObject, String) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_QueryProperty_1.htm\u0000160","V8FastArgs.GetDateTime Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetDateTime.htm\u0000198","V8FastArg.GetString Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetString.htm\u0000166","V8FastArgs.TryGet(Int32, Double) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_5.htm\u0000187","V8FastArgs.GetBoolean Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetBoolean.htm\u0000197","V8FastArgs.TryGet(Int32, ReadOnlySpan\u0026lt;Char\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_10.htm\u0000221","V8FastArg.GetInt64 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetInt64.htm\u0000166","V8FastArg.TryGet(SByte) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_11.htm\u0000152","V8FastArg.GetUInt64 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetUInt64.htm\u0000167","V8FastArg.TryGet(Int32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_7.htm\u0000152","V8FastArg.TryGet(UInt32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_15.htm\u0000153","V8FastArgs.TryGet\u0026lt;T\u0026gt;(Int32, Nullable\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet__1.htm\u0000271","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.GetDynamicProperty(Int32, V8FastResult) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_GetDynamicProperty.htm\u0000170","V8FastArg.TryGet\u0026lt;T\u0026gt;(T) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet__1_1.htm\u0000179","V8FastArgs.GetByte Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetByte.htm\u0000198","V8FastArg.GetDecimal Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetDecimal.htm\u0000164","V8FastArg.GetUInt16 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetUInt16.htm\u0000166","V8FastArgs.TryGet(Int32, SByte) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_11.htm\u0000188","V8FastArg.GetNullable\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetNullable__1.htm\u0000252","V8FastArgs.GetUInt64 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetUInt64.htm\u0000200","V8FastArgs.GetSingle Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetSingle.htm\u0000197","V8FastArg.TryGet(Single) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_12.htm\u0000151","V8FastArg.TryGet(Decimal) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_4.htm\u0000151","V8FastArgs.TryGet(Int32, String) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_13.htm\u0000188","V8FastArgs.TryGet(Int32, Int16) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_6.htm\u0000188","V8FastArgs.IsTruthy Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_IsTruthy.htm\u0000129","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt;(V8FastHostObjectConfigurator\u0026lt;TFunction\u0026gt;, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1__ctor_1.htm\u0000175","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.SetDynamicProperty(Int32, V8FastArg) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_SetDynamicProperty.htm\u0000160","V8FastArgs.TryGet(Int32, DateTime) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_3.htm\u0000188","IV8FastHostObjectOperations.SetProperty(IV8FastHostObject, Int32, V8FastArg) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_SetProperty.htm\u0000186","V8FastArgs.GetDecimal Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetDecimal.htm\u0000197","V8FastArg.TryGet(Int64) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_8.htm\u0000153","V8FastArgs.TryGet\u0026lt;T\u0026gt;(Int32, T) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet__1_1.htm\u0000210","V8FastArg.TryGet(UInt64) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_16.htm\u0000154","V8FastHostFunction.VerifyFunctionCall Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction_VerifyFunctionCall.htm\u0000161","V8FastArgs.GetInt64 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetInt64.htm\u0000199","V8FastArg.GetByte Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetByte.htm\u0000165","V8FastArg.Get\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_Get__1.htm\u0000191","IV8FastHostObjectOperations.GetPropertyNames Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_GetPropertyNames.htm\u0000151","V8FastArg.GetUInt32 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetUInt32.htm\u0000166","V8FastArg.GetSByte Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetSByte.htm\u0000165","V8FastArg.GetDouble Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetDouble.htm\u0000164","V8FastHostFunction(Int32, V8FastHostObjectConfigurator\u0026lt;V8FastHostFunction\u0026gt;, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction__ctor_3.htm\u0000214","V8FastArgs.TryGet(Int32, Int32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_7.htm\u0000188","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.GetDynamicProperty(String, V8FastResult) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_GetDynamicProperty_1.htm\u0000171","V8FastArg.TryGet(Double) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_5.htm\u0000151","V8FastArgs.Get\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_Get__1.htm\u0000220","V8FastArgs.GetString Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_GetString.htm\u0000199","V8FastHostFunction(String, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction__ctor_4.htm\u0000142","V8FastArg.TryGet(Char) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_2.htm\u0000151","V8FastArg.TryGet(BigInteger) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_9.htm\u0000152","V8FastArg.TryGet(String) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_13.htm\u0000152","V8FastHostObject\u0026lt;TObject\u0026gt; Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObject_1__ctor.htm\u000079","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.HasDynamicProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_HasDynamicProperty.htm\u0000159","V8FastResult.Set(Int16) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_6.htm\u0000114","V8FastArg.TryGet(Int16) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_6.htm\u0000152","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.SetEnumeratorFactory(Func\u0026lt;TObject, IV8FastEnumerator\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_SetEnumeratorFactory.htm\u0000175","V8FastArgs.IsUndefined Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_IsUndefined.htm\u0000129","V8FastHostFunction(V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction__ctor.htm\u0000109","V8FastHostMethod\u0026lt;TObject\u0026gt;(TObject, String, Int32, V8FastHostObjectConfigurator\u0026lt;V8FastHostMethod\u0026lt;TObject\u0026gt;\u0026gt;, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethod_1__ctor_3.htm\u0000311","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.SetDynamicProperty(String, V8FastArg) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_SetDynamicProperty_1.htm\u0000161","V8FastResult.Set(String) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_13.htm\u0000115","V8FastArg.TryGet(Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet.htm\u0000151","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyGetter\u0026lt;TField\u0026gt;(String, V8FastHostFieldAccessor\u0026lt;TObject, TField\u0026gt;, V8FastHostPropertyFlags) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyGetter__1_1.htm\u0000279","V8FastArgs.TryGet(Int32, Decimal) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_4.htm\u0000187","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt;(Int32, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1__ctor_2.htm\u0000153","V8FastArg.GetBigInteger Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetBigInteger.htm\u0000165","V8RuntimeConstraints Constructor\u0000html/M_Microsoft_ClearScript_V8_V8RuntimeConstraints__ctor.htm\u000073","V8FastArg.GetInt16 Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetInt16.htm\u0000165","V8FastArg.GetChar Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetChar.htm\u0000164","V8FastArgs.TryGet(Int32, Int64) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_8.htm\u0000189","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.Configure Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_Configure.htm\u0000156","V8FastHostMethodOperations\u0026lt;TObject, TMethod\u0026gt;(TObject, String, Int32, V8FastHostObjectConfigurator\u0026lt;TMethod\u0026gt;, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethodOperations_2__ctor_3.htm\u0000299","V8FastArgs.TryGet(Int32, UInt16) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_14.htm\u0000189","V8FastArg.TryGet\u0026lt;T\u0026gt;(Nullable\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet__1.htm\u0000239","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddMethodGetter(String, Int32, V8FastHostObjectConfigurator\u0026lt;V8FastHostMethod\u0026lt;TObject\u0026gt;\u0026gt;, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddMethodGetter_3.htm\u0000300","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt;(String, V8FastHostObjectConfigurator\u0026lt;TFunction\u0026gt;, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1__ctor_5.htm\u0000206","V8FastHostFunction(String, V8FastHostObjectConfigurator\u0026lt;V8FastHostFunction\u0026gt;, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction__ctor_5.htm\u0000209","V8FastResult.Set(UInt16) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_14.htm\u0000115","V8FastResult.Set(Int32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_7.htm\u0000114","V8FastHostDynamicObject\u0026lt;TObject\u0026gt; Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1__ctor.htm\u000080","V8FastHostFunction(V8FastHostObjectConfigurator\u0026lt;V8FastHostFunction\u0026gt;, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction__ctor_1.htm\u0000178","V8FastHostMethod\u0026lt;TObject\u0026gt;(TObject, String, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethod_1__ctor.htm\u0000193","V8Runtime(V8RuntimeConstraints) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_1.htm\u0000110","V8Runtime(String, V8RuntimeConstraints) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_7.htm\u0000164","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddMethodGetter(String, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddMethodGetter.htm\u0000181","V8Runtime.BeginCpuProfile(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_BeginCpuProfile.htm\u0000137","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.DeleteDynamicProperty(Int32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_DeleteDynamicProperty.htm\u0000137","V8ScriptEngine.BeginCpuProfile(String, V8CpuProfileFlags) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_BeginCpuProfile_1.htm\u0000174","V8FastArgs.TryGet(Int32, UInt32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet_15.htm\u0000189","V8FastArg.GetCharSpan Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_GetCharSpan.htm\u0000199","V8FastResult.Set(Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set.htm\u0000113","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt;(Int32, V8FastHostObjectConfigurator\u0026lt;TFunction\u0026gt;, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1__ctor_3.htm\u0000211","V8FastArg.TryGet(Byte) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet_1.htm\u0000152","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.SetEnumeratorFactory(Func\u0026lt;TObject, IEnumerator\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_SetEnumeratorFactory_1.htm\u0000169","V8Runtime.EndCpuProfile Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_EndCpuProfile.htm\u0000139","V8Runtime.CompileDocument(String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_10.htm\u0000255","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt;(String, Int32, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1__ctor_6.htm\u0000184","V8Runtime.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_8.htm\u0000359","V8Runtime.Compile(String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_5.htm\u0000332","V8FastResult.Set(UInt32) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_15.htm\u0000115","V8Runtime.Compile(String, String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_9.htm\u0000391","V8FastHostFunction(String, Int32, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction__ctor_6.htm\u0000178","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.SetAsyncEnumeratorFactory(Func\u0026lt;TObject, IV8FastAsyncEnumerator\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_SetAsyncEnumeratorFactory.htm\u0000179","V8FastResult.Set(Int64) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_8.htm\u0000115","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.HasDynamicProperty(String) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_HasDynamicProperty_1.htm\u0000160","V8ScriptEngine.CancelAwaitDebugger Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CancelAwaitDebugger.htm\u000098","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt;(V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1__ctor.htm\u0000115","V8FastResult.SetNull Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_SetNull.htm\u000081","V8Runtime(String, V8RuntimeConstraints, V8RuntimeFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_8.htm\u0000200","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt;(String, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1__ctor_4.htm\u0000148","V8Runtime(String, V8RuntimeFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_10.htm\u0000164","V8Runtime.CreateScriptEngine Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine.htm\u0000119","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddMethodGetter(String, V8FastHostObjectConfigurator\u0026lt;V8FastHostMethod\u0026lt;TObject\u0026gt;\u0026gt;, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddMethodGetter_1.htm\u0000260","V8FastResult.Set(BigInteger) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_9.htm\u0000114","V8Runtime.BeginCpuProfile(String, V8CpuProfileFlags) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_BeginCpuProfile_1.htm\u0000172","V8FastHostFunction(Int32, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction__ctor_2.htm\u0000147","V8FastResult.Set(UInt64) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_16.htm\u0000116","V8Runtime.GetHeapInfo Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_GetHeapInfo.htm\u000092","V8Runtime.CompileDocument(String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_11.htm\u0000322","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.SetEnumeratorFactory\u0026lt;TItem\u0026gt;(Func\u0026lt;TObject, IEnumerator\u0026lt;TItem\u0026gt;\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_SetEnumeratorFactory__1.htm\u0000207","V8FastResult.SetUndefined Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_SetUndefined.htm\u000081","V8ScriptEngine.CompileDocument(String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_10.htm\u0000256","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.SetAsyncEnumeratorFactory\u0026lt;TItem\u0026gt;(Func\u0026lt;TObject, IAsyncEnumerator\u0026lt;TItem\u0026gt;\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_SetAsyncEnumeratorFactory__1.htm\u0000212","V8ScriptEngine.Interrupt Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Interrupt.htm\u0000114","V8Runtime.CompileDocument(String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_9.htm\u0000332","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.DeleteDynamicProperty(String) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_DeleteDynamicProperty_1.htm\u0000138","V8Runtime.Compile(String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_6.htm\u0000258","V8FastHostFunction(String, Int32, V8FastHostObjectConfigurator\u0026lt;V8FastHostFunction\u0026gt;, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction__ctor_7.htm\u0000246","V8ScriptEngine.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_8.htm\u0000360","V8ScriptEngine.Compile(String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_5.htm\u0000331","V8Runtime.CollectCpuProfileSample Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CollectCpuProfileSample.htm\u000086","V8ScriptEngine.CancelInterrupt Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CancelInterrupt.htm\u000093","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt;(String, Int32, V8FastHostObjectConfigurator\u0026lt;TFunction\u0026gt;, V8FastHostFunctionInvoker) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1__ctor_7.htm\u0000243","V8ScriptEngine(V8ScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_4.htm\u0000127","V8FastHostMethod\u0026lt;TObject\u0026gt;(TObject, String, V8FastHostObjectConfigurator\u0026lt;V8FastHostMethod\u0026lt;TObject\u0026gt;\u0026gt;, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethod_1__ctor_1.htm\u0000275","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyAccessors(String, V8FastHostPropertyGetter\u0026lt;TObject\u0026gt;, V8FastHostPropertySetter\u0026lt;TObject\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyAccessors.htm\u0000233","V8Runtime(String, V8RuntimeFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_11.htm\u0000204","V8FastResult.Set(Byte) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_1.htm\u0000114","V8FastResult.Set\u0026lt;T\u0026gt;(Nullable\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set__1.htm\u0000206","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddMethodGetter(String, Int32, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddMethodGetter_2.htm\u0000219","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt; Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1__ctor.htm\u000080","V8Runtime.WriteHeapSnapshot Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_WriteHeapSnapshot.htm\u0000126","V8ScriptEngine.CollectCpuProfileSample Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CollectCpuProfileSample.htm\u000087","V8Runtime.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CollectGarbage.htm\u0000108","V8Runtime.CreateScriptEngine(V8ScriptEngineFlags) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_1.htm\u0000198","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.SetDynamicPropertiesGetter Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_SetDynamicPropertiesGetter.htm\u0000161","V8ScriptEngine.Compile(String, String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_9.htm\u0000390","V8ScriptEngine.WriteRuntimeHeapSnapshot Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_WriteRuntimeHeapSnapshot.htm\u0000132","V8Runtime.Compile(DocumentInfo, String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_1.htm\u0000374","V8FastResult.Set(Char) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_2.htm\u0000113","V8Runtime(String, V8RuntimeConstraints, V8RuntimeFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_9.htm\u0000239","JScriptEngine(String, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor_2.htm\u0000170","V8FastHostFunction.VerifyConstructorCall Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction_VerifyConstructorCall.htm\u0000161","V8FastHostMethodOperations\u0026lt;TObject, TMethod\u0026gt;(TObject, String, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethodOperations_2__ctor.htm\u0000203","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyAccessors(String, V8FastHostPropertyGetter\u0026lt;TObject\u0026gt;, V8FastHostPropertySetter\u0026lt;TObject\u0026gt;, V8FastHostPropertyFlags) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyAccessors_1.htm\u0000290","V8FastHostObjectOperations\u0026lt;TObject\u0026gt;.Configure Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectOperations_1_Configure.htm\u0000149","V8ScriptEngine.Compile(String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_6.htm\u0000258","V8Runtime.Compile(String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_7.htm\u0000314","V8Runtime.Compile(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile.htm\u0000167","V8ScriptEngine.CompileDocument(String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_9.htm\u0000333","V8ScriptEngine(V8ScriptEngineFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_5.htm\u0000166","V8FastHostMethod\u0026lt;TObject\u0026gt;(TObject, String, Int32, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethod_1__ctor_2.htm\u0000231","V8ScriptEngine.CompileDocument(String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_11.htm\u0000323","V8ScriptEngine.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CollectGarbage.htm\u0000134","V8FastResult.Set\u0026lt;T\u0026gt;(T) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set__1_1.htm\u0000149","NullSyncInvoker.Invoke(Action) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Invoke.htm\u0000155","VoidResult.ToString Method\u0000html/M_Microsoft_ClearScript_VoidResult_ToString.htm\u0000121","V8ScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor.htm\u000091","V8Runtime.CreateScriptEngine(V8ScriptEngineFlags, Int32) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_2.htm\u0000237","V8Runtime.CompileDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_2.htm\u0000211","V8Runtime(V8RuntimeConstraints, V8RuntimeFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_2.htm\u0000145","V8Runtime.CompileDocument(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument.htm\u0000135","V8FastHostObjectOperations\u0026lt;TObject\u0026gt; Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectOperations_1__ctor.htm\u000083","ISyncInvoker.CheckAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_ISyncInvoker_CheckAccess.htm\u0000103","V8FastResult.Set(ReadOnlySpan\u0026lt;Char\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_10.htm\u0000155","V8Runtime.Compile(String, String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_8.htm\u0000184","V8ScriptEngine.Dispose(Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Dispose.htm\u0000186","V8ScriptEngine.Compile(DocumentInfo, String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile.htm\u0000166","Nothing.ToString Method\u0000html/M_Microsoft_ClearScript_Windows_Nothing_ToString.htm\u0000124","V8CpuProfile.ToJson Method\u0000html/M_Microsoft_ClearScript_V8_V8CpuProfile_ToJson.htm\u0000109","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyAccessors\u0026lt;TField\u0026gt;(String, V8FastHostFieldAccessor\u0026lt;TObject, TField\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyAccessors__1.htm\u0000221","V8ScriptEngine(String) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_6.htm\u0000145","IHostWindow.EnableModeless Method\u0000html/M_Microsoft_ClearScript_Windows_IHostWindow_EnableModeless.htm\u0000107","V8Runtime Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor.htm\u000075","V8ScriptEngine(V8RuntimeConstraints) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_1.htm\u0000131","JScriptEngine(String, WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor_3.htm\u0000211","V8FastResult.Set(DateTime) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_3.htm\u0000114","V8ScriptEngine.CompileDocument(String, DocumentCategory, DocumentContextCallback) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_2.htm\u0000212","NullSyncInvoker.Invoke\u0026lt;T\u0026gt;(Func\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Invoke__1.htm\u0000216","V8Runtime.CreateScriptEngine(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_3.htm\u0000173","VBScriptEngine(String, String, String, WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor_4.htm\u0000327","V8Runtime(V8RuntimeConstraints, V8RuntimeFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_3.htm\u0000185","V8Runtime.Compile(String, String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_10.htm\u0000317","V8ScriptEngine.BeginCpuProfile(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_BeginCpuProfile.htm\u0000139","V8ScriptEngine(String, V8ScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_10.htm\u0000181","V8ScriptEngine.CompileDocument(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument.htm\u0000136","IWindowsScriptObject.GetUnderlyingObject Method\u0000html/M_Microsoft_ClearScript_Windows_IWindowsScriptObject_GetUnderlyingObject.htm\u000097","V8ScriptEngine.EndCpuProfile Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_EndCpuProfile.htm\u0000140","V8FastResult.Set(SByte) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_11.htm\u0000114","ISyncInvoker.Invoke(Action) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_ISyncInvoker_Invoke.htm\u0000118","WindowsScriptEngine.CheckAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_CheckAccess.htm\u0000111","V8ScriptEngine(String, V8RuntimeConstraints) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_7.htm\u0000185","V8Runtime.CompileDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_1.htm\u0000172","V8ScriptEngine.Compile(String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_7.htm\u0000313","V8CpuProfile.WriteJson Method\u0000html/M_Microsoft_ClearScript_V8_V8CpuProfile_WriteJson.htm\u0000127","V8Runtime(V8RuntimeFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_4.htm\u0000110","NullSyncInvoker.VerifyAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_VerifyAccess.htm\u0000114","V8FastHostObjectOperations\u0026lt;TObject\u0026gt;(V8FastHostObjectConfigurator\u0026lt;TObject\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectOperations_1__ctor_1.htm\u0000143","V8FastHostMethodOperations\u0026lt;TObject, TMethod\u0026gt;(TObject, String, V8FastHostObjectConfigurator\u0026lt;TMethod\u0026gt;, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethodOperations_2__ctor_1.htm\u0000263","V8ScriptEngine.Compile(DocumentInfo, String, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_1.htm\u0000372","V8Runtime.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_3.htm\u0000408","HostFunctions.isTypeObj Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_isTypeObj.htm\u000076","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyAccessors\u0026lt;TField\u0026gt;(String, V8FastHostFieldAccessor\u0026lt;TObject, TField\u0026gt;, V8FastHostPropertyFlags) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyAccessors__1_1.htm\u0000274","V8Runtime.CreateScriptEngine(String, V8ScriptEngineFlags) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_4.htm\u0000252","VBScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine_ExecuteCommand.htm\u0000255","IScriptEngine.Execute Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_Execute.htm\u000078","HostTypeCollection Constructor\u0000html/Overload_Microsoft_ClearScript_HostTypeCollection__ctor.htm\u0000125","V8Runtime.Compile(String, String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_11.htm\u0000371","DocumentInfo Constructor\u0000html/Overload_Microsoft_ClearScript_DocumentInfo__ctor.htm\u000046","WindowsScriptEngine.CollectGarbage Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_CollectGarbage.htm\u0000135","VBScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor.htm\u000076","V8ScriptEngine.Compile(String, String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_8.htm\u0000183","V8FastResult.Set(Single) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_12.htm\u0000113","V8ScriptEngine.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_3.htm\u0000409","V8ScriptEngine(String, V8ScriptEngineFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_11.htm\u0000221","VBScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine_ExecuteCommand.htm\u0000259","ISyncInvoker.Invoke\u0026lt;T\u0026gt;(Func\u0026lt;T\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_ISyncInvoker_Invoke__1.htm\u0000170","IScriptEngine.ExecuteDocument Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_ExecuteDocument.htm\u000065","V8ScriptEngine(String, V8RuntimeConstraints, V8ScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_8.htm\u0000222","IArrayBufferView.WriteBytes Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_IArrayBufferView_WriteBytes.htm\u000066","V8Runtime(V8RuntimeFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_5.htm\u0000149","V8FastHostMethodOperations\u0026lt;TObject, TMethod\u0026gt;(TObject, String, Int32, V8FastHostMethodInvoker\u0026lt;TObject\u0026gt;) Constructor\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethodOperations_2__ctor_2.htm\u0000241","V8ScriptEngine.CompileDocument(String, DocumentCategory) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_1.htm\u0000173","V8ScriptEngine.Evaluate(V8Script) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Evaluate.htm\u0000143","HostFunctions.newArr Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_newArr.htm\u000053","JScriptEngine(String, String, String, WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor_4.htm\u0000327","V8FastHostObject\u0026lt;TObject\u0026gt;.Configure Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObject_1_Configure.htm\u0000155","IScriptEngine.AddCOMObject Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddCOMObject.htm\u0000300","V8FastResult.Set(Decimal) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_4.htm\u0000113","V8Runtime.CreateScriptEngine(String, V8ScriptEngineFlags, Int32) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine_5.htm\u0000292","Microsoft.ClearScript Namespace\u0000html/N_Microsoft_ClearScript.htm\u0000563","JScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine_ExecuteCommand.htm\u0000212","DocumentSettings.AddSystemDocument Method\u0000html/Overload_Microsoft_ClearScript_DocumentSettings_AddSystemDocument.htm\u000094","V8Runtime.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_4.htm\u0000331","VBScriptEngine(WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_1.htm\u0000113","V8ScriptEngine.Compile(String, String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_10.htm\u0000317","IScriptObject.DeleteProperty Method\u0000html/Overload_Microsoft_ClearScript_IScriptObject_DeleteProperty.htm\u000040","ScriptEngineException Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptEngineException__ctor.htm\u000070","ScriptObject.Item Property\u0000html/Overload_Microsoft_ClearScript_ScriptObject_Item.htm\u000049","V8FastResult.Set(Double) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set_5.htm\u0000113","IArrayBuffer.InvokeWithDirectAccess Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_IArrayBuffer_InvokeWithDirectAccess.htm\u0000149","IScriptObject.GetProperty Method\u0000html/Overload_Microsoft_ClearScript_IScriptObject_GetProperty.htm\u000049","NullSyncInvoker.CheckAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_CheckAccess.htm\u0000135","ScriptObject.SetProperty Method\u0000html/Overload_Microsoft_ClearScript_ScriptObject_SetProperty.htm\u000051","V8Runtime.Dispose Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Dispose.htm\u000099","VBScriptEngine(String) Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_2.htm\u0000130","ExtendedHostFunctions.lib Method\u0000html/Overload_Microsoft_ClearScript_ExtendedHostFunctions_lib.htm\u000058","IV8FastHostObjectOperations.GetProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_GetProperty.htm\u000060","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.SetDynamicProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_SetDynamicProperty.htm\u000057","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyGetter(String, V8FastHostPropertyGetter\u0026lt;TObject\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyGetter.htm\u0000186","V8Runtime.Compile(DocumentInfo, String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_2.htm\u0000300","HostFunctions.newObj Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_newObj.htm\u0000100","WindowsScriptEngine.Dispose(Boolean) Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Dispose.htm\u0000191","V8ScriptEngine(V8RuntimeConstraints, V8ScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_2.htm\u0000167","V8ScriptEngine.Execute(V8Script) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Execute.htm\u0000145","JScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor.htm\u000076","VBScriptEngine(ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor.htm\u0000114","V8Runtime(String) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8Runtime__ctor_6.htm\u0000129","IScriptObject.Item Property\u0000html/Overload_Microsoft_ClearScript_IScriptObject_Item.htm\u000049","ScriptUsageAttribute Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptUsageAttribute__ctor.htm\u000041","V8ScriptEngine.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_4.htm\u0000332","HostFunctions.removeProperty Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_removeProperty.htm\u000056","ISyncInvoker.VerifyAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_ISyncInvoker_VerifyAccess.htm\u000083","IScriptEngine.AddCOMType Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddCOMType.htm\u0000300","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.SetAsyncEnumeratorFactory Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_SetAsyncEnumeratorFactory.htm\u000078","ScriptEngine.EvaluateDocument Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_EvaluateDocument.htm\u000065","IArrayBuffer.ReadBytes Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_IArrayBuffer_ReadBytes.htm\u000064","V8Runtime Constructor\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime__ctor.htm\u0000246","V8Runtime.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_5.htm\u0000398","Microsoft.ClearScript.JavaScript Namespace\u0000html/N_Microsoft_ClearScript_JavaScript.htm\u0000117","ScriptEngine.AddCOMObject Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddCOMObject.htm\u0000300","VBScriptEngine(String, WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_3.htm\u0000167","HostFunctions.setProperty Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_setProperty.htm\u000062","V8Runtime.Compile(DocumentInfo, String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_3.htm\u0000354","V8ScriptEngine.BeginCpuProfile Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_BeginCpuProfile.htm\u000048","ScriptEngine.Execute Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_Execute.htm\u000078","ExtendedHostFunctions.type Method\u0000html/Overload_Microsoft_ClearScript_ExtendedHostFunctions_type.htm\u000065","IScriptObject.SetProperty Method\u0000html/Overload_Microsoft_ClearScript_IScriptObject_SetProperty.htm\u000051","IV8FastHostDynamicProperties.DeleteDynamicProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_DeleteDynamicProperty.htm\u000044","ISyncInvoker.Invoke Method\u0000html/Overload_Microsoft_ClearScript_Windows_Core_ISyncInvoker_Invoke.htm\u000057","IV8FastHostObjectOperations.QueryProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_QueryProperty.htm\u000051","VBScriptEngine(WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor_1.htm\u0000153","WindowsScriptEngine.GetStackTrace Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_GetStackTrace.htm\u0000171","IArrayBuffer.WriteBytes Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_IArrayBuffer_WriteBytes.htm\u000067","V8ScriptEngine(String, V8RuntimeConstraints, V8ScriptEngineFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_9.htm\u0000261","IScriptEngine.AddHostObject Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddHostObject.htm\u000053","V8ScriptEngine.Compile(String, String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_11.htm\u0000370","V8ScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_ExecuteCommand.htm\u0000212","IV8FastHostObjectOperations.SetProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_SetProperty.htm\u000057","JScriptEngine(WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_1.htm\u0000113","HostFunctions.typeOf Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_typeOf.htm\u000075","Microsoft.ClearScript.V8 Namespace\u0000html/N_Microsoft_ClearScript_V8.htm\u0000226","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.SetEnumeratorFactory Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_SetEnumeratorFactory.htm\u000097","IV8FastHostDynamicProperties.GetDynamicProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_GetDynamicProperty.htm\u000056","V8Runtime.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_6.htm\u0000369","V8ScriptEngine.CompileDocument(String, DocumentCategory, DocumentContextCallback, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_5.htm\u0000399","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyGetter(String, V8FastHostPropertyGetter\u0026lt;TObject\u0026gt;, V8FastHostPropertyFlags) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyGetter_1.htm\u0000239","IArrayBufferView.InvokeWithDirectAccess Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_IArrayBufferView_InvokeWithDirectAccess.htm\u0000142","V8ScriptEngine.Compile Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Compile.htm\u0000310","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt; Constructor\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1__ctor.htm\u0000203","WindowsScriptEngine.Interrupt Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Interrupt.htm\u0000116","V8FastHostObjectOperations\u0026lt;TObject\u0026gt; Constructor\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectOperations_1__ctor.htm\u000052","ITypedArray\u0026lt;T\u0026gt;.Read Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_ITypedArray_1_Read.htm\u000065","VBScriptEngine(String, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor_2.htm\u0000170","Extensions.ToHostType Method\u0000html/Overload_Microsoft_ClearScript_Extensions_ToHostType.htm\u000066","HostTypeCollection.AddAssembly Method\u0000html/Overload_Microsoft_ClearScript_HostTypeCollection_AddAssembly.htm\u0000101","JScriptEngine(String) Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_2.htm\u0000130","VBScriptEngine(String, String, String, WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_VBScriptEngine__ctor_4.htm\u0000284","V8Runtime.Compile(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_Compile_4.htm\u0000127","V8ScriptEngine.GetRuntimeHeapInfo Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_GetRuntimeHeapInfo.htm\u0000102","WindowsScriptEngine.VerifyAccess Method\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_VerifyAccess.htm\u000090","IScriptEngine.AddHostType Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddHostType.htm\u0000205","V8ScriptEngine(V8RuntimeConstraints, V8ScriptEngineFlags, Int32) Constructor\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine__ctor_3.htm\u0000207","V8ScriptEngine.Compile(DocumentInfo, String, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_2.htm\u0000300","V8FastArgs.TryGet Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_TryGet.htm\u0000421","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyGetter\u0026lt;TField\u0026gt;(String, V8FastHostFieldAccessor\u0026lt;TObject, TField\u0026gt;) Method\u0000html/M_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyGetter__1.htm\u0000226","ScriptEngine.AddCOMType Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddCOMType.htm\u0000300","ITypedArray\u0026lt;T\u0026gt;.Write Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_ITypedArray_1_Write.htm\u000066","ScriptEngine.ExecuteDocument Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_ExecuteDocument.htm\u000065","JScriptEngine.ExecuteCommand Method\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine_ExecuteCommand.htm\u0000216","V8FastResult.Set Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastResult_Set.htm\u0000254","V8Script.Dispose Method\u0000html/M_Microsoft_ClearScript_V8_V8Script_Dispose.htm\u0000143","JScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor.htm\u0000124","V8ScriptEngine.CompileDocument Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument.htm\u0000336","Microsoft.ClearScript.V8.FastProxy Namespace\u0000html/N_Microsoft_ClearScript_V8_FastProxy.htm\u0000371","ScriptEngine.AddHostObject Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddHostObject.htm\u000053","HostTypeCollection.AddType Method\u0000html/Overload_Microsoft_ClearScript_HostTypeCollection_AddType.htm\u000083","V8ScriptEngine.Dispose Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Dispose.htm\u000055","V8Runtime.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8Runtime_CompileDocument_7.htm\u0000292","IScriptEngine.AddRestrictedHostObject Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_AddRestrictedHostObject.htm\u000066","JScriptEngine(String, WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_3.htm\u0000167","Extensions.ToRestrictedHostObject Method\u0000html/Overload_Microsoft_ClearScript_Extensions_ToRestrictedHostObject.htm\u0000153","Microsoft.ClearScript.Windows Namespace\u0000html/N_Microsoft_ClearScript_Windows.htm\u0000123","VBScriptEngine(String, WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor_3.htm\u0000211","ScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptEngine__ctor.htm\u000051","V8ScriptEngine.GetStackTrace Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_GetStackTrace.htm\u0000146","V8FastHostFunction Constructor\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction__ctor.htm\u0000176","JScriptEngine(ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor.htm\u0000114","V8ScriptEngine.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[], Boolean) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_6.htm\u0000370","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt; Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1.htm\u000040","DocumentSettings Properties\u0000html/Properties_T_Microsoft_ClearScript_DocumentSettings.htm\u0000116","V8ScriptEngine.Evaluate Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Evaluate.htm\u000087","HostFunctions.func Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_func.htm\u000062","WindowsScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_Windows_WindowsScriptEngine__ctor.htm\u0000266","IScriptEngine.Evaluate Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_Evaluate.htm\u000078","ConcurrentPropertyBag Properties\u0000html/Properties_T_Microsoft_ClearScript_ConcurrentPropertyBag.htm\u000097","WindowsScriptEngine Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine__ctor.htm\u0000306","IArrayBufferView.ReadBytes Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_IArrayBufferView_ReadBytes.htm\u000065","V8FastResult Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_FastProxy_V8FastResult.htm\u000036","V8Runtime.BeginCpuProfile Method\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime_BeginCpuProfile.htm\u000047","IV8FastHostDynamicProperties.HasDynamicProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_HasDynamicProperty.htm\u000054","NullSyncInvoker.Invoke Method\u0000html/Overload_Microsoft_ClearScript_Windows_Core_NullSyncInvoker_Invoke.htm\u000058","NoScriptAccessAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_NoScriptAccessAttribute.htm\u000068","IArrayBuffer Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm\u0000148","Microsoft.ClearScript.Windows.Core Namespace\u0000html/N_Microsoft_ClearScript_Windows_Core.htm\u000088","V8FastHostMethodOperations\u0026lt;TObject, TMethod\u0026gt; Constructor\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethodOperations_2__ctor.htm\u0000149","V8CpuProfile Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8CpuProfile.htm\u000068","V8ScriptEngine.Execute Method\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine_Execute.htm\u000087","CustomAttributeLoader Properties\u0000html/Properties_T_Microsoft_ClearScript_CustomAttributeLoader.htm\u000034","StringDocument Properties\u0000html/Properties_T_Microsoft_ClearScript_StringDocument.htm\u000082","V8FastArg.TryGet Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastArg_TryGet.htm\u0000307","JScriptEngine(String, String, String, WindowsScriptEngineFlags) Constructor\u0000html/M_Microsoft_ClearScript_Windows_JScriptEngine__ctor_4.htm\u0000284","DocumentCategory.MaxCacheSize Property\u0000html/P_Microsoft_ClearScript_DocumentCategory_MaxCacheSize.htm\u0000172","JavaScriptExtensions.ToPromise Method\u0000html/Overload_Microsoft_ClearScript_JavaScript_JavaScriptExtensions_ToPromise.htm\u0000226","HostFunctions.getProperty Method\u0000html/Overload_Microsoft_ClearScript_HostFunctions_getProperty.htm\u000062","PropertyBag Properties\u0000html/Properties_T_Microsoft_ClearScript_PropertyBag.htm\u000072","V8ScriptEngine.Compile(DocumentInfo, String, V8CacheKind, Byte[], V8CacheResult) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_3.htm\u0000353","IWindowsScriptObject Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_IWindowsScriptObject.htm\u0000113","ValueRef.Create\u0026lt;T\u0026gt; Method\u0000html/M_Microsoft_ClearScript_ValueRef_Create__1.htm\u0000238","HostSettings Properties\u0000html/Properties_T_Microsoft_ClearScript_HostSettings.htm\u000061","ScriptEngine.AddHostType Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddHostType.htm\u0000205","ScriptInterruptedException Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptInterruptedException__ctor.htm\u000070","V8Runtime.Compile Method\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime_Compile.htm\u0000310","JScriptEngine(WindowsScriptEngineFlags, ISyncInvoker) Constructor\u0000html/M_Microsoft_ClearScript_Windows_Core_JScriptEngine__ctor_1.htm\u0000153","V8ScriptEngine.CompileDocument(String, DocumentCategory, V8CacheKind, Byte[]) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_CompileDocument_7.htm\u0000293","IV8FastHostDynamicProperties.SetDynamicProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_SetDynamicProperty.htm\u000056","IScriptEngine.EvaluateDocument Method\u0000html/Overload_Microsoft_ClearScript_IScriptEngine_EvaluateDocument.htm\u000065","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.DeleteDynamicProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_DeleteDynamicProperty.htm\u000045","V8RuntimeHeapInfo Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm\u000094","ScriptMemberAttribute Constructor\u0000html/Overload_Microsoft_ClearScript_ScriptMemberAttribute__ctor.htm\u0000150","ScriptEngine.AddRestrictedHostObject Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_AddRestrictedHostObject.htm\u000066","VBScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_Windows_Core_VBScriptEngine__ctor.htm\u0000124","DocumentSettings.SearchPath Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_SearchPath.htm\u0000125","IV8FastHostDynamicProperties Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties.htm\u000052","DefaultDocumentLoader Properties\u0000html/Properties_T_Microsoft_ClearScript_DefaultDocumentLoader.htm\u000045","HostTypeCollection Properties\u0000html/Properties_T_Microsoft_ClearScript_HostTypeCollection.htm\u000097","DocumentLoader.Default Property\u0000html/P_Microsoft_ClearScript_DocumentLoader_Default.htm\u0000100","V8ScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_V8_V8ScriptEngine__ctor.htm\u0000259","IV8FastHostFunction Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostFunction.htm\u000036","PropertyBag Constructor\u0000html/Overload_Microsoft_ClearScript_PropertyBag__ctor.htm\u000070","IScriptEngine.AccessContext Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_AccessContext.htm\u0000174","ScriptObject.DeleteProperty Method\u0000html/Overload_Microsoft_ClearScript_ScriptObject_DeleteProperty.htm\u000040","ScriptEngine.Dispose Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_Dispose.htm\u000054","IScriptEngine.FormatCode Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_FormatCode.htm\u0000151","ConcurrentPropertyBag Constructor\u0000html/Overload_Microsoft_ClearScript_ConcurrentPropertyBag__ctor.htm\u000071","IScriptEngine.DisableListIndexTypeRestriction Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableListIndexTypeRestriction.htm\u0000170","V8Script Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8Script.htm\u000049","ImmutableValueAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_ImmutableValueAttribute.htm\u000049","IV8FastHostMethod Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostMethod.htm\u000036","WindowsScriptEngine.Dispose Method\u0000html/Overload_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Dispose.htm\u000057","IScriptEngine.UseReflectionBindFallback Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_UseReflectionBindFallback.htm\u0000181","V8FastHostMethod\u0026lt;TObject\u0026gt; Constructor\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethod_1__ctor.htm\u0000129","Node Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8CpuProfile_Node.htm\u0000145","IArrayBufferView Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm\u0000165","IScriptEngineException.ErrorDetails Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_ErrorDetails.htm\u0000100","V8ScriptEngine.Compile(String) Method\u0000html/M_Microsoft_ClearScript_V8_V8ScriptEngine_Compile_4.htm\u0000126","ScriptObject.GetProperty Method\u0000html/Overload_Microsoft_ClearScript_ScriptObject_GetProperty.htm\u000049","IScriptEngine.Global Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_Global.htm\u0000138","V8Runtime.CompileDocument Method\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime_CompileDocument.htm\u0000335","IScriptEngine.AllowReflection Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_AllowReflection.htm\u0000178","DocumentLoader.MaxCacheSize Property\u0000html/P_Microsoft_ClearScript_DocumentLoader_MaxCacheSize.htm\u0000161","ScriptEngine.Evaluate Method\u0000html/Overload_Microsoft_ClearScript_ScriptEngine_Evaluate.htm\u000078","DocumentCategory.Script Property\u0000html/P_Microsoft_ClearScript_DocumentCategory_Script.htm\u0000102","Sample Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8CpuProfile_Sample.htm\u000046","IV8FastHostObject Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObject.htm\u000036","DefaultScriptUsageAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm\u000061","JScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_JScriptEngine.htm\u0000556","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.GetDynamicProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_GetDynamicProperty.htm\u000057","IScriptEngine.VoidResultValue Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_VoidResultValue.htm\u0000177","DefaultScriptUsageAttribute Constructor\u0000html/Overload_Microsoft_ClearScript_DefaultScriptUsageAttribute__ctor.htm\u000043","IScriptEngine.HostData Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_HostData.htm\u0000115","IV8FastHostObjectOperations.DeleteProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations_DeleteProperty.htm\u000045","ScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptEngine.htm\u0000356","IArrayBufferView.Offset Property\u0000html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_Offset.htm\u000098","Document Properties\u0000html/Properties_T_Microsoft_ClearScript_Document.htm\u000054","IScriptEngineException.ExecutionStarted Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_ExecutionStarted.htm\u0000101","Document.Contents Property\u0000html/P_Microsoft_ClearScript_Document_Contents.htm\u0000105","ScriptEngineException.ScriptException Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_ScriptException.htm\u0000126","IScriptEngine.DisableTypeRestriction Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableTypeRestriction.htm\u0000176","IPropertyBag Properties\u0000html/Properties_T_Microsoft_ClearScript_IPropertyBag.htm\u0000146","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddMethodGetter Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddMethodGetter.htm\u0000117","V8Runtime.CreateScriptEngine Method\u0000html/Overload_Microsoft_ClearScript_V8_V8Runtime_CreateScriptEngine.htm\u0000124","IScriptObject.Engine Property\u0000html/P_Microsoft_ClearScript_IScriptObject_Engine.htm\u000094","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.HasDynamicProperty Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_HasDynamicProperty.htm\u000055","ScriptEngine.DisableDynamicBinding Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableDynamicBinding.htm\u0000176","IScriptEngine.ContinuationCallback Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_ContinuationCallback.htm\u0000153","JScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_Windows_JScriptEngine__ctor.htm\u0000106","V8FastArg Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_FastProxy_V8FastArg.htm\u000063","ScriptInterruptedException.IsFatal Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_IsFatal.htm\u0000114","IDataView Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_IDataView.htm\u0000182","PropertyBag.Comparer Property\u0000html/P_Microsoft_ClearScript_PropertyBag_Comparer.htm\u0000127","DocumentCategory Properties\u0000html/Properties_T_Microsoft_ClearScript_DocumentCategory.htm\u000056","DocumentInfo.Category Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_Category.htm\u0000114","IArrayBufferView.Size Property\u0000html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_Size.htm\u000095","IScriptObject.Item(Int32) Property\u0000html/P_Microsoft_ClearScript_IScriptObject_Item.htm\u0000166","IScriptEngine.Name Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_Name.htm\u000095","IScriptEngineException.HResult Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_HResult.htm\u000095","DocumentSettings.AccessFlags Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_AccessFlags.htm\u0000109","V8Runtime Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8Runtime.htm\u0000149","IScriptEngine.DocumentSettings Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DocumentSettings.htm\u0000112","ScriptInterruptedException.ScriptException Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_ScriptException.htm\u0000126","IV8FastHostDynamicProperties.DynamicPropertyNames Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_DynamicPropertyNames.htm\u0000131","Document.Encoding Property\u0000html/P_Microsoft_ClearScript_Document_Encoding.htm\u0000124","ScriptEngine.NullImportValue Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_NullImportValue.htm\u0000186","V8FastArgs Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_FastProxy_V8FastArgs.htm\u000037","V8ScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8ScriptEngine.htm\u0000611","ScriptEngineException Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptEngineException.htm\u0000295","VBScriptEngine Constructor\u0000html/Overload_Microsoft_ClearScript_Windows_VBScriptEngine__ctor.htm\u0000106","ScriptObject.PropertyIndices Property\u0000html/P_Microsoft_ClearScript_ScriptObject_PropertyIndices.htm\u0000131","ScriptEngineException.ScriptExceptionAsObject Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_ScriptExceptionAsObject.htm\u0000134","ScriptEngine.DisableExtensionMethods Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableExtensionMethods.htm\u0000128","PropertyBag.Item Property\u0000html/P_Microsoft_ClearScript_PropertyBag_Item.htm\u0000190","IJavaScriptObject Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_IJavaScriptObject.htm\u0000127","ScriptEngine.EnforceAnonymousTypeAccess Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_EnforceAnonymousTypeAccess.htm\u0000216","IScriptEngine.CustomAttributeLoader Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_CustomAttributeLoader.htm\u0000129","ScriptInterruptedException.ScriptExceptionAsObject Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_ScriptExceptionAsObject.htm\u0000134","V8RuntimeConstraints Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm\u0000118","IScriptObject.Item(String, Object[]) Property\u0000html/P_Microsoft_ClearScript_IScriptObject_Item_1.htm\u0000244","IArrayBuffer.Size Property\u0000html/P_Microsoft_ClearScript_JavaScript_IArrayBuffer_Size.htm\u000096","V8FastHostDynamicObject\u0026lt;TObject\u0026gt; Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1.htm\u000054","V8Settings Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8Settings.htm\u000043","DocumentSettings.AsyncLoadCallback Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_AsyncLoadCallback.htm\u0000125","IScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_IScriptEngine.htm\u0000340","IV8FastHostFunction.Operations Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_IV8FastHostFunction_Operations.htm\u000097","DocumentInfo Properties\u0000html/Properties_T_Microsoft_ClearScript_DocumentInfo.htm\u000078","Page Not Found\u0000html/PageNotFound.htm\u000066","ScriptEngine.DisableFloatNarrowing Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableFloatNarrowing.htm\u0000186","DocumentInfo.ContextCallback Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_ContextCallback.htm\u0000205","V8RuntimeDebuggerEventArgs Properties\u0000html/Properties_T_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs.htm\u000049","IV8FastHostMethod.Operations Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_IV8FastHostMethod_Operations.htm\u000097","DocumentSettings.ContextCallback Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_ContextCallback.htm\u0000206","DocumentLoader Properties\u0000html/Properties_T_Microsoft_ClearScript_DocumentLoader.htm\u000045","IScriptEngine.EnableAutoHostVariables Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_EnableAutoHostVariables.htm\u0000164","IScriptEngine.NullExportValue Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_NullExportValue.htm\u0000187","VBScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_VBScriptEngine.htm\u0000556","IScriptEngine.DefaultAccess Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DefaultAccess.htm\u0000178","ScriptEngine.ExposeHostObjectStaticMembers Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_ExposeHostObjectStaticMembers.htm\u0000141","ScriptEngine.Script Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_Script.htm\u0000141","IScriptEngineException Properties\u0000html/Properties_T_Microsoft_ClearScript_IScriptEngineException.htm\u0000176","ScriptObject.PropertyNames Property\u0000html/P_Microsoft_ClearScript_ScriptObject_PropertyNames.htm\u0000133","V8CpuProfile.Node.ChildNodes Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_ChildNodes.htm\u0000148","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyAccessors Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyAccessors.htm\u0000111","ScriptEngine.AccessContext Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_AccessContext.htm\u0000197","ITypedArray Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_ITypedArray.htm\u0000189","ScriptEngine.DisableListIndexTypeRestriction Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableListIndexTypeRestriction.htm\u0000193","Document.Info Property\u0000html/P_Microsoft_ClearScript_Document_Info.htm\u0000100","ScriptInterruptedException Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptInterruptedException.htm\u0000313","JScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_Core_JScriptEngine.htm\u0000540","IScriptObject.PropertyIndices Property\u0000html/P_Microsoft_ClearScript_IScriptObject_PropertyIndices.htm\u0000118","IScriptEngineException.InnerException Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_InnerException.htm\u0000108","PropertyBag.Keys Property\u0000html/P_Microsoft_ClearScript_PropertyBag_Keys.htm\u0000149","IJavaScriptObject.Flags Property\u0000html/P_Microsoft_ClearScript_JavaScript_IJavaScriptObject_Flags.htm\u000090","ScriptUsageAttribute.Access Property\u0000html/P_Microsoft_ClearScript_ScriptUsageAttribute_Access.htm\u000098","V8FastArg.IsUndefined Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_V8FastArg_IsUndefined.htm\u000099","DocumentSettings.FileNameExtensions Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_FileNameExtensions.htm\u0000122","ScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_FileNameExtension.htm\u0000112","HostSettings.AuxiliarySearchPath Property\u0000html/P_Microsoft_ClearScript_HostSettings_AuxiliarySearchPath.htm\u0000152","ScriptMemberAttribute.Flags Property\u0000html/P_Microsoft_ClearScript_ScriptMemberAttribute_Flags.htm\u0000114","DocumentInfo.Flags Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_Flags.htm\u0000133","IV8FastHostObject.Operations Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObject_Operations.htm\u000097","IScriptObject Properties\u0000html/Properties_T_Microsoft_ClearScript_IScriptObject.htm\u000081","ScriptEngine.AllowReflection Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_AllowReflection.htm\u0000201","V8CpuProfile.Node.ScriptName Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_ScriptName.htm\u0000109","V8RuntimeConstraints.MaxExecutableSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxExecutableSize.htm\u0000263","ScriptEngine.DisableTypeRestriction Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DisableTypeRestriction.htm\u0000199","DocumentSettings.LoadCallback Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_LoadCallback.htm\u0000123","IScriptEngine.DisableDynamicBinding Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableDynamicBinding.htm\u0000153","ITypedArray\u0026lt;T\u0026gt; Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm\u0000198","IScriptEngine.EnableNullResultWrapping Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_EnableNullResultWrapping.htm\u0000193","V8CpuProfile.Node.ColumnNumber Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_ColumnNumber.htm\u0000122","IScriptEngine.NullImportValue Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_NullImportValue.htm\u0000163","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.AddPropertyGetter Method\u0000html/Overload_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_AddPropertyGetter.htm\u0000115","WindowsScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm\u0000551","DocumentSettings.Loader Property\u0000html/P_Microsoft_ClearScript_DocumentSettings_Loader.htm\u0000114","ScriptEngine.UndefinedImportValue Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_UndefinedImportValue.htm\u0000192","DocumentInfo.Name Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_Name.htm\u0000126","V8CpuProfile.Node.FunctionName Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_FunctionName.htm\u0000104","V8FastArgs.Count Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_V8FastArgs_Count.htm\u000099","ScriptMemberAttribute.Name Property\u0000html/P_Microsoft_ClearScript_ScriptMemberAttribute_Name.htm\u0000184","V8CpuProfile.RootNode Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_RootNode.htm\u0000109","IJavaScriptObject.Kind Property\u0000html/P_Microsoft_ClearScript_JavaScript_IJavaScriptObject_Kind.htm\u000090","VBScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_Core_VBScriptEngine.htm\u0000540","IScriptObject.PropertyNames Property\u0000html/P_Microsoft_ClearScript_IScriptObject_PropertyNames.htm\u0000120","IScriptEngineException.IsFatal Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_IsFatal.htm\u000096","ModuleCategory Properties\u0000html/Properties_T_Microsoft_ClearScript_JavaScript_ModuleCategory.htm\u000046","HostSettings.CustomAttributeLoader Property\u0000html/P_Microsoft_ClearScript_HostSettings_CustomAttributeLoader.htm\u0000145","ScriptEngine.ContinuationCallback Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_ContinuationCallback.htm\u0000176","IScriptEngine.DisableExtensionMethods Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableExtensionMethods.htm\u0000105","PropertyBag.Values Property\u0000html/P_Microsoft_ClearScript_PropertyBag_Values.htm\u0000149","StringDocument.Contents Property\u0000html/P_Microsoft_ClearScript_StringDocument_Contents.htm\u0000125","ScriptMemberAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptMemberAttribute.htm\u000098","ITypedArray.Length Property\u0000html/P_Microsoft_ClearScript_JavaScript_ITypedArray_Length.htm\u000093","ScriptEngine.DocumentSettings Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DocumentSettings.htm\u0000135","V8FastArg.IsFalsy Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_V8FastArg_IsFalsy.htm\u000099","ScriptObject.Engine Property\u0000html/P_Microsoft_ClearScript_ScriptObject_Engine.htm\u0000107","V8RuntimeHeapInfo.TotalExternalSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalExternalSize.htm\u0000104","V8CpuProfile.Samples Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Samples.htm\u0000143","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.DynamicPropertyIndices Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_DynamicPropertyIndices.htm\u0000153","IScriptEngine.EnforceAnonymousTypeAccess Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_EnforceAnonymousTypeAccess.htm\u0000193","ScriptEngine.FormatCode Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_FormatCode.htm\u0000174","IScriptEngine.Script Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_Script.htm\u0000128","V8RuntimeConstraints.MaxNewSpaceSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxNewSpaceSize.htm\u0000174","ScriptEngine.UseReflectionBindFallback Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_UseReflectionBindFallback.htm\u0000204","V8CpuProfile.Node.HitCount Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitCount.htm\u0000125","NoDefaultScriptAccessAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm\u000068","IArrayBufferView.ArrayBuffer Property\u0000html/P_Microsoft_ClearScript_JavaScript_IArrayBufferView_ArrayBuffer.htm\u000095","ScriptObject.Item(Int32) Property\u0000html/P_Microsoft_ClearScript_ScriptObject_Item.htm\u0000182","V8RuntimeHeapInfo.TotalHeapSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalHeapSize.htm\u0000103","IScriptEngine.ExposeHostObjectStaticMembers Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_ExposeHostObjectStaticMembers.htm\u0000118","IScriptEngineException.Message Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_Message.htm\u000091","DocumentInfo.SourceMapUri Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_SourceMapUri.htm\u0000121","ScriptEngineException.EngineName Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_EngineName.htm\u0000115","IScriptEngine.UndefinedImportValue Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_UndefinedImportValue.htm\u0000169","V8FastHostDynamicObject\u0026lt;TObject\u0026gt;.DynamicPropertyNames Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1_DynamicPropertyNames.htm\u0000155","V8CpuProfile.Sample.Node Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Sample_Node.htm\u0000110","ScriptEngine.Global Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_Global.htm\u0000151","ScriptEngine.EnableAutoHostVariables Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_EnableAutoHostVariables.htm\u0000187","ScriptObject Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptObject.htm\u000081","V8Runtime.FormatCode Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_FormatCode.htm\u0000157","IScriptEngine.DisableFloatNarrowing Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_DisableFloatNarrowing.htm\u0000163","V8RuntimeConstraints.MaxOldSpaceSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxOldSpaceSize.htm\u0000174","HostSettings.UseAssemblyTable Property\u0000html/P_Microsoft_ClearScript_HostSettings_UseAssemblyTable.htm\u0000189","CustomAttributeLoader.Default Property\u0000html/P_Microsoft_ClearScript_CustomAttributeLoader_Default.htm\u0000102","V8FastArg.IsNull Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_V8FastArg_IsNull.htm\u000099","V8ScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_FileNameExtension.htm\u0000134","ScriptUsageAttribute Properties\u0000html/Properties_T_Microsoft_ClearScript_ScriptUsageAttribute.htm\u000061","IScriptEngineException.EngineName Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_EngineName.htm\u000097","ScriptEngine.HostData Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_HostData.htm\u0000138","V8Runtime.HeapSizeSampleInterval Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_HeapSizeSampleInterval.htm\u0000136","ScriptEngine.Current Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_Current.htm\u0000155","IScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_IScriptEngine_FileNameExtension.htm\u000099","V8CpuProfile.Sample.Timestamp Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Sample_Timestamp.htm\u0000128","ModuleCategory.CommonJS Property\u0000html/P_Microsoft_ClearScript_JavaScript_ModuleCategory_CommonJS.htm\u0000105","V8FastArg.IsTruthy Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_V8FastArg_IsTruthy.htm\u000099","V8RuntimeHeapInfo.TotalHeapSizeExecutable Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalHeapSizeExecutable.htm\u0000105","IScriptEngineException.ScriptException Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_ScriptException.htm\u0000108","ScriptEngine.EnableNullResultWrapping Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_EnableNullResultWrapping.htm\u0000216","EventConnection Class\u0000html/T_Microsoft_ClearScript_EventConnection.htm\u0000228","WindowsScriptEngine.HostWindow Property\u0000html/P_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_HostWindow.htm\u0000132","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt;.EnumerateIndexedProperties Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1_EnumerateIndexedProperties.htm\u0000125","ScriptEngine.VoidResultValue Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_VoidResultValue.htm\u0000200","V8ScriptEngine.Global Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_Global.htm\u0000162","V8CpuProfile.Node.HitLines Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLines.htm\u0000152","AsyncDocumentLoadCallback Delegate\u0000html/T_Microsoft_ClearScript_AsyncDocumentLoadCallback.htm\u0000202","V8RuntimeConstraints.MaxYoungSpaceSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxYoungSpaceSize.htm\u0000232","DefaultDocumentLoader.MaxCacheSize Property\u0000html/P_Microsoft_ClearScript_DefaultDocumentLoader_MaxCacheSize.htm\u0000166","WindowsScriptEngine Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine.htm\u0000529","DocumentInfo.Uri Property\u0000html/P_Microsoft_ClearScript_DocumentInfo_Uri.htm\u0000110","ScriptEngineException.ErrorDetails Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_ErrorDetails.htm\u0000118","V8RuntimeHeapInfo.TotalPhysicalSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalPhysicalSize.htm\u0000104","ScriptEngine.Name Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_Name.htm\u0000113","JavaScriptObjectKind Enumeration\u0000html/T_Microsoft_ClearScript_JavaScript_JavaScriptObjectKind.htm\u0000171","ScriptObject.Item(String, Object[]) Property\u0000html/P_Microsoft_ClearScript_ScriptObject_Item_1.htm\u0000262","HostSettings Class\u0000html/T_Microsoft_ClearScript_HostSettings.htm\u0000137","StringDocument.Encoding Property\u0000html/P_Microsoft_ClearScript_StringDocument_Encoding.htm\u0000117","ModuleCategory.Standard Property\u0000html/P_Microsoft_ClearScript_JavaScript_ModuleCategory_Standard.htm\u0000106","V8CpuProfile.StartTimestamp Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_StartTimestamp.htm\u0000128","ScriptEngine.CustomAttributeLoader Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_CustomAttributeLoader.htm\u0000152","IV8FastEnumerator Interface\u0000html/T_Microsoft_ClearScript_V8_FastProxy_IV8FastEnumerator.htm\u0000134","V8FastResult.IsSet Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_V8FastResult_IsSet.htm\u0000109","V8CpuProfile.Node.LineNumber Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_LineNumber.htm\u0000122","V8RuntimeDebuggerEventArgs.Name Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs_Name.htm\u0000104","IHostWindow Properties\u0000html/Properties_T_Microsoft_ClearScript_Windows_IHostWindow.htm\u000043","IScriptEngineException.ScriptExceptionAsObject Property\u0000html/P_Microsoft_ClearScript_IScriptEngineException_ScriptExceptionAsObject.htm\u0000116","WindowsScriptEngine.Script Property\u0000html/P_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Script.htm\u0000155","V8Runtime.HeapSizeViolationPolicy Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_HeapSizeViolationPolicy.htm\u0000123","V8RuntimeHeapInfo.UsedHeapSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_UsedHeapSize.htm\u0000103","EventConnection\u0026lt;T\u0026gt; Class\u0000html/T_Microsoft_ClearScript_EventConnection_1.htm\u0000270","V8RuntimeConstraints.HeapExpansionMultiplier Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_HeapExpansionMultiplier.htm\u0000206","V8ScriptEngine.MaxRuntimeHeapSize Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_MaxRuntimeHeapSize.htm\u0000267","ScriptEngineException.ExecutionStarted Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_ExecutionStarted.htm\u0000119","V8Script Class\u0000html/T_Microsoft_ClearScript_V8_V8Script.htm\u0000257","ScriptEngine.NullExportValue Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_NullExportValue.htm\u0000210","IV8FastHostDynamicProperties Interface\u0000html/T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties.htm\u0000219","ConcurrentPropertyBag Class\u0000html/T_Microsoft_ClearScript_ConcurrentPropertyBag.htm\u0000488","V8CpuProfile.EndTimestamp Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_EndTimestamp.htm\u0000128","DefaultScriptUsageAttribute.Access Property\u0000html/P_Microsoft_ClearScript_DefaultScriptUsageAttribute_Access.htm\u000098","V8Runtime.CpuProfileSampleInterval Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_CpuProfileSampleInterval.htm\u0000146","WindowsScriptEngine.SyncInvoker Property\u0000html/P_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_SyncInvoker.htm\u0000109","V8RuntimeDebuggerEventArgs.Port Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs_Port.htm\u000099","V8CpuProfile.Sample Class\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfile_Sample.htm\u0000230","V8ScriptEngine.MaxRuntimeStackUsage Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_MaxRuntimeStackUsage.htm\u0000197","V8CpuProfile.Node.NodeId Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_NodeId.htm\u0000127","ModuleCategory Class\u0000html/T_Microsoft_ClearScript_JavaScript_ModuleCategory.htm\u0000123","IV8FastHostFunction Interface\u0000html/T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostFunction.htm\u000097","ScriptEngineException.IsFatal Property\u0000html/P_Microsoft_ClearScript_ScriptEngineException_IsFatal.htm\u0000114","V8RuntimeConstraints.MaxArrayBufferAllocation Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeConstraints_MaxArrayBufferAllocation.htm\u0000167","V8Runtime.MaxHeapSize Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_MaxHeapSize.htm\u0000265","ScriptEngine.DefaultAccess Property\u0000html/P_Microsoft_ClearScript_ScriptEngine_DefaultAccess.htm\u0000201","ScriptInterruptedException.EngineName Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_EngineName.htm\u0000115","V8FastHostMethodOperations\u0026lt;TObject, TMethod\u0026gt; Class\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethodOperations_2.htm\u0000499","StringDocument.Info Property\u0000html/P_Microsoft_ClearScript_StringDocument_Info.htm\u0000108","ScriptInterruptedException Class\u0000html/T_Microsoft_ClearScript_ScriptInterruptedException.htm\u0000679","EventSource Class\u0000html/T_Microsoft_ClearScript_EventSource.htm\u0000221","ContinuationCallback Delegate\u0000html/T_Microsoft_ClearScript_ContinuationCallback.htm\u0000101","V8GlobalFlags Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8GlobalFlags.htm\u0000170","V8ScriptEngine.RuntimeHeapSizeSampleInterval Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_RuntimeHeapSizeSampleInterval.htm\u0000138","V8Runtime.DocumentSettings Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_DocumentSettings.htm\u0000118","V8CpuProfile.Name Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Name.htm\u000097","V8CpuProfile.Node.ScriptId Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_ScriptId.htm\u0000122","StringDocument.StringContents Property\u0000html/P_Microsoft_ClearScript_StringDocument_StringContents.htm\u000099","IArrayBuffer Interface\u0000html/T_Microsoft_ClearScript_JavaScript_IArrayBuffer.htm\u0000642","V8RuntimeHeapInfo.HeapSizeLimit Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_HeapSizeLimit.htm\u0000103","IV8FastHostFunctionOperations Interface\u0000html/T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostFunctionOperations.htm\u0000347","ScriptInterruptedException.ErrorDetails Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_ErrorDetails.htm\u0000118","V8Runtime.MaxStackUsage Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_MaxStackUsage.htm\u0000192","IHostWindow.OwnerHandle Property\u0000html/P_Microsoft_ClearScript_Windows_IHostWindow_OwnerHandle.htm\u0000102","EventSource\u0026lt;T\u0026gt; Class\u0000html/T_Microsoft_ClearScript_EventSource_1.htm\u0000257","V8Runtime.Name Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_Name.htm\u0000101","JScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_Windows_JScriptEngine_FileNameExtension.htm\u0000134","IV8FastHostDynamicProperties.DynamicPropertyIndices Property\u0000html/P_Microsoft_ClearScript_V8_FastProxy_IV8FastHostDynamicProperties_DynamicPropertyIndices.htm\u0000129","ScriptInterruptedException.ExecutionStarted Property\u0000html/P_Microsoft_ClearScript_ScriptInterruptedException_ExecutionStarted.htm\u0000119","V8RuntimeHeapInfo.TotalAvailableSize Property\u0000html/P_Microsoft_ClearScript_V8_V8RuntimeHeapInfo_TotalAvailableSize.htm\u0000104","V8Runtime.EnableInterruptPropagation Property\u0000html/P_Microsoft_ClearScript_V8_V8Runtime_EnableInterruptPropagation.htm\u0000184","NoDefaultScriptAccessAttribute Class\u0000html/T_Microsoft_ClearScript_NoDefaultScriptAccessAttribute.htm\u0000533","V8ScriptEngine.CpuProfileSampleInterval Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_CpuProfileSampleInterval.htm\u0000147","HostTypeCollection Class\u0000html/T_Microsoft_ClearScript_HostTypeCollection.htm\u0000803","V8CpuProfile.Node.BailoutReason Property\u0000html/P_Microsoft_ClearScript_V8_V8CpuProfile_Node_BailoutReason.htm\u0000111","VBScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_Windows_VBScriptEngine_FileNameExtension.htm\u0000132","IV8FastHostMethod Interface\u0000html/T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostMethod.htm\u000097","V8ScriptEngine.RuntimeHeapSizeViolationPolicy Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_RuntimeHeapSizeViolationPolicy.htm\u0000125","V8ScriptEngine.EnableRuntimeInterruptPropagation Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_EnableRuntimeInterruptPropagation.htm\u0000186","V8FastHostMethod\u0026lt;TObject\u0026gt; Class\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethod_1.htm\u0000479","WindowsScriptEngine.Dispatcher Property\u0000html/P_Microsoft_ClearScript_Windows_WindowsScriptEngine_Dispatcher.htm\u0000103","IArrayBufferView Interface\u0000html/T_Microsoft_ClearScript_JavaScript_IArrayBufferView.htm\u0000651","CustomAttributeLoader Class\u0000html/T_Microsoft_ClearScript_CustomAttributeLoader.htm\u0000228","ClearScript Library Reference\u0000html/R_Project_Reference.htm\u0000156","NoScriptAccessAttribute Class\u0000html/T_Microsoft_ClearScript_NoScriptAccessAttribute.htm\u0000585","V8ScriptEngine.Script Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_Script.htm\u0000152","IV8FastHostMethodOperations Interface\u0000html/T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostMethodOperations.htm\u0000347","ImmutableValueAttribute Class\u0000html/T_Microsoft_ClearScript_ImmutableValueAttribute.htm\u0000432","VBScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_VBScriptEngine.htm\u00002352","DefaultDocumentLoader Class\u0000html/T_Microsoft_ClearScript_DefaultDocumentLoader.htm\u0000322","V8ScriptEngine.SuppressExtensionMethodEnumeration Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_SuppressExtensionMethodEnumeration.htm\u0000189","IV8FastHostObject Interface\u0000html/T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObject.htm\u000087","V8Runtime Class\u0000html/T_Microsoft_ClearScript_V8_V8Runtime.htm\u00001394","V8FastHostObjectConfiguration\u0026lt;TObject\u0026gt; Class\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfiguration_1.htm\u0000728","IDataView Interface\u0000html/T_Microsoft_ClearScript_JavaScript_IDataView.htm\u0000729","V8ScriptEngine.SuppressInstanceMethodEnumeration Property\u0000html/P_Microsoft_ClearScript_V8_V8ScriptEngine_SuppressInstanceMethodEnumeration.htm\u0000170","PropertyBag Class\u0000html/T_Microsoft_ClearScript_PropertyBag.htm\u0000612","IV8FastHostObjectOperations Interface\u0000html/T_Microsoft_ClearScript_V8_FastProxy_IV8FastHostObjectOperations.htm\u0000254","DefaultScriptUsageAttribute Class\u0000html/T_Microsoft_ClearScript_DefaultScriptUsageAttribute.htm\u0000487","V8Script.DocumentInfo Property\u0000html/P_Microsoft_ClearScript_V8_V8Script_DocumentInfo.htm\u000098","V8FastHostObjectConfigurator\u0026lt;TObject\u0026gt; Delegate\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectConfigurator_1.htm\u0000165","ExtendedHostFunctions Class\u0000html/T_Microsoft_ClearScript_ExtendedHostFunctions.htm\u00001262","ScriptAccess Enumeration\u0000html/T_Microsoft_ClearScript_ScriptAccess.htm\u0000174","V8ScriptEngine Class\u0000html/T_Microsoft_ClearScript_V8_V8ScriptEngine.htm\u00003268","V8RuntimeConstraints Class\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeConstraints.htm\u0000312","V8Script.Name Property\u0000html/P_Microsoft_ClearScript_V8_V8Script_Name.htm\u0000159","IJavaScriptObject Interface\u0000html/T_Microsoft_ClearScript_JavaScript_IJavaScriptObject.htm\u0000379","V8FastArg Structure\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastArg.htm\u0000729","IPropertyBag Interface\u0000html/T_Microsoft_ClearScript_IPropertyBag.htm\u0000705","Document Class\u0000html/T_Microsoft_ClearScript_Document.htm\u0000249","V8RuntimeDebuggerEventArgs Class\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeDebuggerEventArgs.htm\u0000247","V8Settings.EnableTopLevelAwait Property\u0000html/P_Microsoft_ClearScript_V8_V8Settings_EnableTopLevelAwait.htm\u0000289","Extensions Class\u0000html/T_Microsoft_ClearScript_Extensions.htm\u0000297","V8FastHostObjectOperations\u0026lt;TObject\u0026gt; Class\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostObjectOperations_1.htm\u0000320","IScriptableObject Interface\u0000html/T_Microsoft_ClearScript_IScriptableObject.htm\u000098","DocumentAccessFlags Enumeration\u0000html/T_Microsoft_ClearScript_DocumentAccessFlags.htm\u0000207","V8ScriptEngineFlags Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8ScriptEngineFlags.htm\u0000795","V8RuntimeFlags Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeFlags.htm\u0000160","V8Settings.GlobalFlags Property\u0000html/P_Microsoft_ClearScript_V8_V8Settings_GlobalFlags.htm\u0000142","ITypedArray Interface\u0000html/T_Microsoft_ClearScript_JavaScript_ITypedArray.htm\u0000742","V8Settings Class\u0000html/T_Microsoft_ClearScript_V8_V8Settings.htm\u0000121","V8FastHostObject\u0026lt;TObject\u0026gt; Class\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostObject_1.htm\u0000373","DocumentCategory Class\u0000html/T_Microsoft_ClearScript_DocumentCategory.htm\u0000234","V8RuntimeHeapInfo Class\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeHeapInfo.htm\u0000268","JScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_Windows_Core_JScriptEngine_FileNameExtension.htm\u0000138","V8FastArgs Structure\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastArgs.htm\u0000947","ValueRef Class\u0000html/T_Microsoft_ClearScript_ValueRef.htm\u0000114","V8FastHostPropertyFlags Enumeration\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostPropertyFlags.htm\u0000164","DocumentContextCallback Delegate\u0000html/T_Microsoft_ClearScript_DocumentContextCallback.htm\u0000164","V8RuntimeViolationPolicy Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8RuntimeViolationPolicy.htm\u0000189","ScriptEngine Class\u0000html/T_Microsoft_ClearScript_ScriptEngine.htm\u00001719","VBScriptEngine.FileNameExtension Property\u0000html/P_Microsoft_ClearScript_Windows_Core_VBScriptEngine_FileNameExtension.htm\u0000136","HostFunctions Class\u0000html/T_Microsoft_ClearScript_HostFunctions.htm\u0000932","V8FastHostPropertyGetter\u0026lt;TObject\u0026gt; Delegate\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostPropertyGetter_1.htm\u0000196","DocumentFlags Enumeration\u0000html/T_Microsoft_ClearScript_DocumentFlags.htm\u0000185","ITypedArray\u0026lt;T\u0026gt; Interface\u0000html/T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm\u00001008","ValueRef\u0026lt;T\u0026gt; Class\u0000html/T_Microsoft_ClearScript_ValueRef_1.htm\u0000293","DocumentCategory.Json Property\u0000html/P_Microsoft_ClearScript_DocumentCategory_Json.htm\u0000102","WindowsScriptEngine.Global Property\u0000html/P_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine_Global.htm\u0000165","HostItemFlags Enumeration\u0000html/T_Microsoft_ClearScript_HostItemFlags.htm\u0000220","IScriptEngine Interface\u0000html/T_Microsoft_ClearScript_IScriptEngine.htm\u00001506","V8FastHostDynamicObject\u0026lt;TObject\u0026gt; Class\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostDynamicObject_1.htm\u0000535","V8FastHostPropertySetter\u0026lt;TObject\u0026gt; Delegate\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostPropertySetter_1.htm\u0000188","VoidResult Class\u0000html/T_Microsoft_ClearScript_VoidResult.htm\u0000265","JavaScriptExtensions Class\u0000html/T_Microsoft_ClearScript_JavaScript_JavaScriptExtensions.htm\u0000360","DocumentInfo Structure\u0000html/T_Microsoft_ClearScript_DocumentInfo.htm\u0000292","IScriptEngineException Interface\u0000html/T_Microsoft_ClearScript_IScriptEngineException.htm\u0000226","ScriptEngineException Class\u0000html/T_Microsoft_ClearScript_ScriptEngineException.htm\u0000664","V8FastHostFieldAccessor\u0026lt;TObject, TField\u0026gt; Delegate\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostFieldAccessor_2.htm\u0000185","ISyncInvoker Interface\u0000html/T_Microsoft_ClearScript_Windows_Core_ISyncInvoker.htm\u0000149","ScriptMemberAttribute Class\u0000html/T_Microsoft_ClearScript_ScriptMemberAttribute.htm\u0000613","JavaScriptObjectFlags Enumeration\u0000html/T_Microsoft_ClearScript_JavaScript_JavaScriptObjectFlags.htm\u0000212","DocumentLoadCallback Delegate\u0000html/T_Microsoft_ClearScript_DocumentLoadCallback.htm\u0000134","V8FastResult Structure\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastResult.htm\u0000482","ScriptMemberFlags Enumeration\u0000html/T_Microsoft_ClearScript_ScriptMemberFlags.htm\u0000194","IScriptObject Interface\u0000html/T_Microsoft_ClearScript_IScriptObject.htm\u0000267","V8CacheKind Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8CacheKind.htm\u0000163","V8FastHostFunction Class\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunction.htm\u0000488","DocumentLoader Class\u0000html/T_Microsoft_ClearScript_DocumentLoader.htm\u0000272","V8CacheResult Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8CacheResult.htm\u0000191","V8FastHostFunctionInvoker Delegate\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionInvoker.htm\u0000194","DocumentSettings Class\u0000html/T_Microsoft_ClearScript_DocumentSettings.htm\u0000381","WindowsScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_WindowsScriptEngine.htm\u00002292","V8CpuProfile Class\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfile.htm\u0000262","ScriptObject Class\u0000html/T_Microsoft_ClearScript_ScriptObject.htm\u0000949","V8CpuProfileFlags Enumeration\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfileFlags.htm\u0000112","ScriptUsageAttribute Class\u0000html/T_Microsoft_ClearScript_ScriptUsageAttribute.htm\u0000541","JScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_Core_JScriptEngine.htm\u00002347","V8CpuProfile.Node Class\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfile_Node.htm\u0000333","WindowsScriptEngineFlags Enumeration\u0000html/T_Microsoft_ClearScript_Windows_WindowsScriptEngineFlags.htm\u0000408","V8FastHostFunctionOperations\u0026lt;TFunction\u0026gt; Class\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostFunctionOperations_1.htm\u0000510","DynamicHostObject Class\u0000html/T_Microsoft_ClearScript_DynamicHostObject.htm\u0000776","V8FastHostMethodInvoker\u0026lt;TObject\u0026gt; Delegate\u0000html/T_Microsoft_ClearScript_V8_FastProxy_V8FastHostMethodInvoker_1.htm\u0000228","StringDocument Class\u0000html/T_Microsoft_ClearScript_StringDocument.htm\u0000281","V8CpuProfile.Node.HitLine Structure\u0000html/T_Microsoft_ClearScript_V8_V8CpuProfile_Node_HitLine.htm\u0000239","NullSyncInvoker Class\u0000html/T_Microsoft_ClearScript_Windows_Core_NullSyncInvoker.htm\u0000311","Undefined Class\u0000html/T_Microsoft_ClearScript_Undefined.htm\u0000240","IV8FastAsyncEnumerator Interface\u0000html/T_Microsoft_ClearScript_V8_FastProxy_IV8FastAsyncEnumerator.htm\u0000138","VBScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_Core_VBScriptEngine.htm\u00002326","WindowsScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_Core_WindowsScriptEngine.htm\u00002243","IHostWindow Interface\u0000html/T_Microsoft_ClearScript_Windows_IHostWindow.htm\u0000116","IWindowsScriptObject Interface\u0000html/T_Microsoft_ClearScript_Windows_IWindowsScriptObject.htm\u0000378","JScriptEngine Class\u0000html/T_Microsoft_ClearScript_Windows_JScriptEngine.htm\u00002373","Nothing Class\u0000html/T_Microsoft_ClearScript_Windows_Nothing.htm\u0000264"] \ No newline at end of file diff --git a/docs/Reference/html/E_Microsoft_ClearScript_PropertyBag_PropertyChanged.htm b/docs/Reference/html/E_Microsoft_ClearScript_PropertyBag_PropertyChanged.htm index d6d404ec2..c2456ec2d 100644 --- a/docs/Reference/html/E_Microsoft_ClearScript_PropertyBag_PropertyChanged.htm +++ b/docs/Reference/html/E_Microsoft_ClearScript_PropertyBag_PropertyChanged.htm @@ -1,6 +1,6 @@ PropertyBag.PropertyChanged Event

PropertyBagPropertyChanged Event

Occurs when a property is added or replaced, or when the collection is cleared. -

Namespace: Microsoft.ClearScript
Assembly: ClearScript.Core (in ClearScript.Core.dll) Version: 7.4.5
Syntax
public event PropertyChangedEventHandler PropertyChanged

Namespace: Microsoft.ClearScript
Assembly: ClearScript.Core (in ClearScript.Core.dll) Version: 7.5.0
Syntax
public event PropertyChangedEventHandler PropertyChanged