diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/domjit/generate-abstract-heap.rb | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/domjit/generate-abstract-heap.rb')
-rw-r--r-- | Source/WebCore/domjit/generate-abstract-heap.rb | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/Source/WebCore/domjit/generate-abstract-heap.rb b/Source/WebCore/domjit/generate-abstract-heap.rb new file mode 100644 index 000000000..b7412e85d --- /dev/null +++ b/Source/WebCore/domjit/generate-abstract-heap.rb @@ -0,0 +1,165 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- +# Copyright (C) 2016 Apple Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. 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. +# +# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS 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 APPLE INC. OR ITS 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. + +require "yaml" + +class HeapRange + attr_reader :first, :last + def initialize(first, last) + @first = first + @last = last + end +end + +class AbstractHeap + attr_reader :range, :name, :parent + def initialize(name, tree) + @name = name + @parent = nil + if tree.nil? + @children = [] + else + @children = tree.map {|key, value| AbstractHeap.new(key, value) } + end + @range = nil + end + + def setParent(parent) + parent.children.push(self) + @parent = parent + end + + def compute(start) + current = start + if @children.empty? + @range = HeapRange.new(start, current + 1) + return + end + + @children.each {|child| + child.compute(current) + current = child.range.last + } + + @range = HeapRange.new(start, current) + end + + def dump output + shallowDump(output) + if @parent + output.print "-> " + @parent.dump(output) + end + end + + def shallowDump(output) + output.print "#{@name}<#{@range.first},#{@range.last}>" + end + + def deepDump output, indent + printIndent(output, indent) + shallowDump(output) + if @children.empty? + output.print "\n" + return + end + + output.print ":\n" + @children.each {|child| + child.deepDump(output, indent + 1) + } + end + + def generate output + output.puts "constexpr JSC::DOMJIT::HeapRange #{@name}(JSC::DOMJIT::HeapRange::ConstExpr, #{@range.first}, #{@range.last});" + @children.each {|child| + child.generate(output) + } + end + +private + def printIndent output, indent + indent.times { + output.print " " + } + end +end + +header = <<-EOS +/* + * Copyright (C) 2016 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. + */ +// Auto-generated file. Do not modify. + +#pragma once + +#include <domjit/DOMJITHeapRange.h> + +namespace WebCore { namespace DOMJIT { namespace AbstractHeapRepository { +EOS + +footer = <<-EOS +} } } +EOS + +$inputFileName = ARGV.shift +$outputFileName = ARGV.shift +File.open($outputFileName, "w") {|output| + File.open($inputFileName, "rb") {|file| + tree = YAML::load(file.read()) + heap = tree.map {|key, value| + AbstractHeap.new(key, value) + }.first + heap.compute(0) + + output.print(header) + output.puts("/* DOMJIT Abstract Heap Tree.") + heap.deepDump(output, 0) + output.puts("*/") + heap.generate(output) + output.print(footer) + } +} |