All prototypes should call didBecomePrototype()
[WebKit.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     push(@result, <<END);
37 #if COMPILER(MSVC)
38 #pragma warning(push)
39 #pragma warning(disable: 4307)
40 #endif
41
42 END
43
44     for my $name (sort keys %strings) {
45         my $value = $strings{$name};
46         push(@result, "static constexpr StringImpl::StaticStringImpl ${name}Data(\"${value}\");\n");
47     }
48
49     push(@result, <<END);
50
51 #if COMPILER(MSVC)
52 #pragma warning(pop)
53 #endif
54
55 END
56
57     return join "", @result;
58 }
59
60 sub GenerateStringAsserts($)
61 {
62     my $stringsRef = shift;
63     my %strings = %$stringsRef;
64
65     my @result = ();
66
67     push(@result, "#ifndef NDEBUG\n");
68
69     for my $name (sort keys %strings) {
70         push(@result, "    reinterpret_cast<const 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
80 1;