[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

loislo at chromium.org loislo at chromium.org
Wed Dec 22 11:17:00 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 52486558854a03d87a6292b1d1bc050243e0e37c
Author: loislo at chromium.org <loislo at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Jul 16 17:16:56 2010 +0000

    2010-07-16  Ilya Tikhonovsky  <loislo at chromium.org>
    
            Reviewed by Yury Semikhatsky.
    
            WebInspector: The current implementation of generator is not ready
            for generation Backend part of Inspector interface. The full patch
            with Backend is quite big and I've split it.
            https://bugs.webkit.org/show_bug.cgi?id=42462
    
            * inspector/CodeGeneratorInspector.pm:
            * inspector/Inspector.idl:
            * inspector/InspectorValues.cpp:
            (WebCore::InspectorArray::get):
            * inspector/InspectorValues.h:
            (WebCore::InspectorArray::length):
    
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@63561 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 4558db6..688ddec 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,19 @@
+2010-07-16  Ilya Tikhonovsky  <loislo at chromium.org>
+
+        Reviewed by Yury Semikhatsky.
+
+        WebInspector: The current implementation of generator is not ready
+        for generation Backend part of Inspector interface. The full patch
+        with Backend is quite big and I've split it.
+        https://bugs.webkit.org/show_bug.cgi?id=42462
+
+        * inspector/CodeGeneratorInspector.pm:
+        * inspector/Inspector.idl:
+        * inspector/InspectorValues.cpp:
+        (WebCore::InspectorArray::get):
+        * inspector/InspectorValues.h:
+        (WebCore::InspectorArray::length):
+
 2010-07-15  Rob Buis  <rwlbuis at gmail.com>
 
         Reviewed by Darin Adler.
diff --git a/WebCore/inspector/CodeGeneratorInspector.pm b/WebCore/inspector/CodeGeneratorInspector.pm
index b20eda1..4dacd90 100644
--- a/WebCore/inspector/CodeGeneratorInspector.pm
+++ b/WebCore/inspector/CodeGeneratorInspector.pm
@@ -6,6 +6,7 @@ package CodeGeneratorInspector;
 
 use strict;
 
+use Class::Struct;
 use File::stat;
 
 my %typeTransform;
@@ -21,56 +22,56 @@ $typeTransform{"Object"} = {
     "retVal" => "PassRefPtr<InspectorObject>",
     "forward" => "InspectorObject",
     "header" => "InspectorValues.h",
-    "push" => "push"
+    "accessorSuffix" => ""
 };
 $typeTransform{"Array"} = {
     "param" => "PassRefPtr<InspectorArray>",
     "retVal" => "PassRefPtr<InspectorArray>",
     "forward" => "InspectorArray",
     "header" => "InspectorValues.h",
-    "push" => "push"
+    "accessorSuffix" => ""
 };
 $typeTransform{"Value"} = {
     "param" => "PassRefPtr<InspectorValue>",
     "retVal" => "PassRefPtr<InspectorValue>",
     "forward" => "InspectorValue",
     "header" => "InspectorValues.h",
-    "push" => "push"
+    "accessorSuffix" => ""
 };
 $typeTransform{"String"} = {
     "param" => "const String&",
     "retVal" => "String",
     "forward" => "String",
     "header" => "PlatformString.h",
-    "push" => "pushString"
+    "accessorSuffix" => "String"
 };
 $typeTransform{"long"} = {
     "param" => "long",
     "retVal" => "long",
     "forward" => "",
     "header" => "",
-    "push" => "pushNumber"
+    "accessorSuffix" => "Number"
 };
 $typeTransform{"int"} = {
     "param" => "int",
     "retVal" => "int",
     "forward" => "",
     "header" => "",
-    "push" => "pushNumber"
+    "accessorSuffix" => "Number",
 };
 $typeTransform{"unsigned long"} = {
     "param" => "unsigned long",
     "retVal" => "unsigned long",
     "forward" => "",
     "header" => "",
-    "push" => "pushNumber"
+    "accessorSuffix" => "Number"
 };
 $typeTransform{"boolean"} = {
     "param" => "bool",
     "retVal"=> "bool",
     "forward" => "",
     "header" => "",
-    "push" => "pushBool"
+    "accessorSuffix" => "Bool"
 };
 $typeTransform{"void"} = {
     "retVal" => "void",
@@ -92,23 +93,17 @@ my $writeDependencies;
 my $verbose;
 
 my $namespace;
-my $frontendClassName;
-my %discoveredTypes;
-my %generatedFunctions;
-
-my @frontendClassDeclaration;
-my @functionDefinitions;
 
-sub typeSpec
-{
-    my $param = shift;
-    my $retValue = shift;
+my $frontendClassName;
+my %frontendTypes;
+my %frontendMethods;
+my @frontendMethodsImpl;
+my $frontendConstructor;
+my $frontendFooter;
 
-    my $type = $typeTransform{$param->type}->{$retValue ? "retVal" : "param"};
-    $discoveredTypes{$param->type} = 1;
-    $type or die "invalid type specification \"" . $param->type ."\"";
-    return $type;
-}
+my $callId = new domSignature(); # it is just structure for describing parameters from IDLStructure.pm.
+$callId->type("long");
+$callId->name("callId");
 
 # Default constructor
 sub new
@@ -145,127 +140,126 @@ sub GenerateInterface
     my $defines = shift;
 
     my $className = $interface->name;
+
     $frontendClassName = "Remote" . $className . "Frontend";
+    $frontendConstructor = "    ${frontendClassName}(InspectorClient* inspectorClient) : m_inspectorClient(inspectorClient) { }";
+    $frontendFooter = "    InspectorClient* m_inspectorClient;";
+    $frontendTypes{"String"} = 1;
+    $frontendTypes{"InspectorClient"} = 1;
+    $frontendTypes{"PassRefPtr"} = 1;
 
-    $discoveredTypes{"String"} = 1;
-    $discoveredTypes{"InspectorClient"} = 1;
-    $discoveredTypes{"PassRefPtr"} = 1;
-
-    push(@frontendClassDeclaration, "class $frontendClassName {");
-    push(@frontendClassDeclaration, "public:");
-    push(@frontendClassDeclaration, "    $frontendClassName(InspectorClient* inspectorClient) : m_inspectorClient(inspectorClient) { }");
-    push(@frontendClassDeclaration, "");
-    push(@frontendClassDeclaration, generateFunctions($interface, $frontendClassName));
-    push(@frontendClassDeclaration, "");
-    push(@frontendClassDeclaration, "private:");
-    push(@frontendClassDeclaration, "    InspectorClient* m_inspectorClient;");
-    push(@frontendClassDeclaration, "};");
+    generateFunctions($interface);
 }
 
 sub generateFunctions
 {
     my $interface = shift;
-    my $className = shift;
 
-    my @functionDeclarations;
     foreach my $function (@{$interface->functions}) {
-        my $functionName;
-        my $argumentsDirectionFilter;
-        my $arguments;
-        my @functionBody;
-        push(@functionBody, "    RefPtr<InspectorArray> arguments = InspectorArray::create();");
-        if ($function->signature->extendedAttributes->{"notify"}) {
-            $functionName = $function->signature->name;
-            $argumentsDirectionFilter = "in";
-            $arguments = "";
-            push(@functionBody, "    arguments->pushString(\"$functionName\");");
-        } else {
-            my $customResponse = $function->signature->extendedAttributes->{"customResponse"};
-            $functionName = $customResponse ? $customResponse : "did" . ucfirst($function->signature->name);
-            $argumentsDirectionFilter = "out";
-            $arguments = "long callId";
-            push(@functionBody, "    arguments->pushString(\"$functionName\");");
-            push(@functionBody, "    arguments->pushNumber(callId);");
-        }
-
-        foreach my $parameter (@{$function->parameters}) {
-            if ($parameter->direction eq $argumentsDirectionFilter) {
-                $parameter->name or die "empty argument name specified for function ${frontendClassName}::$functionName and argument type " . $parameter->type;
-                $arguments = $arguments . ", " if ($arguments);
-                $arguments = $arguments . typeSpec($parameter) . " " . $parameter->name;
-                my $pushFunctionName =  $typeTransform{$parameter->type}->{"push"};
-                push(@functionBody, "    arguments->$pushFunctionName(" . $parameter->name . ");");
-            }
-        }
-        push(@functionBody, "    m_inspectorClient->sendMessageToFrontend(arguments->toJSONString());");
-
-        my $signature = "    " . typeSpec($function->signature, 1) . " $functionName($arguments);";
-        if (!$generatedFunctions{${signature}}) {
-            $generatedFunctions{${signature}} = 1;
-            push(@functionDeclarations, $signature);
-
-            my @function;
-            push(@function, typeSpec($function->signature, 1) . " " . $className . "::" . $functionName . "(" . $arguments . ")");
-            push(@function, "{");
-            push(@function, @functionBody);
-            push(@function, "}");
-            push(@function, "");
-            push(@functionDefinitions, @function);
-        }
+        generateFrontendFunction($function);
     }
-    return @functionDeclarations;
 }
 
-sub generateHeader
+sub generateFrontendFunction
 {
-    my @headerContent = split("\r", $licenseTemplate);
-    push(@headerContent, "#ifndef ${frontendClassName}_h");
-    push(@headerContent, "#define ${frontendClassName}_h");
-    push(@headerContent, "");
-
-    my @forwardHeaders;
-    foreach my $type (keys %discoveredTypes) {
-        push(@forwardHeaders, "#include <" . $typeTransform{$type}->{"forwardHeader"} . ">") if !$typeTransform{$type}->{"forwardHeader"} eq  "";
+    my $function = shift;
+
+    my $functionName;
+    my $notify = $function->signature->extendedAttributes->{"notify"};
+    if ($notify) {
+        $functionName = $function->signature->name;
+    } else {
+        my $customResponse = $function->signature->extendedAttributes->{"customResponse"};
+        $functionName = $customResponse ? $customResponse : "did" . ucfirst($function->signature->name);
     }
-    push(@headerContent, sort @forwardHeaders);
-    push(@headerContent, "");
-    push(@headerContent, "namespace $namespace {");
-    push(@headerContent, "");
-
-    my @forwardDeclarations;
-    foreach my $type (keys %discoveredTypes) {
-        push(@forwardDeclarations, "class " . $typeTransform{$type}->{"forward"} . ";") if !$typeTransform{$type}->{"forward"} eq  "";
+
+    my @argsFiltered = grep($_->direction eq "out", @{$function->parameters}); # just keep only out parameters for frontend interface.
+    unshift(@argsFiltered, $callId) if !$notify; # Add callId as the first argument for all frontend did* methods.
+    map($frontendTypes{$_->type} = 1, @argsFiltered); # register required types.
+    my $arguments = join(", ", map($typeTransform{$_->type}->{"param"} . " " . $_->name, @argsFiltered)); # prepare arguments for function signature.
+    my @pushArguments = map("    arguments->push" . $typeTransform{$_->type}->{"accessorSuffix"} . "(" . $_->name . ");", @argsFiltered);
+
+    my $signature = "    void ${functionName}(${arguments});";
+    if (!$frontendMethods{${signature}}) {
+        $frontendMethods{${signature}} = 1;
+
+        my @function;
+        push(@function, "void ${frontendClassName}::${functionName}(${arguments})");
+        push(@function, "{");
+        push(@function, "    RefPtr<InspectorArray> arguments = InspectorArray::create();");
+        push(@function, "    arguments->pushString(\"$functionName\");");
+        push(@function, @pushArguments);
+        push(@function, "    m_inspectorClient->sendMessageToFrontend(arguments->toJSONString());");
+        push(@function, "}");
+        push(@function, "");
+        push(@frontendMethodsImpl, @function);
     }
-    push(@headerContent, sort @forwardDeclarations);
-
-    push(@headerContent, "");
-    push(@headerContent, @frontendClassDeclaration);
-    push(@headerContent, "");
-    push(@headerContent, "} // namespace $namespace");
-    push(@headerContent, "");
-    push(@headerContent, "#endif // !defined(${frontendClassName}_h)");
-    push(@headerContent, "");
-    return @headerContent;
+}
+
+sub generateHeader
+{
+    my $className = shift;
+    my $types = shift;
+    my $constructor = shift;
+    my $methods = shift;
+    my $footer = shift;
+
+    my $forwardHeaders = join("\n", sort(map("#include <" . $typeTransform{$_}->{"forwardHeader"} . ">", grep($typeTransform{$_}->{"forwardHeader"}, keys %{$types}))));
+    my $forwardDeclarations = join("\n", sort(map("class " . $typeTransform{$_}->{"forward"} . ";", grep($typeTransform{$_}->{"forward"}, keys %{$types}))));
+    my $methodsDeclarations = join("\n", keys %{$methods});
+
+    my $headerBody = << "EOF";
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+#ifndef ${className}_h
+#define ${className}_h
+
+${forwardHeaders}
+
+namespace $namespace {
+
+$forwardDeclarations
+
+class $className {
+public:
+$constructor
+
+$methodsDeclarations
+
+private:
+$footer
+};
+
+} // namespace $namespace
+#endif // !defined(${className}_h)
+
+EOF
+    return $headerBody;
 }
 
 sub generateSource
 {
+    my $className = shift;
+    my $types = shift;
+    my $methods = shift;
+
     my @sourceContent = split("\r", $licenseTemplate);
     push(@sourceContent, "\n#include \"config.h\"");
-    push(@sourceContent, "#include \"$frontendClassName.h\"");
+    push(@sourceContent, "#include \"$className.h\"");
     push(@sourceContent, "");
     push(@sourceContent, "#if ENABLE(INSPECTOR)");
     push(@sourceContent, "");
 
     my %headers;
-    foreach my $type (keys %discoveredTypes) {
+    foreach my $type (keys %{$types}) {
         $headers{"#include \"" . $typeTransform{$type}->{"header"} . "\""} = 1 if !$typeTransform{$type}->{"header"} eq  "";
     }
     push(@sourceContent, sort keys %headers);
     push(@sourceContent, "");
     push(@sourceContent, "namespace $namespace {");
     push(@sourceContent, "");
-    push(@sourceContent, @functionDefinitions);
+    push(@sourceContent, @{$methods});
     push(@sourceContent, "");
     push(@sourceContent, "} // namespace $namespace");
     push(@sourceContent, "");
@@ -279,15 +273,15 @@ sub finish
     my $object = shift;
 
     open(my $SOURCE, ">$outputDir/$frontendClassName.cpp") || die "Couldn't open file $outputDir/$frontendClassName.cpp";
-    open(my $HEADER, ">$outputDir/$frontendClassName.h") || die "Couldn't open file $outputDir/$frontendClassName.h";
-
-    print $SOURCE join("\n", generateSource());
+    print $SOURCE join("\n", generateSource($frontendClassName, \%frontendTypes, \@frontendMethodsImpl));
     close($SOURCE);
     undef($SOURCE);
 
-    print $HEADER join("\n", generateHeader());
+    open(my $HEADER, ">$outputDir/$frontendClassName.h") || die "Couldn't open file $outputDir/$frontendClassName.h";
+    print $HEADER generateHeader($frontendClassName, \%frontendTypes, $frontendConstructor, \%frontendMethods, $frontendFooter);
     close($HEADER);
     undef($HEADER);
+
 }
 
 1;
diff --git a/WebCore/inspector/Inspector.idl b/WebCore/inspector/Inspector.idl
index 476d040..3c96db1 100644
--- a/WebCore/inspector/Inspector.idl
+++ b/WebCore/inspector/Inspector.idl
@@ -32,15 +32,15 @@
 
 module core {
     interface [Conditional=INSPECTOR] Inspector {
-        [notify] void addRecordToTimeline(in Object record);
-        [notify] void addNodesToSearchResult(in Array nodeIds);
-        [notify] void attributesUpdated(in long id, in Array attributes);
-        [notify] void childNodeCountUpdated(in long id, in int newValue);
-        [notify] void childNodeInserted(in long parentId, in long prevId, in Object node);
-        [notify] void childNodeRemoved(in long parentId, in long id);
-        [notify] void setChildNodes(in long parentId, in Array nodes);
-        [notify] void setDetachedRoot(in Object root);
-        [notify] void setDocument(in Value root);
+        [notify] void addRecordToTimeline(out Object record);
+        [notify] void addNodesToSearchResult(out Array nodeIds);
+        [notify] void attributesUpdated(out long id, out Array attributes);
+        [notify] void childNodeCountUpdated(out long id, out int newValue);
+        [notify] void childNodeInserted(out long parentId, out long prevId, out Object node);
+        [notify] void childNodeRemoved(out long parentId, out long id);
+        [notify] void setChildNodes(out long parentId, out Array nodes);
+        [notify] void setDetachedRoot(out Object root);
+        [notify] void setDocument(out Value root);
 
         void storeLastActivePanel(in String panelName);
 
@@ -55,7 +55,7 @@ module core {
 
         void enableResourceTracking(in boolean always);
         void disableResourceTracking(in boolean always);
-        void getResourceContent(in unsigned long identifier);
+        void getResourceContent(in long callId, in unsigned long identifier);
         void reloadPage();
 
         void startTimelineProfiler();
@@ -65,7 +65,7 @@ module core {
         void enableDebugger(in boolean always);
         void disableDebugger(in boolean always);
 
-        void setBreakpoint(in String sourceID, in unsigned long lineNumber, in boolean enabled, in String condition);
+        void setBreakpoint(in long callId, in String sourceID, in unsigned long lineNumber, in boolean enabled, in String condition);
         void removeBreakpoint(in String sourceID, in unsigned long lineNumber);
         void activateBreakpoints();
         void deactivateBreakpoints();
@@ -79,8 +79,8 @@ module core {
 
         void setPauseOnExceptionsState(in long pauseOnExceptionsState);
 
-        void editScriptSource(in String sourceID, in String newContent);
-        void getScriptSource(in String sourceID);
+        void editScriptSource(in long callId, in String sourceID, in String newContent);
+        void getScriptSource(in long callId, in String sourceID);
 
         void enableProfiler(in boolean always);
         void disableProfiler(in boolean always);
@@ -88,8 +88,8 @@ module core {
         void startProfiling();
         void stopProfiling();
 
-        void getProfileHeaders();
-        void getProfile(in unsigned long uid);
+        void getProfileHeaders(in long callId);
+        void getProfile(in long callId, in unsigned long uid);
 
         void removeProfile(in unsigned long uid);
         void clearProfiles();
@@ -97,62 +97,62 @@ module core {
         void takeHeapSnapshot();
 #endif
         void setInjectedScriptSource(in String scriptSource);
-        void dispatchOnInjectedScript(in long injectedScriptId, in String methodName, in String arguments, in boolean async);
+        void dispatchOnInjectedScript(in long callId, in long injectedScriptId, in String methodName, in String arguments, in boolean async);
 
         void addScriptToEvaluateOnLoad(in String scriptSource);
         void removeAllScriptsToEvaluateOnLoad();
 
-        void getChildNodes(in long nodeId);
-        [customResponse=didApplyDomChange] void setAttribute(in long elementId, in String name, in String value, out boolean success);
-        [customResponse=didApplyDomChange] void removeAttribute(in long elementId, in String name, out boolean success);
-        void setTextNodeValue(in long nodeId, in String value);
-        void getEventListenersForNode(in long nodeId, out long nodeId, out Array listenersArray);
+        void getChildNodes(in long callId, in long nodeId);
+        [customResponse=didApplyDomChange] void setAttribute(in long callId, in long elementId, in String name, in String value, out boolean success);
+        [customResponse=didApplyDomChange] void removeAttribute(in long callId, in long elementId, in String name, out boolean success);
+        void setTextNodeValue(in long callId, in long nodeId, in String value);
+        void getEventListenersForNode(in long callId, in long nodeId, out long nodeId, out Array listenersArray);
         void copyNode(in long nodeId);
-        void removeNode(in long nodeId, out long nodeId);
-        void changeTagName(in long nodeId, in String newTagName, out long nodeId);
-        void getOuterHTML(in long nodeId, out String outerHTML);
-        void setOuterHTML(in long nodeId, in String outerHTML, out long nodeId);
+        void removeNode(in long callId, in long nodeId, out long nodeId);
+        void changeTagName(in long callId, in long nodeId, in String newTagName, out long nodeId);
+        void getOuterHTML(in long callId, in long nodeId, out String outerHTML);
+        void setOuterHTML(in long callId, in long nodeId, in String outerHTML, out long nodeId);
         void addInspectedNode(in long nodeId);
         void performSearch(in String query, in boolean runSynchronously);
         void searchCanceled();
-        void pushNodeByPathToFrontend(in String path, out long nodeId);
+        void pushNodeByPathToFrontend(in long callId, in String path, out long nodeId);
 
         void clearConsoleMessages();
 
         void highlightDOMNode(in long nodeId);
         void hideDOMNodeHighlight();
 
-        void getStyles(in long nodeId, in boolean authOnly, out Value styles);
-        void getAllStyles(out Array styles);
-        void getInlineStyle(in long nodeId, out Value style);
-        void getComputedStyle(in long nodeId, out Value style);
-        void getStyleSheet(in long styleSheetId, out Value styleSheet);
-        void getRuleRangesForStyleSheetId(in long styleSheetId);
-        void applyStyleText(in long styleId, in String styleText, in String propertyName, out boolean success, out Value style, out Array changedProperties);
-        void setStyleText(in long styleId, in String styleText, out boolean success);
-        void setStyleProperty(in long styleId, in String name, in String value, out boolean success);
-        void toggleStyleEnabled(in long styleId, in String propertyName, in boolean disabled, out Value style);
-        void setRuleSelector(in long ruleId, in String selector, in long selectedNodeId, out Value rule, out boolean selectorAffectsNode);
-        void addRule(in String selector, in long selectedNodeId, out Value rule, out boolean selectorAffectsNode);
-
-        void getCookies();
+        void getStyles(in long callId, in long nodeId, in boolean authOnly, out Value styles);
+        void getAllStyles(in long callId, out Array styles);
+        void getInlineStyle(in long callId, in long nodeId, out Value style);
+        void getComputedStyle(in long callId, in long nodeId, out Value style);
+        void getStyleSheet(in long callId, in long styleSheetId, out Value styleSheet);
+        void getRuleRangesForStyleSheetId(in long callId, in long styleSheetId);
+        void applyStyleText(in long callId, in long styleId, in String styleText, in String propertyName, out boolean success, out Value style, out Array changedProperties);
+        void setStyleText(in long callId, in long styleId, in String styleText, out boolean success);
+        void setStyleProperty(in long callId, in long styleId, in String name, in String value, out boolean success);
+        void toggleStyleEnabled(in long callId, in long styleId, in String propertyName, in boolean disabled, out Value style);
+        void setRuleSelector(in long callId, in long ruleId, in String selector, in long selectedNodeId, out Value rule, out boolean selectorAffectsNode);
+        void addRule(in long callId, in String selector, in long selectedNodeId, out Value rule, out boolean selectorAffectsNode);
+
+        void getCookies(in long callId);
         void deleteCookie(in String cookieName, in String domain);
 
 #if defined(ENABLE_OFFLINE_WEB_APPLICATIONS) && ENABLE_OFFLINE_WEB_APPLICATIONS
-        void getApplicationCaches();
+        void getApplicationCaches(in long callId);
 #endif
 
         void releaseWrapperObjectGroup(in long injectedScriptId, in String objectGroup);
-        void didEvaluateForTestInFrontend(in String jsonResult);
+        void didEvaluateForTestInFrontend(in long callId, in String jsonResult);
 
 #if defined(ENABLE_DATABASE) && ENABLE_DATABASE
-        void getDatabaseTableNames(in long databaseId);
+        void getDatabaseTableNames(in long callId, in long databaseId);
 #endif
 
 #if defined(ENABLE_DOM_STORAGE) && ENABLE_DOM_STORAGE
-        void getDOMStorageEntries(in long storageId);
-        void setDOMStorageItem(in long storageId, in String key, in String value);
-        void removeDOMStorageItem(in long storageId, in String key);
+        void getDOMStorageEntries(in long callId, in long storageId);
+        void setDOMStorageItem(in long callId, in long storageId, in String key, in String value);
+        void removeDOMStorageItem(in long callId, in long storageId, in String key);
 #endif
     };
 }
diff --git a/WebCore/inspector/InspectorValues.cpp b/WebCore/inspector/InspectorValues.cpp
index f95116c..fd42c65 100644
--- a/WebCore/inspector/InspectorValues.cpp
+++ b/WebCore/inspector/InspectorValues.cpp
@@ -650,6 +650,12 @@ void InspectorArray::writeJSON(Vector<UChar>* output) const
     output->append(']');
 }
 
+PassRefPtr<InspectorValue> InspectorArray::get(size_t index)
+{
+    ASSERT(index < m_data.size());
+    return m_data[index];
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(INSPECTOR)
diff --git a/WebCore/inspector/InspectorValues.h b/WebCore/inspector/InspectorValues.h
index 30ba95a..a0c0c2d 100644
--- a/WebCore/inspector/InspectorValues.h
+++ b/WebCore/inspector/InspectorValues.h
@@ -198,7 +198,9 @@ public:
     void pushNumber(double);
     void pushString(const String&);
     void push(PassRefPtr<InspectorValue>);
-    unsigned length() { return m_data.size(); }
+    unsigned length() const { return m_data.size(); }
+
+    PassRefPtr<InspectorValue> get(size_t index);
 
     virtual void writeJSON(Vector<UChar>* output) const;
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list