128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu# 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Copyright (C) 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Copyright (C) 2006 Anders Carlsson <andersca@mac.com> 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Copyright (C) 2006, 2007 Samuel Weinig <sam@webkit.org> 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org> 606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen# Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 7231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> 8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch# Copyright (C) 2010 Google Inc. 9e14391e94c850b8bd03680c23b38978db68687a8John Reck# Copyright (C) Research In Motion Limited 2010. All rights reserved. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# This library is free software; you can redistribute it and/or 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# modify it under the terms of the GNU Library General Public 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# License as published by the Free Software Foundation; either 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# version 2 of the License, or (at your option) any later version. 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# This library is distributed in the hope that it will be useful, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# but WITHOUT ANY WARRANTY; without even the implied warranty of 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Library General Public License for more details. 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# You should have received a copy of the GNU Library General Public License 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# along with this library; see the file COPYING.LIB. If not, write to 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Boston, MA 02110-1301, USA. 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpackage CodeGeneratorObjC; 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Global Variables 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $module = ""; 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $outputDir = ""; 32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockmy $writeDependencies = 0; 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %publicInterfaces = (); 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $newPublicClass = 0; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $interfaceAvailabilityVersion = ""; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $isProtocol = 0; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $noImpl = 0; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy @headerContentHeader = (); 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy @headerContent = (); 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %headerForwardDeclarations = (); 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %headerForwardDeclarationsForProtocols = (); 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy @privateHeaderContentHeader = (); 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy @privateHeaderContent = (); 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %privateHeaderForwardDeclarations = (); 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %privateHeaderForwardDeclarationsForProtocols = (); 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy @internalHeaderContent = (); 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy @implContentHeader = (); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy @implContent = (); 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %implIncludes = (); 54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockmy @depsContent = (); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Hashes 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %protocolTypeHash = ("XPathNSResolver" => 1, "EventListener" => 1, "EventTarget" => 1, "NodeFilter" => 1, 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "SVGLocatable" => 1, "SVGTransformable" => 1, "SVGStylable" => 1, "SVGFilterPrimitiveStandardAttributes" => 1, 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "SVGTests" => 1, "SVGLangSpace" => 1, "SVGExternalResourcesRequired" => 1, "SVGURIReference" => 1, 6028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu "SVGZoomAndPan" => 1, "SVGFitToViewBox" => 1, "SVGAnimatedPathData" => 1, "ElementTimeControl" => 1); 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %nativeObjCTypeHash = ("URL" => 1, "Color" => 1); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# FIXME: this should be replaced with a function that recurses up the tree 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# to find the actual base type. 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %baseTypeHash = ("Object" => 1, "Node" => 1, "NodeList" => 1, "NamedNodeMap" => 1, "DOMImplementation" => 1, 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "Event" => 1, "CSSRule" => 1, "CSSValue" => 1, "StyleSheet" => 1, "MediaList" => 1, 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "Counter" => 1, "Rect" => 1, "RGBColor" => 1, "XPathExpression" => 1, "XPathResult" => 1, 68d0825bca7fe65beaee391d30da42e937db621564Steve Block "NodeIterator" => 1, "TreeWalker" => 1, "AbstractView" => 1, "Blob" => 1, 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "SVGAngle" => 1, "SVGAnimatedAngle" => 1, "SVGAnimatedBoolean" => 1, "SVGAnimatedEnumeration" => 1, 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "SVGAnimatedInteger" => 1, "SVGAnimatedLength" => 1, "SVGAnimatedLengthList" => 1, 7128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu "SVGAnimatedNumber" => 1, "SVGAnimatedNumberList" => 1, 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "SVGAnimatedPreserveAspectRatio" => 1, "SVGAnimatedRect" => 1, "SVGAnimatedString" => 1, 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "SVGAnimatedTransformList" => 1, "SVGLength" => 1, "SVGLengthList" => 1, "SVGMatrix" => 1, 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "SVGNumber" => 1, "SVGNumberList" => 1, "SVGPathSeg" => 1, "SVGPathSegList" => 1, "SVGPoint" => 1, 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "SVGPointList" => 1, "SVGPreserveAspectRatio" => 1, "SVGRect" => 1, "SVGRenderingIntent" => 1, 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "SVGStringList" => 1, "SVGTransform" => 1, "SVGTransformList" => 1, "SVGUnitTypes" => 1); 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Constants 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $buildingForTigerOrEarlier = 1 if $ENV{"MACOSX_DEPLOYMENT_TARGET"} and $ENV{"MACOSX_DEPLOYMENT_TARGET"} <= 10.4; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $buildingForLeopardOrLater = 1 if $ENV{"MACOSX_DEPLOYMENT_TARGET"} and $ENV{"MACOSX_DEPLOYMENT_TARGET"} >= 10.5; 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $exceptionInit = "WebCore::ExceptionCode ec = 0;"; 82e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockmy $jsContextSetter = "WebCore::JSMainThreadNullState state;"; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $exceptionRaiseOnError = "WebCore::raiseOnDOMError(ec);"; 848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianmy $assertMainThread = "{ DOM_ASSERT_MAIN_THREAD(); WebCoreThreadViolationCheckRoundOne(); }"; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy %conflictMethod = ( 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # FIXME: Add C language keywords? 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # FIXME: Add other predefined types like "id"? 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "callWebScriptMethod:withArguments:" => "WebScriptObject", 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "evaluateWebScript:" => "WebScriptObject", 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "removeWebScriptKey:" => "WebScriptObject", 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "setException:" => "WebScriptObject", 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "setWebScriptValueAtIndex:value:" => "WebScriptObject", 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "stringRepresentation" => "WebScriptObject", 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "webScriptValueAtIndex:" => "WebScriptObject", 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "autorelease" => "NSObject", 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "awakeAfterUsingCoder:" => "NSObject", 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "class" => "NSObject", 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "classForCoder" => "NSObject", 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "conformsToProtocol:" => "NSObject", 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "copy" => "NSObject", 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "copyWithZone:" => "NSObject", 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "dealloc" => "NSObject", 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "description" => "NSObject", 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "doesNotRecognizeSelector:" => "NSObject", 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "encodeWithCoder:" => "NSObject", 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "finalize" => "NSObject", 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "forwardInvocation:" => "NSObject", 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "hash" => "NSObject", 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "init" => "NSObject", 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "initWithCoder:" => "NSObject", 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "isEqual:" => "NSObject", 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "isKindOfClass:" => "NSObject", 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "isMemberOfClass:" => "NSObject", 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "isProxy" => "NSObject", 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "methodForSelector:" => "NSObject", 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "methodSignatureForSelector:" => "NSObject", 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "mutableCopy" => "NSObject", 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "mutableCopyWithZone:" => "NSObject", 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "performSelector:" => "NSObject", 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "release" => "NSObject", 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "replacementObjectForCoder:" => "NSObject", 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "respondsToSelector:" => "NSObject", 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "retain" => "NSObject", 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "retainCount" => "NSObject", 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "self" => "NSObject", 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "superclass" => "NSObject", 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "zone" => "NSObject", 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project); 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $fatalError = 0; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian# Default License Templates 1365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianmy $headerLicenseTemplate = << "EOF"; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 1385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Samuel Weinig <sam.weinig\@gmail.com> 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEOF 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianmy $implementationLicenseTemplate = << "EOF"; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This file is part of the WebKit open source project. 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This file has been generated by generate-bindings.pl. DO NOT MODIFY! 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEOF 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Default constructor 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub new 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $object = shift; 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $reference = { }; 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $codeGenerator = shift; 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $outputDir = shift; 200967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch shift; # $outputHeadersDir 201231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block shift; # $useLayerOnTop 202231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block shift; # $preprocessor 203231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block $writeDependencies = shift; 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bless($reference, $object); 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return $reference; 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub finish 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $object = shift; 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub ReadPublicInterfaces 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $class = shift; 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $superClass = shift; 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $defines = shift; 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $isProtocol = shift; 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $found = 0; 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $actualSuperClass; 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project %publicInterfaces = (); 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $fileName = "WebCore/bindings/objc/PublicDOMInterfaces.h"; 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block my $gccLocation = ""; 2275af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if ($ENV{CC}) { 2285af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke $gccLocation = $ENV{CC}; 2295af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke } elsif (($Config::Config{'osname'}) =~ /solaris/i) { 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block $gccLocation = "/usr/sfw/bin/gcc"; 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else { 232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block $gccLocation = "/usr/bin/gcc"; 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block open FILE, "-|", $gccLocation, "-E", "-P", "-x", "objective-c", 2355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian (map { "-D$_" } split(/ +/, $defines)), "-DOBJC_CODE_GENERATION", $fileName or die "Could not open $fileName"; 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @documentContent = <FILE>; 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project close FILE; 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach $line (@documentContent) { 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!$isProtocol && $line =~ /^\s*\@interface\s*$class\s*:\s*(\w+)\s*([A-Z0-9_]*)/) { 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($superClass ne $1) { 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project warn "Public API change. Superclass for \"$class\" differs ($1 != $superClass)"; 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $fatalError = 1; 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $interfaceAvailabilityVersion = $2 if defined $2; 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $found = 1; 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project next; 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif ($isProtocol && $line =~ /^\s*\@protocol $class\s*<[^>]+>\s*([A-Z0-9_]*)/) { 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $interfaceAvailabilityVersion = $1 if defined $1; 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $found = 1; 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project next; 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project last if $found and $line =~ /^\s?\@end\s?$/; 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($found) { 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # trim whitspace 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $line =~ s/^\s+//; 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $line =~ s/\s+$//; 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $availabilityMacro = ""; 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $line =~ s/\s([A-Z0-9_]+)\s*;$/;/; 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $availabilityMacro = $1 if defined $1; 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $publicInterfaces{$line} = $availabilityMacro if length $line; 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # If this class was not found in PublicDOMInterfaces.h then it should be considered as an entirely new public class. 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $newPublicClass = !$found; 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $interfaceAvailabilityVersion = "WEBKIT_VERSION_LATEST" if $newPublicClass; 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 27521939df44de1705786c545cd1bf519d47250322dBen Murdochsub GenerateConditionalString 27621939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 27721939df44de1705786c545cd1bf519d47250322dBen Murdoch my $node = shift; 27821939df44de1705786c545cd1bf519d47250322dBen Murdoch my $conditional = $node->extendedAttributes->{"Conditional"}; 27921939df44de1705786c545cd1bf519d47250322dBen Murdoch if ($conditional) { 28021939df44de1705786c545cd1bf519d47250322dBen Murdoch if ($conditional =~ /&/) { 28121939df44de1705786c545cd1bf519d47250322dBen Murdoch return "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; 28221939df44de1705786c545cd1bf519d47250322dBen Murdoch } elsif ($conditional =~ /\|/) { 28321939df44de1705786c545cd1bf519d47250322dBen Murdoch return "ENABLE(" . join(") || ENABLE(", split(/\|/, $conditional)) . ")"; 28421939df44de1705786c545cd1bf519d47250322dBen Murdoch } else { 28521939df44de1705786c545cd1bf519d47250322dBen Murdoch return "ENABLE(" . $conditional . ")"; 28621939df44de1705786c545cd1bf519d47250322dBen Murdoch } 28721939df44de1705786c545cd1bf519d47250322dBen Murdoch } else { 28821939df44de1705786c545cd1bf519d47250322dBen Murdoch return ""; 28921939df44de1705786c545cd1bf519d47250322dBen Murdoch } 29021939df44de1705786c545cd1bf519d47250322dBen Murdoch} 29121939df44de1705786c545cd1bf519d47250322dBen Murdoch 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Params: 'domClass' struct 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GenerateInterface 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $object = shift; 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $dataNode = shift; 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $defines = shift; 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $fatalError = 0; 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $name = $dataNode->name; 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $className = GetClassName($name); 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $parentClassName = "DOM" . GetParentImplClassName($dataNode); 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $isProtocol = $dataNode->extendedAttributes->{ObjCProtocol}; 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $noImpl = $dataNode->extendedAttributes->{ObjCCustomImplementation} || $isProtocol; 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ReadPublicInterfaces($className, $parentClassName, $defines, $isProtocol); 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Start actual generation.. 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $object->GenerateHeader($dataNode); 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $object->GenerateImplementation($dataNode) unless $noImpl; 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Write changes. 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $object->WriteData("DOM" . $name); 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Check for missing public API 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (keys %publicInterfaces > 0) { 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $missing = join("\n", keys %publicInterfaces); 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project warn "Public API change. There are missing public properties and/or methods from the \"$className\" class.\n$missing\n"; 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $fatalError = 1; 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project die if $fatalError; 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Params: 'idlDocument' struct 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GenerateModule 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $object = shift; 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $dataNode = shift; 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $module = $dataNode->module; 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GetClassName 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $name = $codeGenerator->StripModule(shift); 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # special cases 340231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return "NSString" if $codeGenerator->IsStringType($name) or $name eq "SerializedScriptValue"; 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "NS$name" if IsNativeObjCType($name); 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "BOOL" if $name eq "boolean"; 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "unsigned" if $name eq "unsigned long"; 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "int" if $name eq "long"; 345d0825bca7fe65beaee391d30da42e937db621564Steve Block return "NSTimeInterval" if $name eq "Date"; 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "DOMAbstractView" if $name eq "DOMWindow"; 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return $name if $codeGenerator->IsPrimitiveType($name) or $name eq "DOMImplementation" or $name eq "DOMTimeStamp"; 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Default, assume Objective-C type has the same type name as 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # idl type prefixed with "DOM". 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "DOM$name"; 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GetClassHeaderName 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $name = shift; 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "DOMDOMImplementation" if $name eq "DOMImplementation"; 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return $name; 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GetImplClassName 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $name = $codeGenerator->StripModule(shift); 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "DOMImplementationFront" if $name eq "DOMImplementation"; 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "DOMWindow" if $name eq "AbstractView"; 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return $name; 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GetParentImplClassName 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $dataNode = shift; 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "Object" if @{$dataNode->parents} eq 0; 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $parent = $codeGenerator->StripModule($dataNode->parents(0)); 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # special cases 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "Object" if $parent eq "HTMLCollection"; 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return $parent; 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GetParentAndProtocols 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $dataNode = shift; 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $numParents = @{$dataNode->parents}; 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $parent = ""; 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @protocols = (); 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($numParents eq 0) { 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($isProtocol) { 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@protocols, "NSObject"); 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@protocols, "NSCopying") if $dataNode->name eq "EventTarget"; 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parent = "DOMObject"; 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif ($numParents eq 1) { 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $parentName = $codeGenerator->StripModule($dataNode->parents(0)); 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($isProtocol) { 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project die "Parents of protocols must also be protocols." unless IsProtocolType($parentName); 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@protocols, "DOM" . $parentName); 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (IsProtocolType($parentName)) { 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@protocols, "DOM" . $parentName); 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif ($parentName eq "HTMLCollection") { 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parent = "DOMObject"; 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parent = "DOM" . $parentName; 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @parents = @{$dataNode->parents}; 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $firstParent = $codeGenerator->StripModule(shift(@parents)); 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (IsProtocolType($firstParent)) { 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@protocols, "DOM" . $firstParent); 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!$isProtocol) { 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parent = "DOMObject"; 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parent = "DOM" . $firstParent; 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $parentName (@parents) { 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parentName = $codeGenerator->StripModule($parentName); 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project die "Everything past the first class should be a protocol!" unless IsProtocolType($parentName); 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@protocols, "DOM" . $parentName); 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ($parent, @protocols); 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GetBaseClass 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parent = shift; 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return $parent if $parent eq "Object" or IsBaseType($parent); 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "Event" if $parent eq "UIEvent"; 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "CSSValue" if $parent eq "SVGColor" or $parent eq "CSSValueList"; 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "Node"; 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub IsBaseType 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $type = shift; 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 1 if $baseTypeHash{$type}; 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub IsProtocolType 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $type = shift; 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 1 if $protocolTypeHash{$type}; 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub IsNativeObjCType 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $type = shift; 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 1 if $nativeObjCTypeHash{$type}; 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GetObjCType 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $type = shift; 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $name = GetClassName($type); 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "id <$name>" if IsProtocolType($type); 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return $name if $codeGenerator->IsPrimitiveType($type) or $type eq "DOMTimeStamp"; 47781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return "unsigned short" if $type eq "CompareHow"; 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "$name *"; 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GetPropertyAttributes 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $type = $codeGenerator->StripModule(shift); 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $readOnly = shift; 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @attributes = (); 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@attributes, "readonly") if $readOnly; 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian # FIXME: <rdar://problem/5049934> Consider using 'nonatomic' on the DOM @property declarations. 4915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if ($codeGenerator->IsStringType($type) || IsNativeObjCType($type)) { 4925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@attributes, "copy"); 4936b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } elsif ($codeGenerator->IsSVGAnimatedType($type)) { 4945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@attributes, "retain"); 49581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } elsif (!$codeGenerator->IsStringType($type) && !$codeGenerator->IsPrimitiveType($type) && $type ne "DOMTimeStamp" && $type ne "CompareHow") { 4965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@attributes, "retain"); 4975f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "" unless @attributes > 0; 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "(" . join(", ", @attributes) . ")"; 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiansub ConversionNeeded 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $type = $codeGenerator->StripModule(shift); 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5075f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return !$codeGenerator->IsNonPointerType($type) && !$codeGenerator->IsStringType($type) && !IsNativeObjCType($type); 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GetObjCTypeGetter 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $argName = shift; 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $type = $codeGenerator->StripModule(shift); 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return $argName if $codeGenerator->IsPrimitiveType($type) or $codeGenerator->IsStringType($type) or IsNativeObjCType($type); 5168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return $argName . "Node" if $type eq "EventTarget"; 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "static_cast<WebCore::Range::CompareHow>($argName)" if $type eq "CompareHow"; 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "WTF::getPtr(nativeEventListener)" if $type eq "EventListener"; 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "WTF::getPtr(nativeNodeFilter)" if $type eq "NodeFilter"; 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return "WTF::getPtr(nativeResolver)" if $type eq "XPathNSResolver"; 521231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 522231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if ($type eq "SerializedScriptValue") { 523231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block $implIncludes{"SerializedScriptValue.h"} = 1; 524dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return "WebCore::SerializedScriptValue::create(WTF::String($argName))"; 525231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 5265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return "core($argName)"; 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub AddForwardDeclarationsForType 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $type = $codeGenerator->StripModule(shift); 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $public = shift; 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return if $codeGenerator->IsNonPointerType($type) ; 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $class = GetClassName($type); 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (IsProtocolType($type)) { 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $headerForwardDeclarationsForProtocols{$class} = 1 if $public; 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $privateHeaderForwardDeclarationsForProtocols{$class} = 1 if !$public and !$headerForwardDeclarationsForProtocols{$class}; 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $headerForwardDeclarations{$class} = 1 if $public; 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Private headers include the public header, so only add a forward declaration to the private header 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # if the public header does not already have the same forward declaration. 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $privateHeaderForwardDeclarations{$class} = 1 if !$public and !$headerForwardDeclarations{$class}; 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub AddIncludesForType 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $type = $codeGenerator->StripModule(shift); 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return if $codeGenerator->IsNonPointerType($type); 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (IsNativeObjCType($type)) { 5580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ($type eq "Color") { 5590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch $implIncludes{"ColorMac.h"} = 1; 5600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ($codeGenerator->IsStringType($type)) { 5650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch $implIncludes{"KURL.h"} = 1; 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($type eq "DOMWindow") { 5705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMAbstractViewInternal.h"} = 1; 5715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMWindow.h"} = 1; 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($type eq "DOMImplementation") { 5765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMDOMImplementationInternal.h"} = 1; 5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"DOMImplementationFront.h"} = 1; 5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($type eq "EventTarget") { 5828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian $implIncludes{"Node.h"} = 1; 5835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMEventTarget.h"} = 1; 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 587e14391e94c850b8bd03680c23b38978db68687a8John Reck if ($codeGenerator->IsSVGAnimatedType($type)) { 5886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $implIncludes{"${type}.h"} = 1; 589e14391e94c850b8bd03680c23b38978db68687a8John Reck $implIncludes{"DOM${type}Internal.h"} = 1; 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($type =~ /(\w+)(Abs|Rel)$/) { 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"$1.h"} = 1; 5955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOM${type}Internal.h"} = 1; 5965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return; 5975f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 5985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 5995f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if ($type eq "NodeFilter") { 6005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"NodeFilter.h"} = 1; 6015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"ObjCNodeFilterCondition.h"} = 1; 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if ($type eq "EventListener") { 6065f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"EventListener.h"} = 1; 6075f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"ObjCEventListener.h"} = 1; 6085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return; 6095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 6105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 6115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if ($type eq "XPathNSResolver") { 6125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMCustomXPathNSResolver.h"} = 1; 6135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"XPathNSResolver.h"} = 1; 6145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return; 6155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 617231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if ($type eq "SerializedScriptValue") { 618231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block $implIncludes{"SerializedScriptValue.h"} = 1; 619231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 620231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 621231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # FIXME: won't compile without these 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"CSSMutableStyleDeclaration.h"} = 1 if $type eq "CSSStyleDeclaration"; 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"NameNodeList.h"} = 1 if $type eq "NodeList"; 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Default, include the same named file (the implementation) and the same name prefixed with "DOM". 627e14391e94c850b8bd03680c23b38978db68687a8John Reck $implIncludes{"$type.h"} = 1 if not $codeGenerator->AvoidInclusionOfType($type); 6285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOM${type}Internal.h"} = 1; 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 63128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhusub GetSVGTypeWithNamespace 63228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{ 63328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu my $type = shift; 63428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu my $typeWithNamespace = "WebCore::" . $codeGenerator->GetSVGTypeNeedingTearOff($type); 63528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 63628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu # Special case for DOMSVGNumber 63728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $typeWithNamespace =~ s/</\<WebCore::/ unless $type eq "SVGNumber"; 63828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return $typeWithNamespace; 63928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu} 64028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 641e14391e94c850b8bd03680c23b38978db68687a8John Recksub GetSVGPropertyTypes 642e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 643e14391e94c850b8bd03680c23b38978db68687a8John Reck my $implType = shift; 644e14391e94c850b8bd03680c23b38978db68687a8John Reck 645e14391e94c850b8bd03680c23b38978db68687a8John Reck my $svgPropertyType; 646e14391e94c850b8bd03680c23b38978db68687a8John Reck my $svgListPropertyType; 647e14391e94c850b8bd03680c23b38978db68687a8John Reck my $svgNativeType; 648e14391e94c850b8bd03680c23b38978db68687a8John Reck 649e14391e94c850b8bd03680c23b38978db68687a8John Reck return ($svgPropertyType, $svgListPropertyType, $svgNativeType) if not $implType =~ /SVG/; 650e14391e94c850b8bd03680c23b38978db68687a8John Reck 651e14391e94c850b8bd03680c23b38978db68687a8John Reck $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($implType); 652e14391e94c850b8bd03680c23b38978db68687a8John Reck return ($svgPropertyType, $svgListPropertyType, $svgNativeType) if not $svgNativeType; 653e14391e94c850b8bd03680c23b38978db68687a8John Reck 654e14391e94c850b8bd03680c23b38978db68687a8John Reck # Append space to avoid compilation errors when using PassRefPtr<$svgNativeType> 655e14391e94c850b8bd03680c23b38978db68687a8John Reck $svgNativeType = "WebCore::$svgNativeType "; 65628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $svgNativeType =~ s/</\<WebCore::/ if not $svgNativeType =~ /float/; 657e14391e94c850b8bd03680c23b38978db68687a8John Reck 658e14391e94c850b8bd03680c23b38978db68687a8John Reck my $svgWrappedNativeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implType); 659e14391e94c850b8bd03680c23b38978db68687a8John Reck if ($svgNativeType =~ /SVGPropertyTearOff/) { 66028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if ($svgWrappedNativeType eq "float") { 66128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu # Special case for DOMSVGNumber 66228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $svgPropertyType = $svgWrappedNativeType; 66328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } else { 66428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $svgPropertyType = "WebCore::$svgWrappedNativeType"; 66528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $svgPropertyType =~ s/</\<WebCore::/; 66628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 66728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } elsif ($svgNativeType =~ /SVGListPropertyTearOff/ or $svgNativeType =~ /SVGStaticListPropertyTearOff/) { 668e14391e94c850b8bd03680c23b38978db68687a8John Reck $svgListPropertyType = "WebCore::$svgWrappedNativeType"; 669e14391e94c850b8bd03680c23b38978db68687a8John Reck $svgListPropertyType =~ s/</\<WebCore::/; 6706b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } elsif ($svgNativeType =~ /SVGTransformListPropertyTearOff/) { 6716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $svgListPropertyType = "WebCore::$svgWrappedNativeType"; 6726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $svgListPropertyType =~ s/</\<WebCore::/; 6734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } elsif ($svgNativeType =~ /SVGPathSegListPropertyTearOff/) { 6744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang $svgListPropertyType = "WebCore::$svgWrappedNativeType"; 6754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang $svgListPropertyType =~ s/</\<WebCore::/; 676e14391e94c850b8bd03680c23b38978db68687a8John Reck } 677e14391e94c850b8bd03680c23b38978db68687a8John Reck 678e14391e94c850b8bd03680c23b38978db68687a8John Reck return ($svgPropertyType, $svgListPropertyType, $svgNativeType); 679e14391e94c850b8bd03680c23b38978db68687a8John Reck} 680e14391e94c850b8bd03680c23b38978db68687a8John Reck 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GenerateHeader 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $object = shift; 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $dataNode = shift; 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $interfaceName = $dataNode->name; 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $className = GetClassName($interfaceName); 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $parentName = ""; 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @protocolsToImplement = (); 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ($parentName, @protocolsToImplement) = GetParentAndProtocols($dataNode); 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $numConstants = @{$dataNode->constants}; 6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $numAttributes = @{$dataNode->attributes}; 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $numFunctions = @{$dataNode->functions}; 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Add default header template 6985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian @headerContentHeader = split("\r", $headerLicenseTemplate); 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContentHeader, "\n"); 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - INCLUDES - 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $includedWebKitAvailabilityHeader = 0; 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unless ($isProtocol) { 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $parentHeaderName = GetClassHeaderName($parentName); 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContentHeader, "#import <WebCore/$parentHeaderName.h>\n"); 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $includedWebKitAvailabilityHeader = 1; 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $parentProtocol (@protocolsToImplement) { 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project next if $parentProtocol =~ /^NS/; 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parentProtocol = GetClassHeaderName($parentProtocol); 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContentHeader, "#import <WebCore/$parentProtocol.h>\n"); 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $includedWebKitAvailabilityHeader = 1; 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Special case needed for legacy support of DOMRange 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($interfaceName eq "Range") { 7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContentHeader, "#import <WebCore/DOMCore.h>\n"); 7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContentHeader, "#import <WebCore/DOMDocument.h>\n"); 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContentHeader, "#import <WebCore/DOMRangeException.h>\n"); 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $includedWebKitAvailabilityHeader = 1; 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContentHeader, "#import <JavaScriptCore/WebKitAvailability.h>\n") unless $includedWebKitAvailabilityHeader; 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $interfaceAvailabilityVersionCheck = "#if WEBKIT_VERSION_MAX_ALLOWED >= $interfaceAvailabilityVersion\n\n"; 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContentHeader, "\n"); 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContentHeader, $interfaceAvailabilityVersionCheck) if length $interfaceAvailabilityVersion; 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Add constants. 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($numConstants > 0) { 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @headerConstants = (); 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # FIXME: we need a way to include multiple enums. 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $constant (@{$dataNode->constants}) { 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $constantName = $constant->name; 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $constantValue = $constant->value; 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $output = " DOM_" . $constantName . " = " . $constantValue; 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerConstants, $output); 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $combinedConstants = join(",\n", @headerConstants); 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # FIXME: the formatting of the enums should line up the equal signs. 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # FIXME: enums are unconditionally placed in the public header. 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, "enum {\n"); 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, $combinedConstants); 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, "\n};\n\n"); 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Begin @interface or @protocol 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $interfaceDeclaration = ($isProtocol ? "\@protocol $className" : "\@interface $className : $parentName"); 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $interfaceDeclaration .= " <" . join(", ", @protocolsToImplement) . ">" if @protocolsToImplement > 0; 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $interfaceDeclaration .= "\n"; 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, $interfaceDeclaration); 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @headerAttributes = (); 7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @privateHeaderAttributes = (); 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Add attribute getters/setters. 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($numAttributes > 0) { 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $attribute (@{$dataNode->attributes}) { 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeName = $attribute->signature->name; 7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if ($attributeName eq "id" or $attributeName eq "hash" or $attributeName eq "description") { 769545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch # Special case some attributes (like id and hash) to have a "Name" suffix to avoid ObjC naming conflicts. 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $attributeName .= "Name"; 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif ($attributeName eq "frame") { 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Special case attribute frame to be frameBorders. 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $attributeName .= "Borders"; 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeType = GetObjCType($attribute->signature->type); 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeIsReadonly = ($attribute->type =~ /^readonly/); 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $property = "\@property" . GetPropertyAttributes($attribute->signature->type, $attributeIsReadonly); 780cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block # Some SVGFE*Element.idl use 'operator' as attribute name, rewrite as '_operator' to avoid clashes with C/C++ 781cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block $attributeName =~ s/operator/_operator/ if ($attributeName =~ /operator/); 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $property .= " " . $attributeType . ($attributeType =~ /\*$/ ? "" : " ") . $attributeName; 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $publicInterfaceKey = $property . ";"; 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $availabilityMacro = ""; 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (defined $publicInterfaces{$publicInterfaceKey} and length $publicInterfaces{$publicInterfaceKey}) { 7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $availabilityMacro = $publicInterfaces{$publicInterfaceKey}; 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $availabilityMacro = "WEBKIT_OBJC_METHOD_ANNOTATION($availabilityMacro)" if length $availabilityMacro and $buildingForTigerOrEarlier; 7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $declarationSuffix = ";\n"; 7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $declarationSuffix = " $availabilityMacro;\n" if length $availabilityMacro; 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $public = (defined $publicInterfaces{$publicInterfaceKey} or $newPublicClass); 7978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete $publicInterfaces{$publicInterfaceKey}; 7988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AddForwardDeclarationsForType($attribute->signature->type, $public); 8008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $setterName = "set" . ucfirst($attributeName) . ":"; 8028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $conflict = $conflictMethod{$attributeName}; 8048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($conflict) { 8058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project warn "$className conflicts with $conflict method $attributeName\n"; 8068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $fatalError = 1; 8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $conflict = $conflictMethod{$setterName}; 8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($conflict) { 8118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project warn "$className conflicts with $conflict method $setterName\n"; 8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $fatalError = 1; 8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($buildingForLeopardOrLater) { 8168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $property .= $declarationSuffix; 8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerAttributes, $property) if $public; 8188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderAttributes, $property) unless $public; 8198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 82006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen my $attributeConditionalString = GenerateConditionalString($attribute->signature); 82106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if ($attributeConditionalString) { 82206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@headerAttributes, "#if ${attributeConditionalString}\n") if $public; 82306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@privateHeaderAttributes, "#if ${attributeConditionalString}\n") unless $public; 82406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 82506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - GETTER 8278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $getter = "- (" . $attributeType . ")" . $attributeName . $declarationSuffix; 8288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerAttributes, $getter) if $public; 8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderAttributes, $getter) unless $public; 8308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - SETTER 8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!$attributeIsReadonly) { 8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $setter = "- (void)$setterName(" . $attributeType . ")new" . ucfirst($attributeName) . $declarationSuffix; 8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerAttributes, $setter) if $public; 8358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderAttributes, $setter) unless $public; 8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 83706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 83806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if ($attributeConditionalString) { 83906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@headerAttributes, "#endif\n") if $public; 84006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@privateHeaderAttributes, "#endif\n") unless $public; 84106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 8428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, @headerAttributes) if @headerAttributes > 0; 8468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @headerFunctions = (); 8498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @privateHeaderFunctions = (); 8508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @deprecatedHeaderFunctions = (); 8518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Add functions. 8538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($numFunctions > 0) { 8548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $function (@{$dataNode->functions}) { 8558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $functionName = $function->signature->name; 8568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $returnType = GetObjCType($function->signature->type); 8588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $needsDeprecatedVersion = (@{$function->parameters} > 1 and $function->signature->extendedAttributes->{"OldStyleObjC"}); 8598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $numberOfParameters = @{$function->parameters}; 8608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my %typesToForwardDeclare = ($function->signature->type => 1); 8618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $parameterIndex = 0; 8638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $functionSig = "- ($returnType)$functionName"; 8648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $methodName = $functionName; 8658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $param (@{$function->parameters}) { 8668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramName = $param->name; 8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramType = GetObjCType($param->type); 8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $typesToForwardDeclare{$param->type} = 1; 8708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($parameterIndex >= 1) { 8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramPrefix = $param->extendedAttributes->{"ObjCPrefix"}; 8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $paramPrefix = $paramName unless defined($paramPrefix); 8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $functionSig .= " $paramPrefix"; 8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $methodName .= $paramPrefix; 8768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $functionSig .= ":($paramType)$paramName"; 8798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $methodName .= ":"; 8808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parameterIndex++; 8828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $publicInterfaceKey = $functionSig . ";"; 8858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $conflict = $conflictMethod{$methodName}; 8878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($conflict) { 8888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project warn "$className conflicts with $conflict method $methodName\n"; 8898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $fatalError = 1; 8908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($isProtocol && !$newPublicClass && !defined $publicInterfaces{$publicInterfaceKey}) { 8938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project warn "Protocol method $publicInterfaceKey is not in PublicDOMInterfaces.h. Protocols require all methods to be public"; 8948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $fatalError = 1; 8958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $availabilityMacro = ""; 8988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (defined $publicInterfaces{$publicInterfaceKey} and length $publicInterfaces{$publicInterfaceKey}) { 8998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $availabilityMacro = $publicInterfaces{$publicInterfaceKey}; 9008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $availabilityMacro = "WEBKIT_OBJC_METHOD_ANNOTATION($availabilityMacro)" if length $availabilityMacro and $buildingForTigerOrEarlier; 9038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $functionDeclaration = $functionSig; 9058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $functionDeclaration .= " " . $availabilityMacro if length $availabilityMacro; 9068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $functionDeclaration .= ";\n"; 9078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $public = (defined $publicInterfaces{$publicInterfaceKey} or $newPublicClass); 9098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete $publicInterfaces{$publicInterfaceKey}; 9108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $type (keys %typesToForwardDeclare) { 9128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # add any forward declarations to the public header if a deprecated version will be generated 9138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AddForwardDeclarationsForType($type, 1) if $needsDeprecatedVersion; 9148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AddForwardDeclarationsForType($type, $public) unless $public and $needsDeprecatedVersion; 9158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerFunctions, $functionDeclaration) if $public; 9188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderFunctions, $functionDeclaration) unless $public; 9198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # generate the old style method names with un-named parameters, these methods are deprecated 9218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($needsDeprecatedVersion) { 9228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $deprecatedFunctionSig = $functionSig; 9238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $deprecatedFunctionSig =~ s/\s\w+:/ :/g; # remove parameter names 9248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $publicInterfaceKey = $deprecatedFunctionSig . ";"; 9268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $availabilityMacro = "AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_3_0"; 9288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (defined $publicInterfaces{$publicInterfaceKey} and length $publicInterfaces{$publicInterfaceKey}) { 9298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $availabilityMacro = $publicInterfaces{$publicInterfaceKey}; 9308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $availabilityMacro = "WEBKIT_OBJC_METHOD_ANNOTATION($availabilityMacro)" if $buildingForTigerOrEarlier; 9338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $functionDeclaration = "$deprecatedFunctionSig $availabilityMacro;\n"; 9358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@deprecatedHeaderFunctions, $functionDeclaration); 9378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unless (defined $publicInterfaces{$publicInterfaceKey}) { 9398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project warn "Deprecated method $publicInterfaceKey is not in PublicDOMInterfaces.h. All deprecated methods need to be public, or should have the OldStyleObjC IDL attribute removed"; 9408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $fatalError = 1; 9418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete $publicInterfaces{$publicInterfaceKey}; 9448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (@headerFunctions > 0) { 9488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, "\n") if $buildingForLeopardOrLater and @headerAttributes > 0; 9498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, @headerFunctions); 9508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (@deprecatedHeaderFunctions > 0 && $isProtocol) { 9548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, @deprecatedHeaderFunctions); 9558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - End @interface or @protocol 9588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, "\@end\n"); 9598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (@deprecatedHeaderFunctions > 0 && !$isProtocol) { 9618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Deprecated category @interface 9628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, "\n\@interface $className (" . $className . "Deprecated)\n"); 9638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, @deprecatedHeaderFunctions); 9648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, "\@end\n"); 9658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@headerContent, "\n#endif\n") if length $interfaceAvailabilityVersion; 9688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my %alwaysGenerateForNoSVGBuild = map { $_ => 1 } qw(DOMHTMLEmbedElement DOMHTMLObjectElement); 9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (@privateHeaderAttributes > 0 or @privateHeaderFunctions > 0 or exists $alwaysGenerateForNoSVGBuild{$className}) { 9728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Private category @interface 9735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian @privateHeaderContentHeader = split("\r", $headerLicenseTemplate); 9748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderContentHeader, "\n"); 9758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $classHeaderName = GetClassHeaderName($className); 9778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderContentHeader, "#import <WebCore/$classHeaderName.h>\n\n"); 9788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderContentHeader, $interfaceAvailabilityVersionCheck) if length $interfaceAvailabilityVersion; 9798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @privateHeaderContent = (); 9818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderContent, "\@interface $className (" . $className . "Private)\n"); 9828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderContent, @privateHeaderAttributes) if @privateHeaderAttributes > 0; 9838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderContent, "\n") if $buildingForLeopardOrLater and @privateHeaderAttributes > 0 and @privateHeaderFunctions > 0; 9848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderContent, @privateHeaderFunctions) if @privateHeaderFunctions > 0; 9858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderContent, "\@end\n"); 9868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@privateHeaderContent, "\n#endif\n") if length $interfaceAvailabilityVersion; 9888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unless ($isProtocol) { 9918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Generate internal interfaces 992e14391e94c850b8bd03680c23b38978db68687a8John Reck my $implClassName = GetImplClassName($interfaceName); 993e14391e94c850b8bd03680c23b38978db68687a8John Reck my $implClassNameWithNamespace = "WebCore::" . $implClassName; 994e14391e94c850b8bd03680c23b38978db68687a8John Reck 995e14391e94c850b8bd03680c23b38978db68687a8John Reck my $implType = $implClassNameWithNamespace; 996e14391e94c850b8bd03680c23b38978db68687a8John Reck my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implClassName); 997e14391e94c850b8bd03680c23b38978db68687a8John Reck $implType = $svgNativeType if $svgNativeType; 9988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Generate interface definitions. 10005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian @internalHeaderContent = split("\r", $implementationLicenseTemplate); 10018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@internalHeaderContent, "\n#import <WebCore/$className.h>\n\n"); 1003e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@internalHeaderContent, "#import <WebCore/SVGAnimatedPropertyTearOff.h>\n\n") if $svgPropertyType; 10046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($svgListPropertyType) { 10056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@internalHeaderContent, "#import <WebCore/SVGAnimatedListPropertyTearOff.h>\n\n"); 10066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@internalHeaderContent, "#import <WebCore/SVGTransformListPropertyTearOff.h>\n\n") if $svgListPropertyType =~ /SVGTransformList/; 10074576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@internalHeaderContent, "#import <WebCore/SVGPathSegListPropertyTearOff.h>\n\n") if $svgListPropertyType =~ /SVGPathSegList/; 10086b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 10098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@internalHeaderContent, $interfaceAvailabilityVersionCheck) if length $interfaceAvailabilityVersion; 10108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if ($interfaceName eq "Node") { 10128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@internalHeaderContent, "\@protocol DOMEventTarget;\n\n"); 10138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian my $startedNamespace = 0; 10165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 10176b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($codeGenerator->IsSVGAnimatedType($interfaceName)) { 1018e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@internalHeaderContent, "#import <WebCore/$implClassName.h>\n\n"); 10198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 10205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@internalHeaderContent, "namespace WebCore {\n"); 10215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $startedNamespace = 1; 10226b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($interfaceName eq "Node") { 10235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@internalHeaderContent, " class EventTarget;\n class Node;\n"); 10245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } else { 10255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@internalHeaderContent, " class $implClassName;\n"); 10265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 10275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@internalHeaderContent, "}\n\n"); 10285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 10295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 10306b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@internalHeaderContent, "$implType* core($className *);\n"); 10316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@internalHeaderContent, "$className *kit($implType*);\n"); 10328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if ($dataNode->extendedAttributes->{Polymorphic}) { 1034e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@internalHeaderContent, "Class kitClass($implType*);\n"); 10355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 10368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if ($interfaceName eq "Node") { 10385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@internalHeaderContent, "id <DOMEventTarget> kit(WebCore::EventTarget*);\n"); 10398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@internalHeaderContent, "\n#endif\n") if length $interfaceAvailabilityVersion; 10428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub GenerateImplementation 10468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $object = shift; 10488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $dataNode = shift; 10498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1050231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block my @ancestorInterfaceNames = (); 1051231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 10528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (@{$dataNode->parents} > 1) { 1053231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block $codeGenerator->AddMethodsConstantsAndAttributesFromParentClasses($dataNode, \@ancestorInterfaceNames); 10548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $interfaceName = $dataNode->name; 10578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $className = GetClassName($interfaceName); 10588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $implClassName = GetImplClassName($interfaceName); 10598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $parentImplClassName = GetParentImplClassName($dataNode); 10608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $implClassNameWithNamespace = "WebCore::" . $implClassName; 10618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $baseClass = GetBaseClass($parentImplClassName); 10628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $classHeaderName = GetClassHeaderName($className); 10638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $numAttributes = @{$dataNode->attributes}; 10658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $numFunctions = @{$dataNode->functions}; 1066e14391e94c850b8bd03680c23b38978db68687a8John Reck my $implType = $implClassNameWithNamespace; 1067e14391e94c850b8bd03680c23b38978db68687a8John Reck 1068e14391e94c850b8bd03680c23b38978db68687a8John Reck my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implClassName); 1069e14391e94c850b8bd03680c23b38978db68687a8John Reck $implType = $svgNativeType if $svgNativeType; 10708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Add default header template. 10725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian @implContentHeader = split("\r", $implementationLicenseTemplate); 10738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - INCLUDES - 10758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContentHeader, "\n#import \"config.h\"\n"); 10768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 107721939df44de1705786c545cd1bf519d47250322dBen Murdoch my $conditionalString = GenerateConditionalString($dataNode); 107821939df44de1705786c545cd1bf519d47250322dBen Murdoch push(@implContentHeader, "\n#if ${conditionalString}\n\n") if $conditionalString; 10798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContentHeader, "#import \"DOMInternal.h\"\n\n"); 10815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContentHeader, "#import \"$classHeaderName.h\"\n\n"); 10825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 10835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"ExceptionHandlers.h"} = 1; 10845f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"ThreadCheck.h"} = 1; 1085e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block $implIncludes{"JSMainThreadExecState.h"} = 1; 10865f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"WebScriptObjectPrivate.h"} = 1; 10875f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{$classHeaderName . "Internal.h"} = 1; 10885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 10895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian # FIXME: These includes are only needed when the class is a subclass of one of these polymorphic classes. 1090d0825bca7fe65beaee391d30da42e937db621564Steve Block $implIncludes{"DOMBlobInternal.h"} = 1; 10915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMCSSRuleInternal.h"} = 1; 10925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMCSSValueInternal.h"} = 1; 10935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMEventInternal.h"} = 1; 10945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMNodeInternal.h"} = 1; 10955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMStyleSheetInternal.h"} = 1; 10968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10975f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"DOMSVGPathSegInternal.h"} = 1 if $interfaceName =~ /^SVGPathSeg.+/; 10988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($interfaceName =~ /(\w+)(Abs|Rel)$/) { 11008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"$1.h"} = 1; 11018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 11026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!$codeGenerator->AvoidInclusionOfType($implClassName)) { 11036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $implIncludes{"$implClassName.h"} = 1 ; 11046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName)) { 11056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner my $includeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName); 11066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $implIncludes{"${includeType}.h"} = 1; 11078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @implContent = (); 11118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, "#import <wtf/GetPtr.h>\n\n"); 11135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 11148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # add implementation accessor 11156b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($parentImplClassName eq "Object") { 1116e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@implContent, "#define IMPL reinterpret_cast<$implType*>(_internal)\n\n"); 11178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 11188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $baseClassWithNamespace = "WebCore::$baseClass"; 11198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "#define IMPL static_cast<$implClassNameWithNamespace*>(reinterpret_cast<$baseClassWithNamespace*>(_internal))\n\n"); 11208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # START implementation 11238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "\@implementation $className\n\n"); 11248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Only generate 'dealloc' and 'finalize' methods for direct subclasses of DOMObject. 11268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($parentImplClassName eq "Object") { 11270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch $implIncludes{"WebCoreObjCExtras.h"} = 1; 11288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "- (void)dealloc\n"); 11298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "{\n"); 11300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch push(@implContent, " if (WebCoreObjCScheduleDeallocateOnMainThread([$className class], self))\n"); 11310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch push(@implContent, " return;\n"); 11320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch push(@implContent, "\n"); 11338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($interfaceName eq "NodeIterator") { 11348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " if (_internal) {\n"); 11358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " [self detach];\n"); 11368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " IMPL->deref();\n"); 11378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " };\n"); 11388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 11398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " if (_internal)\n"); 11408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " IMPL->deref();\n"); 11418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " [super dealloc];\n"); 11438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "}\n\n"); 11448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "- (void)finalize\n"); 11468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "{\n"); 11478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($interfaceName eq "NodeIterator") { 11488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " if (_internal) {\n"); 11498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " [self detach];\n"); 11508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " IMPL->deref();\n"); 11518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " };\n"); 11528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 11538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " if (_internal)\n"); 11548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " IMPL->deref();\n"); 11558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " [super finalize];\n"); 11578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "}\n\n"); 11588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project %attributeNames = (); 11628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Attributes 11648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($numAttributes > 0) { 11658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $attribute (@{$dataNode->attributes}) { 11668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AddIncludesForType($attribute->signature->type); 11678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $idlType = $codeGenerator->StripModule($attribute->signature->type); 11698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeName = $attribute->signature->name; 11718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeType = GetObjCType($attribute->signature->type); 11728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeIsReadonly = ($attribute->type =~ /^readonly/); 11738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeClassName = GetClassName($attribute->signature->type); 11748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeInterfaceName = $attributeName; 1176545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if ($attributeName eq "id" or $attributeName eq "hash" or $attributeName eq "description") { 1177545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch # Special case some attributes (like id and hash) to have a "Name" suffix to avoid ObjC naming conflicts. 11788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $attributeInterfaceName .= "Name"; 11798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif ($attributeName eq "frame") { 11808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Special case attribute frame to be frameBorders. 11818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $attributeInterfaceName .= "Borders"; 118206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } elsif ($attributeName eq "operator") { 118306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen # Avoid clash with C++ keyword. 118406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen $attributeInterfaceName = "_operator"; 11858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $attributeNames{$attributeInterfaceName} = 1; 11888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - GETTER 11908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $getterSig = "- ($attributeType)$attributeInterfaceName\n"; 1191cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 119206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen my $getterExpressionPrefix = $codeGenerator->GetterExpressionPrefix(\%implIncludes, $interfaceName, $attribute); 119306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 119406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen # FIXME: Special case attribute ownerDocument to call document. This makes it return the 119506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen # document when called on the document itself. Legacy behavior, see <https://bugs.webkit.org/show_bug.cgi?id=10889>. 119606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen $getterExpressionPrefix =~ s/\bownerDocument\b/document/; 1197cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 11988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $hasGetterException = @{$attribute->getterExceptions}; 119906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen my $getterContentHead = "IMPL->$getterExpressionPrefix"; 12008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $getterContentTail = ")"; 12018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1202e14391e94c850b8bd03680c23b38978db68687a8John Reck if ($svgPropertyType) { 1203e14391e94c850b8bd03680c23b38978db68687a8John Reck $getterContentHead = "$getterExpressionPrefix"; 12048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1205e14391e94c850b8bd03680c23b38978db68687a8John Reck # TODO: Handle special case for DOMSVGLength. We do need Custom code support for this. 1206e14391e94c850b8bd03680c23b38978db68687a8John Reck if ($svgPropertyType eq "WebCore::SVGLength" and $attributeName eq "value") { 120728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getterContentHead = "value(IMPL->contextElement(), "; 1208e14391e94c850b8bd03680c23b38978db68687a8John Reck } 12098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeTypeSansPtr = $attributeType; 12128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $attributeTypeSansPtr =~ s/ \*$//; # Remove trailing " *" from pointer types. 12138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # special case for EventTarget protocol 12158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $attributeTypeSansPtr = "DOMNode" if $idlType eq "EventTarget"; 12168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Special cases 12188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @customGetterContent = (); 12198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($attributeTypeSansPtr eq "DOMImplementation") { 12208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # FIXME: We have to special case DOMImplementation until DOMImplementationFront is removed 12215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $getterContentHead = "kit(implementationFront(IMPL"; 12225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $getterContentTail .= ")"; 12238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif ($attributeName =~ /(\w+)DisplayString$/) { 12248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $attributeToDisplay = $1; 12255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $getterContentHead = "WebCore::displayString(IMPL->$attributeToDisplay(), core(self)"; 12265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $implIncludes{"HitTestResult.h"} = 1; 12278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif ($attributeName =~ /^absolute(\w+)URL$/) { 12288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $typeOfURL = $1; 12298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $getterContentHead = "[self _getURLAttribute:"; 12308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($typeOfURL eq "Link") { 12318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $getterContentTail = "\@\"href\"]"; 12328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif ($typeOfURL eq "Image") { 12338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($interfaceName eq "HTMLObjectElement") { 12348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $getterContentTail = "\@\"data\"]"; 12358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 12368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $getterContentTail = "\@\"src\"]"; 12378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unless ($interfaceName eq "HTMLImageElement") { 12398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@customGetterContent, " if (!IMPL->renderer() || !IMPL->renderer()->isImage())\n"); 12408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@customGetterContent, " return nil;\n"); 12418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"RenderObject.h"} = 1; 12428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"DOMPrivate.h"} = 1; 12458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif ($attribute->signature->extendedAttributes->{"ConvertToString"}) { 1246dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch $getterContentHead = "WTF::String::number(" . $getterContentHead; 12478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $getterContentTail .= ")"; 12486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } elsif ($idlType eq "Date") { 12495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $getterContentHead = "kit($getterContentHead"; 12505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $getterContentTail .= ")"; 1251e14391e94c850b8bd03680c23b38978db68687a8John Reck } elsif ($svgPropertyType) { 125228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu # Special case for DOMSVGNumber 125328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if ($svgPropertyType eq "float") { 125428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu # Intentional leave out closing brace, it's already contained in getterContentTail 125528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getterContentHead = "IMPL->propertyReference("; 125628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } else { 125728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getterContentHead = "IMPL->propertyReference().$getterContentHead"; 125828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 12596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 12606b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($codeGenerator->IsSVGTypeWithWritablePropertiesNeedingTearOff($idlType) and not defined $attribute->signature->extendedAttributes->{"Immutable"}) { 12616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner my $getter = $getterContentHead; 12626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $getter =~ s/\(\)//; 12636b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 12646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner my $tearOffType = GetSVGTypeWithNamespace($idlType); 12656b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner my $selfIsTearOffType = $codeGenerator->IsSVGTypeNeedingTearOff($implClassName); 12666b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($selfIsTearOffType) { 12676b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $implIncludes{"SVGStaticPropertyWithParentTearOff.h"} = 1; 12686b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyWithParentTearOff<$implClassNameWithNamespace, /; 12696b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 12706b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner my $getter = $getterExpressionPrefix; 12716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $getter =~ s/IMPL->//; 12726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $getter =~ s/\(//; 12736b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner my $updateMethod = "&${implClassNameWithNamespace}::update" . $codeGenerator->WK_ucfirst($getter); 12746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 12756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($getterContentHead =~ /matrix/ and $implClassName eq "SVGTransform") { 12766b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner # SVGTransform offers a matrix() method for internal usage that returns an AffineTransform 12776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner # and a svgMatrix() method returning a SVGMatrix, used for the bindings. 12786b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $getterContentHead =~ s/matrix/svgMatrix/; 12796b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 12806b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 12816b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $getterContentHead = "${tearOffType}::create(IMPL, $getterContentHead$getterContentTail, $updateMethod)"; 12826b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 12836b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $getterContentHead = "kit(WTF::getPtr($getterContentHead"; 12846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $getterContentTail = "))"; 12856b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 12866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 12876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } elsif ($codeGenerator->IsSVGAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($idlType)) { 128828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu my $idlTypeWithNamespace = GetSVGTypeWithNamespace($idlType); 1289e14391e94c850b8bd03680c23b38978db68687a8John Reck $getterContentHead = "kit(static_cast<$idlTypeWithNamespace*>($getterContentHead)"; 1290e14391e94c850b8bd03680c23b38978db68687a8John Reck $getterContentTail .= ")"; 12918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif (IsProtocolType($idlType) and $idlType ne "EventTarget") { 12925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $getterContentHead = "kit($getterContentHead"; 12935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $getterContentTail .= ")"; 12940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } elsif ($idlType eq "Color") { 12950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch $getterContentHead = "WebCore::nsColor($getterContentHead"; 12960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch $getterContentTail .= ")"; 1297231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } elsif ($attribute->signature->type eq "SerializedScriptValue") { 1298231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block $getterContentHead = "$getterContentHead"; 1299231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block $getterContentTail .= "->toString()"; 13005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } elsif (ConversionNeeded($attribute->signature->type)) { 130128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu my $type = $attribute->signature->type; 130228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if ($codeGenerator->IsSVGTypeNeedingTearOff($type) and not $implClassName =~ /List$/) { 130328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu my $idlTypeWithNamespace = GetSVGTypeWithNamespace($type); 1304f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch $implIncludes{"$type.h"} = 1 if not $codeGenerator->AvoidInclusionOfType($type); 130528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if ($codeGenerator->IsSVGTypeWithWritablePropertiesNeedingTearOff($type) and not defined $attribute->signature->extendedAttributes->{"Immutable"}) { 130628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $idlTypeWithNamespace =~ s/SVGPropertyTearOff</SVGStaticPropertyTearOff<$implClassNameWithNamespace, /; 130728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $implIncludes{"SVGStaticPropertyTearOff.h"} = 1; 130828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 130928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu my $getter = $getterContentHead; 131028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getter =~ s/IMPL->//; 131128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getter =~ s/\(//; 13126b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner my $updateMethod = "&${implClassNameWithNamespace}::update" . $codeGenerator->WK_ucfirst($getter); 13136b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create(IMPL, $getterContentHead$getterContentTail, $updateMethod"; 131428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getterContentTail .= "))"; 13154576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } elsif ($idlTypeWithNamespace =~ /SVG(Point|PathSeg)List/) { 13164576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang $getterContentHead = "kit(WTF::getPtr($getterContentHead"; 13174576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang $getterContentTail .= "))"; 131828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } elsif ($idlTypeWithNamespace =~ /SVGStaticListPropertyTearOff/) { 131928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu my $extraImp = "WebCore::GetOwnerElementForType<$implClassNameWithNamespace, WebCore::IsDerivedFromSVGElement<$implClassNameWithNamespace>::value>::ownerElement(IMPL), "; 132028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($extraImp$getterContentHead"; 132128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getterContentTail .= ")))"; 132228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } else { 132328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($getterContentHead"; 132428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $getterContentTail .= ")))"; 132528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 1326e14391e94c850b8bd03680c23b38978db68687a8John Reck } else { 1327e14391e94c850b8bd03680c23b38978db68687a8John Reck $getterContentHead = "kit(WTF::getPtr($getterContentHead"; 1328e14391e94c850b8bd03680c23b38978db68687a8John Reck $getterContentTail .= "))"; 1329e14391e94c850b8bd03680c23b38978db68687a8John Reck } 13308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 13318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $getterContent; 13338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($hasGetterException) { 13348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $getterContent = $getterContentHead . "ec" . $getterContentTail; 13358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 13368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $getterContent = $getterContentHead . $getterContentTail; 13378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 13388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 133906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen my $attributeConditionalString = GenerateConditionalString($attribute->signature); 134006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@implContent, "#if ${attributeConditionalString}\n") if $attributeConditionalString; 13418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, $getterSig); 13428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "{\n"); 1343e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block push(@implContent, " $jsContextSetter\n"); 13448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, @customGetterContent); 13458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($hasGetterException) { 13468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Differentiated between when the return type is a pointer and 13478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # not for white space issue (ie. Foo *result vs. int result). 13488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($attributeType =~ /\*$/) { 13498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $getterContent = $attributeType . "result = " . $getterContent; 13508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 13518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $getterContent = $attributeType . " result = " . $getterContent; 13528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 13538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " $exceptionInit\n"); 13558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " $getterContent;\n"); 13568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " $exceptionRaiseOnError\n"); 13578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " return result;\n"); 13588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 13598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " return $getterContent;\n"); 13608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 136106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@implContent, "}\n"); 13628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - SETTER 13648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!$attributeIsReadonly) { 13658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Exception handling 13668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $hasSetterException = @{$attribute->setterExceptions}; 13678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch my $coreSetterName = "set" . $codeGenerator->WK_ucfirst($attributeName); 13698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $setterName = "set" . ucfirst($attributeInterfaceName); 13708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $argName = "new" . ucfirst($attributeInterfaceName); 13718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $arg = GetObjCTypeGetter($argName, $idlType); 13728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 137306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen # The definition of ConvertToString is flipped for the setter 137406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if ($attribute->signature->extendedAttributes->{"ConvertToString"}) { 1375dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch $arg = "WTF::String($arg).toInt()"; 13768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 13778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $setterSig = "- (void)$setterName:($attributeType)$argName\n"; 13798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 138006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@implContent, "\n"); 13818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, $setterSig); 13828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "{\n"); 1383e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block push(@implContent, " $jsContextSetter\n"); 13848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unless ($codeGenerator->IsPrimitiveType($idlType) or $codeGenerator->IsStringType($idlType)) { 13868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " ASSERT($argName);\n\n"); 13878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 13888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1389d0825bca7fe65beaee391d30da42e937db621564Steve Block if ($idlType eq "Date") { 1390d0825bca7fe65beaee391d30da42e937db621564Steve Block $arg = "core(" . $arg . ")"; 1391d0825bca7fe65beaee391d30da42e937db621564Steve Block } 1392d0825bca7fe65beaee391d30da42e937db621564Steve Block 1393e14391e94c850b8bd03680c23b38978db68687a8John Reck if ($svgPropertyType) { 1394e14391e94c850b8bd03680c23b38978db68687a8John Reck $getterContentHead = "$getterExpressionPrefix"; 13954576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@implContent, " if (IMPL->role() == WebCore::AnimValRole) {\n"); 13964576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@implContent, " WebCore::raiseOnDOMError(WebCore::NO_MODIFICATION_ALLOWED_ERR);\n"); 13974576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@implContent, " return;\n"); 13984576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@implContent, " }\n"); 1399e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@implContent, " $svgPropertyType& podImpl = IMPL->propertyReference();\n"); 1400e14391e94c850b8bd03680c23b38978db68687a8John Reck my $ec = $hasSetterException ? ", ec" : ""; 1401e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@implContent, " $exceptionInit\n") if $hasSetterException; 140228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 140328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu # Special case for DOMSVGNumber 140428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if ($svgPropertyType eq "float") { 140528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu push(@implContent, " podImpl = $arg;\n"); 140628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } else { 140728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu # FIXME: Special case for DOMSVGLength. We do need Custom code support for this. 140828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if ($svgPropertyType eq "WebCore::SVGLength" and $attributeName eq "value") { 140928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu push(@implContent, " podImpl.$coreSetterName($arg, IMPL->contextElement()$ec);\n"); 141028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } else { 141128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu push(@implContent, " podImpl.$coreSetterName($arg$ec);\n"); 141228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 141328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 141428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 1415e14391e94c850b8bd03680c23b38978db68687a8John Reck if ($hasSetterException) { 1416e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@implContent, " if (!ec)\n"); 1417e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@implContent, " IMPL->commitChange();\n"); 1418e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@implContent, " $exceptionRaiseOnError\n"); 1419e14391e94c850b8bd03680c23b38978db68687a8John Reck } else { 142028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu push(@implContent, " IMPL->commitChange();\n"); 1421e14391e94c850b8bd03680c23b38978db68687a8John Reck } 1422e14391e94c850b8bd03680c23b38978db68687a8John Reck } elsif ($svgListPropertyType) { 1423e14391e94c850b8bd03680c23b38978db68687a8John Reck $getterContentHead = "$getterExpressionPrefix"; 1424e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@implContent, " IMPL->$coreSetterName($arg);\n"); 14258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 142606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen my $setterExpressionPrefix = $codeGenerator->SetterExpressionPrefix(\%implIncludes, $interfaceName, $attribute); 1427cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block my $ec = $hasSetterException ? ", ec" : ""; 142806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@implContent, " $exceptionInit\n") if $hasSetterException; 142906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@implContent, " IMPL->$setterExpressionPrefix$arg$ec);\n"); 1430cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block push(@implContent, " $exceptionRaiseOnError\n") if $hasSetterException; 14318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 143306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@implContent, "}\n"); 14348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 143506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 143606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@implContent, "#endif\n") if $attributeConditionalString; 143706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen push(@implContent, "\n"); 14388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - Functions 14428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($numFunctions > 0) { 14438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $function (@{$dataNode->functions}) { 14448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AddIncludesForType($function->signature->type); 14458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $functionName = $function->signature->name; 14478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $returnType = GetObjCType($function->signature->type); 14488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $hasParameters = @{$function->parameters}; 14498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $raisesExceptions = @{$function->raisesExceptions}; 14508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @parameterNames = (); 14528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @needsAssert = (); 14538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my %needsCustom = (); 14548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $parameterIndex = 0; 14568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $functionSig = "- ($returnType)$functionName"; 14578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project foreach my $param (@{$function->parameters}) { 14588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramName = $param->name; 14598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramType = GetObjCType($param->type); 14608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # make a new parameter name if the original conflicts with a property name 14628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $paramName = "in" . ucfirst($paramName) if $attributeNames{$paramName}; 14638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AddIncludesForType($param->type); 14658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $idlType = $codeGenerator->StripModule($param->type); 14678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $implGetter = GetObjCTypeGetter($paramName, $idlType); 14688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@parameterNames, $implGetter); 14708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $needsCustom{"XPathNSResolver"} = $paramName if $idlType eq "XPathNSResolver"; 14718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $needsCustom{"NodeFilter"} = $paramName if $idlType eq "NodeFilter"; 14728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $needsCustom{"EventListener"} = $paramName if $idlType eq "EventListener"; 14738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $needsCustom{"EventTarget"} = $paramName if $idlType eq "EventTarget"; 14748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $needsCustom{"NodeToReturn"} = $paramName if $param->extendedAttributes->{"Return"}; 14758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unless ($codeGenerator->IsPrimitiveType($idlType) or $codeGenerator->IsStringType($idlType)) { 14778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@needsAssert, " ASSERT($paramName);\n"); 14788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($parameterIndex >= 1) { 14818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramPrefix = $param->extendedAttributes->{"ObjCPrefix"}; 14828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $paramPrefix = $param->name unless defined($paramPrefix); 14838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $functionSig .= " $paramPrefix"; 14848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $functionSig .= ":($paramType)$paramName"; 14878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $parameterIndex++; 14898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my @functionContent = (); 14928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $caller = "IMPL"; 14938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # special case the XPathNSResolver 14958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (defined $needsCustom{"XPathNSResolver"}) { 14968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramName = $needsCustom{"XPathNSResolver"}; 14978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " WebCore::XPathNSResolver* nativeResolver = 0;\n"); 14988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " RefPtr<WebCore::XPathNSResolver> customResolver;\n"); 14998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " if ($paramName) {\n"); 15008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " if ([$paramName isMemberOfClass:[DOMNativeXPathNSResolver class]])\n"); 15015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@functionContent, " nativeResolver = core(static_cast<DOMNativeXPathNSResolver *>($paramName));\n"); 15028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " else {\n"); 15038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " customResolver = WebCore::DOMCustomXPathNSResolver::create($paramName);\n"); 15048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " nativeResolver = WTF::getPtr(customResolver);\n"); 15058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " }\n"); 15068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " }\n"); 15078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 15088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # special case the EventTarget 15108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (defined $needsCustom{"EventTarget"}) { 15118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramName = $needsCustom{"EventTarget"}; 15128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " DOMNode* ${paramName}ObjC = $paramName;\n"); 15135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@functionContent, " WebCore::Node* ${paramName}Node = core(${paramName}ObjC);\n"); 15148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"DOMNode.h"} = 1; 15158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"Node.h"} = 1; 15168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 15178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($function->signature->extendedAttributes->{"UsesView"}) { 15198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " WebCore::DOMWindow* dv = $caller->defaultView();\n"); 15208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " if (!dv)\n"); 15218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " return nil;\n"); 15228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $implIncludes{"DOMWindow.h"} = 1; 15238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $caller = "dv"; 15248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 15258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # special case the EventListener 15278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (defined $needsCustom{"EventListener"}) { 15288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramName = $needsCustom{"EventListener"}; 15298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " RefPtr<WebCore::EventListener> nativeEventListener = WebCore::ObjCEventListener::wrap($paramName);\n"); 15308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 15318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # special case the NodeFilter 15338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (defined $needsCustom{"NodeFilter"}) { 15348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $paramName = $needsCustom{"NodeFilter"}; 15358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " RefPtr<WebCore::NodeFilter> nativeNodeFilter;\n"); 15368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " if ($paramName)\n"); 15378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " nativeNodeFilter = WebCore::NodeFilter::create(WebCore::ObjCNodeFilterCondition::create($paramName));\n"); 15388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 15398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # FIXME! We need [Custom] support for ObjC, to move these hacks into DOMSVGLength/MatrixCustom.mm 1541e14391e94c850b8bd03680c23b38978db68687a8John Reck my $svgLengthConvertToSpecifiedUnits = ($svgPropertyType and $svgPropertyType eq "WebCore::SVGLength" and $functionName eq "convertToSpecifiedUnits"); 15428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 154328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu push(@parameterNames, "IMPL->contextElement()") if $svgLengthConvertToSpecifiedUnits; 15446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@parameterNames, "ec") if $raisesExceptions; 1545e14391e94c850b8bd03680c23b38978db68687a8John Reck 1546e14391e94c850b8bd03680c23b38978db68687a8John Reck # Handle arguments that are 'SVGProperty' based (SVGAngle/SVGLength). We need to convert from SVGPropertyTearOff<Type>* to Type, 1547e14391e94c850b8bd03680c23b38978db68687a8John Reck # to be able to call the desired WebCore function. If the conversion fails, we can't extract Type and need to raise an exception. 1548e14391e94c850b8bd03680c23b38978db68687a8John Reck my $currentParameter = -1; 1549e14391e94c850b8bd03680c23b38978db68687a8John Reck foreach my $param (@{$function->parameters}) { 1550e14391e94c850b8bd03680c23b38978db68687a8John Reck $currentParameter++; 1551e14391e94c850b8bd03680c23b38978db68687a8John Reck 1552e14391e94c850b8bd03680c23b38978db68687a8John Reck my $paramName = $param->name; 15536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 15546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner # make a new parameter name if the original conflicts with a property name 15556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner $paramName = "in" . ucfirst($paramName) if $attributeNames{$paramName}; 15566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 1557e14391e94c850b8bd03680c23b38978db68687a8John Reck my $idlType = $codeGenerator->StripModule($param->type); 1558e14391e94c850b8bd03680c23b38978db68687a8John Reck next if not $codeGenerator->IsSVGTypeNeedingTearOff($idlType) or $implClassName =~ /List$/; 1559e14391e94c850b8bd03680c23b38978db68687a8John Reck 1560e14391e94c850b8bd03680c23b38978db68687a8John Reck my $implGetter = GetObjCTypeGetter($paramName, $idlType); 156128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu my $idlTypeWithNamespace = GetSVGTypeWithNamespace($idlType); 1562e14391e94c850b8bd03680c23b38978db68687a8John Reck 1563e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@functionContent, " $idlTypeWithNamespace* ${paramName}Core = $implGetter;\n"); 1564e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@functionContent, " if (!${paramName}Core) {\n"); 1565e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@functionContent, " WebCore::ExceptionCode ec = WebCore::TYPE_MISMATCH_ERR;\n"); 1566e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@functionContent, " $exceptionRaiseOnError\n"); 1567e14391e94c850b8bd03680c23b38978db68687a8John Reck if ($returnType eq "void") { 1568e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@functionContent, " return;\n"); 1569e14391e94c850b8bd03680c23b38978db68687a8John Reck } else { 1570e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@functionContent, " return nil;\n"); 1571e14391e94c850b8bd03680c23b38978db68687a8John Reck } 1572e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@functionContent, " }\n"); 1573e14391e94c850b8bd03680c23b38978db68687a8John Reck 1574e14391e94c850b8bd03680c23b38978db68687a8John Reck # Replace the paramter core() getter, by the cached variable. 1575e14391e94c850b8bd03680c23b38978db68687a8John Reck splice(@parameterNames, $currentParameter, 1, "${paramName}Core->propertyReference()"); 1576e14391e94c850b8bd03680c23b38978db68687a8John Reck } 1577e14391e94c850b8bd03680c23b38978db68687a8John Reck 1578e14391e94c850b8bd03680c23b38978db68687a8John Reck my $content = $codeGenerator->WK_lcfirst($functionName) . "(" . join(", ", @parameterNames) . ")"; 1579e14391e94c850b8bd03680c23b38978db68687a8John Reck 1580e14391e94c850b8bd03680c23b38978db68687a8John Reck if ($svgPropertyType) { 15814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@functionContent, " if (IMPL->role() == WebCore::AnimValRole) {\n"); 15824576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@functionContent, " WebCore::raiseOnDOMError(WebCore::NO_MODIFICATION_ALLOWED_ERR);\n"); 15834576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if ($returnType eq "void") { 15844576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@functionContent, " return;\n"); 15854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } else { 15864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@functionContent, " return nil;\n"); 15874576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 15884576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang push(@functionContent, " }\n"); 1589e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@functionContent, " $svgPropertyType& podImpl = IMPL->propertyReference();\n"); 159028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu $content = "podImpl.$content"; 1591e14391e94c850b8bd03680c23b38978db68687a8John Reck } else { 1592e14391e94c850b8bd03680c23b38978db68687a8John Reck $content = $caller . "->$content"; 1593e14391e94c850b8bd03680c23b38978db68687a8John Reck } 15948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15956b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($returnType eq "void") { 15968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Special case 'void' return type. 15978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($raisesExceptions) { 15988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " $exceptionInit\n"); 15998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " $content;\n"); 160028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if ($svgPropertyType) { 160128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu push(@functionContent, " if (!ec)\n"); 160228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu push(@functionContent, " IMPL->commitChange();\n"); 160328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 16048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " $exceptionRaiseOnError\n"); 16058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 16068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " $content;\n"); 16076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@functionContent, " IMPL->commitChange();\n") if $svgPropertyType; 16088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } elsif (defined $needsCustom{"NodeToReturn"}) { 16108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Special case the insertBefore, replaceChild, removeChild 16118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # and appendChild functions from DOMNode 16128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $toReturn = $needsCustom{"NodeToReturn"}; 16138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($raisesExceptions) { 16148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " $exceptionInit\n"); 16158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " if ($content)\n"); 16168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " return $toReturn;\n"); 16178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " $exceptionRaiseOnError\n"); 16188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " return nil;\n"); 16198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 16208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " if ($content)\n"); 16218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " return $toReturn;\n"); 16228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " return nil;\n"); 16238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1624231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } elsif ($returnType eq "SerializedScriptValue") { 1625231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block $content = "foo"; 16268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 16275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (ConversionNeeded($function->signature->type)) { 1628e14391e94c850b8bd03680c23b38978db68687a8John Reck if ($codeGenerator->IsSVGTypeNeedingTearOff($function->signature->type) and not $implClassName =~ /List$/) { 162928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu my $idlTypeWithNamespace = GetSVGTypeWithNamespace($function->signature->type); 1630e14391e94c850b8bd03680c23b38978db68687a8John Reck $content = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($content)))"; 16318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 16325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian $content = "kit(WTF::getPtr($content))"; 16338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($raisesExceptions) { 16378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Differentiated between when the return type is a pointer and 16388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # not for white space issue (ie. Foo *result vs. int result). 16398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ($returnType =~ /\*$/) { 16408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $content = $returnType . "result = " . $content; 16418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 16428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $content = $returnType . " result = " . $content; 16438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " $exceptionInit\n"); 16468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " $content;\n"); 16478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " $exceptionRaiseOnError\n"); 16488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " return result;\n"); 16498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 16508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@functionContent, " return $content;\n"); 16518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "$functionSig\n"); 16558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "{\n"); 1656e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block push(@implContent, " $jsContextSetter\n"); 16578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, @functionContent); 16588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "}\n\n"); 16598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # generate the old style method names with un-named parameters, these methods are deprecated 16618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (@{$function->parameters} > 1 and $function->signature->extendedAttributes->{"OldStyleObjC"}) { 16628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $deprecatedFunctionSig = $functionSig; 16638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $deprecatedFunctionSig =~ s/\s\w+:/ :/g; # remove parameter names 16648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "$deprecatedFunctionSig\n"); 16668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "{\n"); 1667e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block push(@implContent, " $jsContextSetter\n"); 16688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, @functionContent); 16698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "}\n\n"); 16708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Clear the hash 16738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project %needsCustom = (); 16748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # END implementation 16788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, "\@end\n"); 16798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Generate internal interfaces 16816b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@implContent, "\n$implType* core($className *wrapper)\n"); 16826b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@implContent, "{\n"); 16836b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@implContent, " return wrapper ? reinterpret_cast<$implType*>(wrapper->_internal) : 0;\n"); 16846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner push(@implContent, "}\n\n"); 16858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if ($parentImplClassName eq "Object") { 1687e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@implContent, "$className *kit($implType* value)\n"); 16885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, "{\n"); 16895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " $assertMainThread;\n"); 16905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " if (!value)\n"); 16915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " return nil;\n"); 16925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " if ($className *wrapper = getDOMWrapper(value))\n"); 16935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " return [[wrapper retain] autorelease];\n"); 16945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if ($dataNode->extendedAttributes->{Polymorphic}) { 16955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " $className *wrapper = [[kitClass(value) alloc] _init];\n"); 16965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " if (!wrapper)\n"); 16978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project push(@implContent, " return nil;\n"); 16988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 16995f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " $className *wrapper = [[$className alloc] _init];\n"); 17008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 17015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " wrapper->_internal = reinterpret_cast<DOMObjectInternal*>(value);\n"); 17025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " value->ref();\n"); 17035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " addDOMWrapper(wrapper, value);\n"); 17045f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " return [wrapper autorelease];\n"); 17055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, "}\n"); 17065f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } else { 1707e14391e94c850b8bd03680c23b38978db68687a8John Reck push(@implContent, "$className *kit($implType* value)\n"); 17085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, "{\n"); 17095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " $assertMainThread;\n"); 17105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, " return static_cast<$className*>(kit(static_cast<WebCore::$baseClass*>(value)));\n"); 17115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian push(@implContent, "}\n"); 17128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 17138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # - End the ifdef conditional if necessary 171521939df44de1705786c545cd1bf519d47250322dBen Murdoch push(@implContent, "\n#endif // ${conditionalString}\n") if $conditionalString; 1716231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1717231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block # - Generate dependencies. 1718231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if ($writeDependencies && @ancestorInterfaceNames) { 1719231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block push(@depsContent, "$className.h : ", join(" ", map { "$_.idl" } @ancestorInterfaceNames), "\n"); 1720231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block push(@depsContent, map { "$_.idl :\n" } @ancestorInterfaceNames); 1721231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 17228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Internal helper 17258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectsub WriteData 17268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $object = shift; 17288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $name = shift; 17298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Open files for writing... 17318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $headerFileName = "$outputDir/" . $name . ".h"; 17328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $privateHeaderFileName = "$outputDir/" . $name . "Private.h"; 17338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $implFileName = "$outputDir/" . $name . ".mm"; 17348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $internalHeaderFileName = "$outputDir/" . $name . "Internal.h"; 1735231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block my $depsFileName = "$outputDir/" . $name . ".dep"; 17368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Remove old files. 17388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unlink($headerFileName); 17398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unlink($privateHeaderFileName); 17408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unlink($implFileName); 17418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unlink($internalHeaderFileName); 1742231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block unlink($depsFileName); 17438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Write public header. 17458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project open(HEADER, ">$headerFileName") or die "Couldn't open file $headerFileName"; 17468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print HEADER @headerContentHeader; 17488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print HEADER map { "\@class $_;\n" } sort keys(%headerForwardDeclarations); 17498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print HEADER map { "\@protocol $_;\n" } sort keys(%headerForwardDeclarationsForProtocols); 17508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project my $hasForwardDeclarations = keys(%headerForwardDeclarations) + keys(%headerForwardDeclarationsForProtocols); 17528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print HEADER "\n" if $hasForwardDeclarations; 17538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print HEADER @headerContent; 17548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project close(HEADER); 17568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @headerContentHeader = (); 17588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @headerContent = (); 17598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project %headerForwardDeclarations = (); 17608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project %headerForwardDeclarationsForProtocols = (); 17618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (@privateHeaderContent > 0) { 17638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project open(PRIVATE_HEADER, ">$privateHeaderFileName") or die "Couldn't open file $privateHeaderFileName"; 17648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print PRIVATE_HEADER @privateHeaderContentHeader; 17668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print PRIVATE_HEADER map { "\@class $_;\n" } sort keys(%privateHeaderForwardDeclarations); 17678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print PRIVATE_HEADER map { "\@protocol $_;\n" } sort keys(%privateHeaderForwardDeclarationsForProtocols); 17688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project $hasForwardDeclarations = keys(%privateHeaderForwardDeclarations) + keys(%privateHeaderForwardDeclarationsForProtocols); 17708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print PRIVATE_HEADER "\n" if $hasForwardDeclarations; 17718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print PRIVATE_HEADER @privateHeaderContent; 17728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project close(PRIVATE_HEADER); 17748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @privateHeaderContentHeader = (); 17768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @privateHeaderContent = (); 17778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project %privateHeaderForwardDeclarations = (); 17788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project %privateHeaderForwardDeclarationsForProtocols = (); 17798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 17808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project # Write implementation file. 17828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unless ($noImpl) { 17838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project open(IMPL, ">$implFileName") or die "Couldn't open file $implFileName"; 17848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print IMPL @implContentHeader; 17868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print IMPL map { "#import \"$_\"\n" } sort keys(%implIncludes); 17878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print IMPL @implContent; 17888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project close(IMPL); 17908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @implContentHeader = (); 17928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @implContent = (); 17938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project %implIncludes = (); 17948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 17958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (@internalHeaderContent > 0) { 17978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project open(INTERNAL_HEADER, ">$internalHeaderFileName") or die "Couldn't open file $internalHeaderFileName"; 17988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project print INTERNAL_HEADER @internalHeaderContent; 18008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project close(INTERNAL_HEADER); 18028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @internalHeaderContent = (); 18048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1805231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1806231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block # Write dependency file. 1807231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (@depsContent) { 1808231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block open(DEPS, ">$depsFileName") or die "Couldn't open file $depsFileName"; 1809231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block print DEPS @depsContent; 1810231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block close(DEPS); 1811231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block @depsContent = (); 1812231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 18138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project1; 1816