| Index: tools/gcmole/gccause.lua
 | 
| diff --git a/tools/gcmole/gccause.lua b/tools/gcmole/gccause.lua
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..a6fe5421374a6b4acfc61045cc2a03d493bb404d
 | 
| --- /dev/null
 | 
| +++ b/tools/gcmole/gccause.lua
 | 
| @@ -0,0 +1,60 @@
 | 
| +-- Copyright 2011 the V8 project authors. All rights reserved.
 | 
| +-- Redistribution and use in source and binary forms, with or without
 | 
| +-- modification, are permitted provided that the following conditions are
 | 
| +-- met:
 | 
| +--
 | 
| +--     * Redistributions of source code must retain the above copyright
 | 
| +--       notice, this list of conditions and the following disclaimer.
 | 
| +--     * Redistributions in binary form must reproduce the above
 | 
| +--       copyright notice, this list of conditions and the following
 | 
| +--       disclaimer in the documentation and/or other materials provided
 | 
| +--       with the distribution.
 | 
| +--     * Neither the name of Google Inc. nor the names of its
 | 
| +--       contributors may be used to endorse or promote products derived
 | 
| +--       from this software without specific prior written permission.
 | 
| +--
 | 
| +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
| +-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
| +-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
| +-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
| +-- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
| +-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
| +-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
| +-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
| +-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
| +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
| +-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
| +
 | 
| +-- This is an auxiliary tool that reads gccauses file generated by
 | 
| +-- gcmole.lua and prints tree of the calls that can potentially cause a GC
 | 
| +-- inside a given function.
 | 
| +--
 | 
| +-- Usage: lua tools/gcmole/gccause.lua <function-name-pattern>
 | 
| +--
 | 
| +
 | 
| +assert(loadfile "gccauses")()
 | 
| +
 | 
| +local P = ...
 | 
| +
 | 
| +local T = {}
 | 
| +
 | 
| +local function TrackCause(name, lvl)
 | 
| +   io.write(("  "):rep(lvl or 0), name, "\n")
 | 
| +   if GC[name] then
 | 
| +      local causes = GC[name]
 | 
| +      for i = 1, #causes do
 | 
| +	 local f = causes[i]
 | 
| +	 if not T[f] then
 | 
| +	    T[f] = true
 | 
| +	    TrackCause(f, (lvl or 0) + 1)
 | 
| +	 end
 | 
| +      end
 | 
| +   end
 | 
| +end
 | 
| +
 | 
| +for name, _ in pairs(GC) do
 | 
| +   if name:match(P) then
 | 
| +      T = {}
 | 
| +      TrackCause(name)
 | 
| +   end
 | 
| +end
 | 
| 
 |