summaryrefslogtreecommitdiff
path: root/Source/WebCore/domjit/generate-abstract-heap.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/domjit/generate-abstract-heap.rb')
-rw-r--r--Source/WebCore/domjit/generate-abstract-heap.rb165
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)
+ }
+}