1#!/usr/bin/env ruby 2 3# Copyright (C) 2010 Apple Inc. All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 14# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 15# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 16# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 18# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 24# THE POSSIBILITY OF SUCH DAMAGE. 25 26input_file = ARGV[0] 27output_file = ARGV[1] 28 29require 'erb' 30 31def line_for_output line 32 return line.chomp if line =~ /#/ 33 " validateAndPrint(\"#{line.chomp}\");" 34end 35 36TEMPLATE = <<-EOF 37#include "config.h" 38#include <stdio.h> 39#include <wtf/Assertions.h> 40 41#if !OS(WINDOWS) 42#include <cxxabi.h> 43#endif 44 45static void validateAndPrint(const char* symbol) 46{ 47#if !OS(WINDOWS) 48 if (!strncmp(symbol, "__Z", strlen("__Z"))) { 49 char* demangledName = abi::__cxa_demangle(symbol + 1, nullptr, nullptr, nullptr); 50 if (!demangledName) { 51 fprintf(stderr, "ERROR: \\"%s\\" is not a valid C++ mangled name.\\n", symbol); 52 exit(EXIT_FAILURE); 53 } 54 55 free(demangledName); 56 } 57#endif 58 59 printf("%s\\n", symbol); 60} 61 62int main(int, char**) 63{ 64<%- input.each_line do |line| -%> 65<%= line_for_output line %> 66<%- end -%> 67 68 return 0; 69} 70EOF 71 72File.open(output_file, "w") do |output| 73 File.open(input_file) do |input| 74 renderer = ERB.new(TEMPLATE, 0, "-") 75 output << renderer.result(binding) 76 end 77end 78 79STDERR.puts "Wrote output to #{output_file}" 80