no bug - Bumping Firefox l10n changesets r=release a=l10n-bump DONTBUILD CLOSED TREE
[gecko.git] / js / src / octane / typescript.js
blob2dba23d3de9bae430ed69f88d0300920ee25ebab
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.
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.
28 var typescript = new BenchmarkSuite('Typescript', [255011322], [
29   new Benchmark("Typescript",
30                 false,
31                 true,
32                 5,
33                 runTypescript,
34                 setupTypescript,
35                 tearDownTypescript,
36                 null,
37                 1)
38 ]);
41 function setupTypescript() {
45 function tearDownTypescript() {
46   compiler_input = null;
50 var parseErrors = [];
53 function runTypescript() {
54   var compiler = createCompiler();
55   compiler.addUnit(compiler_input, "compiler_input.ts");
56   parseErrors = [];
57   compiler.reTypeCheck();
58   compiler.emit({
59            createFile: function (fileName) { return outfile; },
60            fileExists: function (path) { return false; },
61            directoryExists: function (path) { return false; },
62            resolvePath: function (path) { return path; }
63   });
64   
65   if (parseErrors.length != 192 && parseErrors.length != 193) {
66     throw new Error("Parse errors.");
67   }
68   compiler = null;
71 var outfile = {
72   checksum: -412589664, 
73   cumulative_checksum: 0,
74   Write: function (s) { this.Verify(s); },
75   WriteLine: function (s) { this.Verify(s + "\n"); },
76   Close: function () {
77     if (this.checksum != this.cumulative_checksum) {
78       throw new Error("Wrong checksum.");
79     }
80     this.cumulative_checksum = 0;
81   },
82   Verify: function (s) {
83     for(var i = 0; i < s.length; i++) {
84       var c = s.charCodeAt(i);
85       this.cumulative_checksum = (this.cumulative_checksum << 1) ^ c;
86     }
87   }
91 var outerr = {
92   checksum: 0,
93   cumulative_checksum: 0,
94   Write: function (s) { this.Verify(s); },
95   WriteLine: function (s) { this.Verify(s + "\n"); },
96   Close: function () {
97     if (this.checksum != this.cumulative_checksum) {
98       throw new Error("Wrong checksum.");
99     }
100     this.cumulative_checksum = 0;
101   },
102   Verify: function (s) {
103     for(var i = 0; i < s.length; i++) {
104       var c = s.charCodeAt(i);
105       this.cumulative_checksum = (this.cumulative_checksum << 1) ^ c;
106     }
107   }
111 function createCompiler() {
112   var settings = new TypeScript.CompilationSettings();
113   settings.codeGenTarget = TypeScript.CodeGenTarget.ES5;
114   var compiler = new TypeScript.TypeScriptCompiler(
115       outerr, new TypeScript.NullLogger, settings);
116   compiler.setErrorCallback(function (start, len, message) { 
117     parseErrors.push({ start: start, len: len, message: message }); 
118   });
119   compiler.parser.errorRecovery = true;
120   compiler.typeCheck();
121   return compiler
125 // The two files accompanying this benchmark contain a modified version of the
126 // Typescript compiler. They can be generated using the following instructions
127 // with the code available at:
128 //    http://typescript.codeplex.com/SourceControl/changeset/view/258e00903a9e
130 // 1) Copy the compiler from $TYPESCRIPT/bin/tsc.js to typescript-compiler.js
131 // 2) Remove the call to the batch compiler from the last line of tsc.js
132 // 3) Add this code after line 7963 (fix for Mozilla Firefox):
133 //    if (this.currentToken === undefined)
134 //      this.currentToken = this.scanner.scan();
135 // 4) Add this code after line 9142 (fix for Mozilla Firefox):
136 //    if (this.currentToken === undefined) {
137 //      this.currentToken = this.scanner.scan();
138 //      continue;
139 //    }
140 // 5) Generate the Typescript compiler input using the following command:
141 //    $ cat $TYPESCRIPT/src/compiler/*.ts | iconv -c -f utf8 -t ascii \
142 //      | dos2unix > /tmp/compiler_input
143 // 6) Run the following Python script to generate the reformatted input:
144 //    $ python script.py > typescript-input.js
146 // #!/usr/bin/env python
147 // import re;
148 // def escape_and_format(data, varname):
149 //   data = data.replace("\\", "\\\\").replace("\"", "\\\"")
150 //          .replace("\n", "\\n");
151 //   data = "var " + varname + " = \"" + data + "\""
152 //   print data; 
153 // result = open("/tmp/compiler_input", 'r');
154 // escape_and_format(result.read(), "compiler_input")
156 // The following is the original copyright notice present in the Typescript
157 // compiler source at the time this benchmark was generated:
159 /* *****************************************************************************
160 Copyright (c) Microsoft Corporation. All rights reserved. 
161 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
162 this file except in compliance with the License. You may obtain a copy of the
163 License at http://www.apache.org/licenses/LICENSE-2.0  
165 THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
166 KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
167 WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
168 MERCHANTABLITY OR NON-INFRINGEMENT. 
170 See the Apache Version 2.0 License for specific language governing permissions
171 and limitations under the License.
172 ***************************************************************************** */