Make JetStream 2
[WebKit-https.git] / PerformanceTests / JetStream2 / Octane / typescript.js
1 // Copyright 2013 the Octane Benchmark project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 //     * Redistributions of source code must retain the above copyright
7 //       notice, this list of conditions and the following disclaimer.
8 //     * Redistributions in binary form must reproduce the above
9 //       copyright notice, this list of conditions and the following
10 //       disclaimer in the documentation and/or other materials provided
11 //       with the distribution.
12 //     * Neither the name of Google Inc. nor the names of its
13 //       contributors may be used to endorse or promote products derived
14 //       from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28 function tearDownTypescript() {
29   compiler_input = null;
30 }
31
32
33 var parseErrors = [];
34
35
36 function runTypescript() {
37   var compiler = createCompiler();
38   compiler.addUnit(compiler_input, "compiler_input.ts");
39   parseErrors = [];
40   compiler.reTypeCheck();
41   compiler.emit({
42            createFile: function (fileName) { return outfile; },
43            fileExists: function (path) { return false; },
44            directoryExists: function (path) { return false; },
45            resolvePath: function (path) { return path; }
46   });
47   
48   if (parseErrors.length != 192 && parseErrors.length != 193) {
49     throw new Error("Parse errors.");
50   }
51   compiler = null;
52 }
53
54 var outfile = {
55   checksum: -412589664, 
56   cumulative_checksum: 0,
57   Write: function (s) { this.Verify(s); },
58   WriteLine: function (s) { this.Verify(s + "\n"); },
59   Close: function () {
60     if (this.checksum != this.cumulative_checksum) {
61       throw new Error("Wrong checksum.");
62     }
63     this.cumulative_checksum = 0;
64   },
65   Verify: function (s) {
66     for(var i = 0; i < s.length; i++) {
67       var c = s.charCodeAt(i);
68       this.cumulative_checksum = (this.cumulative_checksum << 1) ^ c;
69     }
70   }
71 };
72
73
74 var outerr = {
75   checksum: 0,
76   cumulative_checksum: 0,
77   Write: function (s) { this.Verify(s); },
78   WriteLine: function (s) { this.Verify(s + "\n"); },
79   Close: function () {
80     if (this.checksum != this.cumulative_checksum) {
81       throw new Error("Wrong checksum.");
82     }
83     this.cumulative_checksum = 0;
84   },
85   Verify: function (s) {
86     for(var i = 0; i < s.length; i++) {
87       var c = s.charCodeAt(i);
88       this.cumulative_checksum = (this.cumulative_checksum << 1) ^ c;
89     }
90   }
91 };
92
93
94 function createCompiler() {
95   var settings = new TypeScript.CompilationSettings();
96   settings.codeGenTarget = TypeScript.CodeGenTarget.ES5;
97   var compiler = new TypeScript.TypeScriptCompiler(
98       outerr, new TypeScript.NullLogger, settings);
99   compiler.setErrorCallback(function (start, len, message) { 
100     parseErrors.push({ start: start, len: len, message: message }); 
101   });
102   compiler.parser.errorRecovery = true;
103   compiler.typeCheck();
104   return compiler
105 }
106
107
108 // The two files accompanying this benchmark contain a modified version of the
109 // Typescript compiler. They can be generated using the following instructions
110 // with the code available at:
111 //    http://typescript.codeplex.com/SourceControl/changeset/view/258e00903a9e
112 //
113 // 1) Copy the compiler from $TYPESCRIPT/bin/tsc.js to typescript-compiler.js
114 // 2) Remove the call to the batch compiler from the last line of tsc.js
115 // 3) Add this code after line 7963 (fix for Mozilla Firefox):
116 //    if (this.currentToken === undefined)
117 //      this.currentToken = this.scanner.scan();
118 // 4) Add this code after line 9142 (fix for Mozilla Firefox):
119 //    if (this.currentToken === undefined) {
120 //      this.currentToken = this.scanner.scan();
121 //      continue;
122 //    }
123 // 5) Generate the Typescript compiler input using the following command:
124 //    $ cat $TYPESCRIPT/src/compiler/*.ts | iconv -c -f utf8 -t ascii \
125 //      | dos2unix > /tmp/compiler_input
126 // 6) Run the following Python script to generate the reformatted input:
127 //    $ python script.py > typescript-input.js
128 //
129 // #!/usr/bin/env python
130 // import re;
131 // def escape_and_format(data, varname):
132 //   data = data.replace("\\", "\\\\").replace("\"", "\\\"")
133 //          .replace("\n", "\\n");
134 //   data = "var " + varname + " = \"" + data + "\""
135 //   print data; 
136 // result = open("/tmp/compiler_input", 'r');
137 // escape_and_format(result.read(), "compiler_input")
138 //
139 // The following is the original copyright notice present in the Typescript
140 // compiler source at the time this benchmark was generated:
141 //
142 /* *****************************************************************************
143 Copyright (c) Microsoft Corporation. All rights reserved. 
144 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
145 this file except in compliance with the License. You may obtain a copy of the
146 License at http://www.apache.org/licenses/LICENSE-2.0  
147  
148 THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
149 KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
150 WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
151 MERCHANTABLITY OR NON-INFRINGEMENT. 
152  
153 See the Apache Version 2.0 License for specific language governing permissions
154 and limitations under the License.
155 ***************************************************************************** */
156
157 class Benchmark {
158     runIteration() {
159         runTypescript();
160     }
161 }
162