Access GCController instance via GCController::singleton() instead of a free function
[WebKit-https.git] / Source / WebCore / bindings / scripts / StaticString.pm
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
24 package StaticString;
25
26 use strict;
27 use Hasher;
28
29 sub GenerateStrings($)
30 {
31     my $stringsRef = shift;
32     my %strings = %$stringsRef;
33
34     my @result = ();
35
36     for my $name (sort keys %strings) {
37         push(@result, "static const LChar ${name}String8[] = \"$strings{$name}\";\n");
38     }
39
40     push(@result, "\n");
41
42     for my $name (sort keys %strings) {
43         my $value = $strings{$name};
44         my $length = length($value);
45         my $hash = Hasher::GenerateHashValue($value);
46         push(@result, <<END);
47 static StringImpl::StaticASCIILiteral ${name}Data = {
48     StringImpl::StaticASCIILiteral::s_initialRefCount,
49     $length,
50     ${name}String8,
51     StringImpl::StaticASCIILiteral::s_initialFlags | (${hash} << StringImpl::StaticASCIILiteral::s_hashShift)
52 };
53 END
54     }
55
56     push(@result, "\n");
57
58     return join "", @result;
59 }
60
61 sub GenerateStringAsserts($)
62 {
63     my $stringsRef = shift;
64     my %strings = %$stringsRef;
65
66     my @result = ();
67
68     push(@result, "#ifndef NDEBUG\n");
69
70     for my $name (sort keys %strings) {
71         push(@result, "    reinterpret_cast<StringImpl*>(&${name}Data)->assertHashIsCorrect();\n");
72     }
73
74     push(@result, "#endif // NDEBUG\n");
75
76     push(@result, "\n");
77
78     return join "", @result;
79 }
80
81 1;