172 lines
6.3 KiB
JavaScript
172 lines
6.3 KiB
JavaScript
// 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,
|
|
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.
|
|
***************************************************************************** */
|