Index: Source/bindings/scripts/CodeGeneratorV8.pm |
diff --git a/Source/bindings/scripts/CodeGeneratorV8.pm b/Source/bindings/scripts/CodeGeneratorV8.pm |
index eb9ed208f4a8519e0f59bf03fcab39082849a149..19e2416949dafbbad4620b7c1c7d16cb3c108441 100644 |
--- a/Source/bindings/scripts/CodeGeneratorV8.pm |
+++ b/Source/bindings/scripts/CodeGeneratorV8.pm |
@@ -3305,9 +3305,6 @@ sub GenerateImplementation |
my $implClassName = GetImplClassName($interface); |
my $v8ClassName = GetV8ClassName($interface); |
my $nativeType = GetNativeTypeForConversions($interface); |
- my $vtableNameGnu = GetGnuVTableNameForInterface($interface); |
- my $vtableRefGnu = GetGnuVTableRefForInterface($interface); |
- my $vtableRefWin = GetWinVTableRefForInterface($interface); |
AddToImplIncludes("bindings/v8/V8Binding.h"); |
AddToImplIncludes("bindings/v8/V8DOMWrapper.h"); |
@@ -3332,43 +3329,6 @@ sub GenerateImplementation |
last; |
} |
- $implementation{includes}->addFooter(<<END) if $vtableNameGnu; |
-#if ENABLE(BINDING_INTEGRITY) |
-#if defined(OS_WIN) |
-#pragma warning(disable: 4483) |
-extern "C" { extern void (*const ${vtableRefWin}[])(); } |
-#else |
-extern "C" { extern void* ${vtableNameGnu}[]; } |
-#endif |
-#endif // ENABLE(BINDING_INTEGRITY) |
-END |
- |
- $implementation{nameSpaceWebCore}->addHeader(<<END) if $vtableNameGnu; |
-#if ENABLE(BINDING_INTEGRITY) |
-// This checks if a DOM object that is about to be wrapped is valid. |
-// Specifically, it checks that a vtable of the DOM object is equal to |
-// a vtable of an expected class. |
-// Due to a dangling pointer, the DOM object you are wrapping might be |
-// already freed or realloced. If freed, the check will fail because |
-// a free list pointer should be stored at the head of the DOM object. |
-// If realloced, the check will fail because the vtable of the DOM object |
-// differs from the expected vtable (unless the same class of DOM object |
-// is realloced on the slot). |
-inline void checkTypeOrDieTrying(${nativeType}* object) |
-{ |
- void* actualVTablePointer = *(reinterpret_cast<void**>(object)); |
-#if defined(OS_WIN) |
- void* expectedVTablePointer = reinterpret_cast<void*>(${vtableRefWin}); |
-#else |
- void* expectedVTablePointer = ${vtableRefGnu}; |
-#endif |
- if (actualVTablePointer != expectedVTablePointer) |
- CRASH(); |
-} |
-#endif // ENABLE(BINDING_INTEGRITY) |
- |
-END |
- |
my $parentClassInfo = $parentClass ? "&${parentClass}::info" : "0"; |
my $WrapperTypePrototype = $interface->isException ? "WrapperTypeErrorPrototype" : "WrapperTypeObjectPrototype"; |
@@ -4220,14 +4180,6 @@ v8::Handle<v8::Object> ${v8ClassName}::createWrapper(${createWrapperArgumentType |
ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty()); |
END |
- my $vtableNameGnu = GetGnuVTableNameForInterface($interface); |
- $code .= <<END if $vtableNameGnu; |
- |
-#if ENABLE(BINDING_INTEGRITY) |
- checkTypeOrDieTrying(impl.get()); |
-#endif |
-END |
- |
$code .= <<END if ($baseType ne $interfaceName); |
ASSERT(static_cast<void*>(static_cast<${baseType}*>(impl.get())) == static_cast<void*>(impl.get())); |
END |
@@ -4292,119 +4244,12 @@ sub GetNativeTypeForConversions |
return $implClassName; |
} |
-# See http://refspecs.linux-foundation.org/cxxabi-1.83.html. |
-sub GetGnuVTableRefForInterface |
-{ |
- my $interface = shift; |
- my $vtableName = GetGnuVTableNameForInterface($interface); |
- if (!$vtableName) { |
- return "0"; |
- } |
- my $typename = GetNativeTypeForConversions($interface); |
- my $offset = GetGnuVTableOffsetForType($typename); |
- return "&" . $vtableName . "[" . $offset . "]"; |
-} |
- |
-sub GetGnuVTableNameForInterface |
-{ |
- my $interface = shift; |
- my $typename = GetNativeTypeForConversions($interface); |
- my $templatePosition = index($typename, "<"); |
- return "" if $templatePosition != -1; |
- return "" if GetImplementationLacksVTableForInterface($interface); |
- return "" if GetV8SkipVTableValidationForInterface($interface); |
- return "_ZTV" . GetGnuMangledNameForInterface($interface); |
-} |
- |
-sub GetGnuMangledNameForInterface |
-{ |
- my $interface = shift; |
- my $typename = GetNativeTypeForConversions($interface); |
- my $templatePosition = index($typename, "<"); |
- if ($templatePosition != -1) { |
- return ""; |
- } |
- my $mangledType = length($typename) . $typename; |
- my $namespace = GetNamespaceForInterface($interface); |
- my $mangledNamespace = "N" . length($namespace) . $namespace; |
- return $mangledNamespace . $mangledType . "E"; |
-} |
- |
-sub GetGnuVTableOffsetForType |
-{ |
- my $typename = shift; |
- if ($typename eq "SVGAElement" |
- || $typename eq "SVGCircleElement" |
- || $typename eq "SVGClipPathElement" |
- || $typename eq "SVGDefsElement" |
- || $typename eq "SVGEllipseElement" |
- || $typename eq "SVGForeignObjectElement" |
- || $typename eq "SVGGElement" |
- || $typename eq "SVGImageElement" |
- || $typename eq "SVGLineElement" |
- || $typename eq "SVGPathElement" |
- || $typename eq "SVGPolyElement" |
- || $typename eq "SVGPolygonElement" |
- || $typename eq "SVGPolylineElement" |
- || $typename eq "SVGRectElement" |
- || $typename eq "SVGSVGElement" |
- || $typename eq "SVGStyledLocatableElement" |
- || $typename eq "SVGStyledTransformableElement" |
- || $typename eq "SVGSwitchElement" |
- || $typename eq "SVGTextElement" |
- || $typename eq "SVGTransformable" |
- || $typename eq "SVGUseElement") { |
- return "3"; |
- } |
- return "2"; |
-} |
- |
-# See http://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B_Name_Mangling. |
-sub GetWinVTableRefForInterface |
-{ |
- my $interface = shift; |
- my $vtableName = GetWinVTableNameForInterface($interface); |
- return 0 if !$vtableName; |
- return "__identifier(\"" . $vtableName . "\")"; |
-} |
- |
-sub GetWinVTableNameForInterface |
-{ |
- my $interface = shift; |
- my $typename = GetNativeTypeForConversions($interface); |
- my $templatePosition = index($typename, "<"); |
- return "" if $templatePosition != -1; |
- return "" if GetImplementationLacksVTableForInterface($interface); |
- return "" if GetV8SkipVTableValidationForInterface($interface); |
- return "??_7" . GetWinMangledNameForInterface($interface) . "6B@"; |
-} |
- |
-sub GetWinMangledNameForInterface |
-{ |
- my $interface = shift; |
- my $typename = GetNativeTypeForConversions($interface); |
- my $namespace = GetNamespaceForInterface($interface); |
- return $typename . "@" . $namespace . "@@"; |
-} |
- |
sub GetNamespaceForInterface |
{ |
my $interface = shift; |
return $interface->extendedAttributes->{"ImplementationNamespace"} || "WebCore"; |
} |
-sub GetImplementationLacksVTableForInterface |
-{ |
- my $interface = shift; |
- return $interface->extendedAttributes->{"ImplementationLacksVTable"}; |
-} |
- |
-sub GetV8SkipVTableValidationForInterface |
-{ |
- my $interface = shift; |
- return $interface->extendedAttributes->{"SkipVTableValidation"}; |
-} |
- |
sub GenerateFunctionCallString |
{ |
my $function = shift; |