1# Copyright (C) 2013 Google, Inc. All Rights Reserved. 2# 3# Redistribution and use in source and binary forms, with or without 4# modification, are permitted provided that the following conditions 5# are met: 6# 1. Redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer. 8# 2. Redistributions in binary form must reproduce the above copyright 9# notice, this list of conditions and the following disclaimer in the 10# documentation and/or other materials provided with the distribution. 11# 12# THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 13# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 14# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 15# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 16# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 17# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 18# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 19# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 20# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 24package StaticString; 25 26use strict; 27use Hasher; 28 29sub GenerateStrings($) 30{ 31 my $stringsRef = shift; 32 my %strings = %$stringsRef; 33 34 my @result = (); 35 36 while ( my ($name, $value) = each %strings ) { 37 push(@result, "static const LChar ${name}String8[] = \"${value}\";\n"); 38 } 39 40 push(@result, "\n"); 41 42 while ( my ($name, $value) = each %strings ) { 43 my $length = length($value); 44 my $hash = Hasher::GenerateHashValue($value); 45 push(@result, <<END); 46static StringImpl::StaticASCIILiteral ${name}Data = { 47 StringImpl::StaticASCIILiteral::s_initialRefCount, 48 $length, 49 ${name}String8, 50 StringImpl::StaticASCIILiteral::s_initialFlags | (${hash} << StringImpl::StaticASCIILiteral::s_hashShift) 51}; 52END 53 } 54 55 push(@result, "\n"); 56 57 return join "", @result; 58} 59 60sub GenerateStringAsserts($) 61{ 62 my $stringsRef = shift; 63 my %strings = %$stringsRef; 64 65 my @result = (); 66 67 push(@result, "#ifndef NDEBUG\n"); 68 69 while ( my ($name, $value) = each %strings ) { 70 push(@result, " reinterpret_cast<StringImpl*>(&${name}Data)->assertHashIsCorrect();\n"); 71 } 72 73 push(@result, "#endif // NDEBUG\n"); 74 75 push(@result, "\n"); 76 77 return join "", @result; 78} 79 801; 81