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
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",
41 function setupTypescript() {
45 function tearDownTypescript() {
46 compiler_input = null;
53 function runTypescript() {
54 var compiler = createCompiler();
55 compiler.addUnit(compiler_input, "compiler_input.ts");
57 compiler.reTypeCheck();
59 createFile: function (fileName) { return outfile; },
60 fileExists: function (path) { return false; },
61 directoryExists: function (path) { return false; },
62 resolvePath: function (path) { return path; }
65 if (parseErrors.length != 192 && parseErrors.length != 193) {
66 throw new Error("Parse errors.");
73 cumulative_checksum: 0,
74 Write: function (s) { this.Verify(s); },
75 WriteLine: function (s) { this.Verify(s + "\n"); },
77 if (this.checksum != this.cumulative_checksum) {
78 throw new Error("Wrong checksum.");
80 this.cumulative_checksum = 0;
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;
93 cumulative_checksum: 0,
94 Write: function (s) { this.Verify(s); },
95 WriteLine: function (s) { this.Verify(s + "\n"); },
97 if (this.checksum != this.cumulative_checksum) {
98 throw new Error("Wrong checksum.");
100 this.cumulative_checksum = 0;
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;
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 });
119 compiler.parser.errorRecovery = true;
120 compiler.typeCheck();
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();
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
148 // def escape_and_format(data, varname):
149 // data = data.replace("\\", "\\\\").replace("\"", "\\\"")
150 // .replace("\n", "\\n");
151 // data = "var " + varname + " = \"" + 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 ***************************************************************************** */