blob: 2dba23d3de9bae430ed69f88d0300920ee25ebab [file] [log] [blame]
// Copyright 2013 the Octane Benchmark project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
var typescript = new BenchmarkSuite('Typescript', [255011322], [
new Benchmark("Typescript",
false,
true,
5,
runTypescript,
setupTypescript,
tearDownTypescript,
null,
1)
]);
function setupTypescript() {
}
function tearDownTypescript() {
compiler_input = null;
}
var parseErrors = [];
function runTypescript() {
var compiler = createCompiler();
compiler.addUnit(compiler_input, "compiler_input.ts");
parseErrors = [];
compiler.reTypeCheck();
compiler.emit({
createFile: function (fileName) { return outfile; },
fileExists: function (path) { return false; },
directoryExists: function (path) { return false; },
resolvePath: function (path) { return path; }
});
if (parseErrors.length != 192 && parseErrors.length != 193) {
throw new Error("Parse errors.");
}
compiler = null;
}
var outfile = {
checksum: -412589664,
cumulative_checksum: 0,
Write: function (s) { this.Verify(s); },
WriteLine: function (s) { this.Verify(s + "\n"); },
Close: function () {
if (this.checksum != this.cumulative_checksum) {
throw new Error("Wrong checksum.");
}
this.cumulative_checksum = 0;
},
Verify: function (s) {
for(var i = 0; i < s.length; i++) {
var c = s.charCodeAt(i);
this.cumulative_checksum = (this.cumulative_checksum << 1) ^ c;
}
}
};
var outerr = {
checksum: 0,
cumulative_checksum: 0,
Write: function (s) { this.Verify(s); },
WriteLine: function (s) { this.Verify(s + "\n"); },
Close: function () {
if (this.checksum != this.cumulative_checksum) {
throw new Error("Wrong checksum.");
}
this.cumulative_checksum = 0;
},
Verify: function (s) {
for(var i = 0; i < s.length; i++) {
var c = s.charCodeAt(i);
this.cumulative_checksum = (this.cumulative_checksum << 1) ^ c;
}
}
};
function createCompiler() {
var settings = new TypeScript.CompilationSettings();
settings.codeGenTarget = TypeScript.CodeGenTarget.ES5;
var compiler = new TypeScript.TypeScriptCompiler(
outerr, new TypeScript.NullLogger, settings);
compiler.setErrorCallback(function (start, len, message) {
parseErrors.push({ start: start, len: len, message: message });
});
compiler.parser.errorRecovery = true;
compiler.typeCheck();
return compiler
}
// The two files accompanying this benchmark contain a modified version of the
// Typescript compiler. They can be generated using the following instructions
// with the code available at:
// http://typescript.codeplex.com/SourceControl/changeset/view/258e00903a9e
//
// 1) Copy the compiler from $TYPESCRIPT/bin/tsc.js to typescript-compiler.js
// 2) Remove the call to the batch compiler from the last line of tsc.js
// 3) Add this code after line 7963 (fix for Mozilla Firefox):
// if (this.currentToken === undefined)
// this.currentToken = this.scanner.scan();
// 4) Add this code after line 9142 (fix for Mozilla Firefox):
// if (this.currentToken === undefined) {
// this.currentToken = this.scanner.scan();
// continue;
// }
// 5) Generate the Typescript compiler input using the following command:
// $ cat $TYPESCRIPT/src/compiler/*.ts | iconv -c -f utf8 -t ascii \
// | dos2unix > /tmp/compiler_input
// 6) Run the following Python script to generate the reformatted input:
// $ python script.py > typescript-input.js
//
// #!/usr/bin/env python
// import re;
// def escape_and_format(data, varname):
// data = data.replace("\\", "\\\\").replace("\"", "\\\"")
// .replace("\n", "\\n");
// data = "var " + varname + " = \"" + data + "\""
// print data;
// result = open("/tmp/compiler_input", 'r');
// escape_and_format(result.read(), "compiler_input")
//
// The following is the original copyright notice present in the Typescript
// compiler source at the time this benchmark was generated:
//
/* *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */