Eliminate Basic compiler test from RexBench
authormsaboff@apple.com <msaboff@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Oct 2017 20:00:18 +0000 (20:00 +0000)
committermsaboff@apple.com <msaboff@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Oct 2017 20:00:18 +0000 (20:00 +0000)
https://bugs.webkit.org/show_bug.cgi?id=179025

Reviewed by Saam Barati.

* RexBench/Basic: Removed.
* RexBench/Basic/ast.js: Removed.
* RexBench/Basic/basic.js: Removed.
* RexBench/Basic/benchmark.js: Removed.
* RexBench/Basic/caseless_map.js: Removed.
* RexBench/Basic/lexer.js: Removed.
* RexBench/Basic/number.js: Removed.
* RexBench/Basic/parser.js: Removed.
* RexBench/Basic/random.js: Removed.
* RexBench/Basic/state.js: Removed.
* RexBench/Basic/stress-test.js: Removed.
* RexBench/Basic/util.js: Removed.
* RexBench/basic_benchmark.js: Removed.
* RexBench/about.html:
* RexBench/cli.js:
* RexBench/glue.js:
* RexBench/index.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@224197 268f45cc-cd09-0410-ab3c-d52691b4dbfc

17 files changed:
PerformanceTests/ChangeLog
PerformanceTests/RexBench/Basic/ast.js [deleted file]
PerformanceTests/RexBench/Basic/basic.js [deleted file]
PerformanceTests/RexBench/Basic/benchmark.js [deleted file]
PerformanceTests/RexBench/Basic/caseless_map.js [deleted file]
PerformanceTests/RexBench/Basic/lexer.js [deleted file]
PerformanceTests/RexBench/Basic/number.js [deleted file]
PerformanceTests/RexBench/Basic/parser.js [deleted file]
PerformanceTests/RexBench/Basic/random.js [deleted file]
PerformanceTests/RexBench/Basic/state.js [deleted file]
PerformanceTests/RexBench/Basic/stress-test.js [deleted file]
PerformanceTests/RexBench/Basic/util.js [deleted file]
PerformanceTests/RexBench/about.html
PerformanceTests/RexBench/basic_benchmark.js [deleted file]
PerformanceTests/RexBench/cli.js
PerformanceTests/RexBench/glue.js
PerformanceTests/RexBench/index.html

index 101a925..54ee312 100644 (file)
@@ -1,3 +1,28 @@
+2017-10-30  Michael Saboff  <msaboff@apple.com>
+
+        Eliminate Basic compiler test from RexBench
+        https://bugs.webkit.org/show_bug.cgi?id=179025
+
+        Reviewed by Saam Barati.
+
+        * RexBench/Basic: Removed.
+        * RexBench/Basic/ast.js: Removed.
+        * RexBench/Basic/basic.js: Removed.
+        * RexBench/Basic/benchmark.js: Removed.
+        * RexBench/Basic/caseless_map.js: Removed.
+        * RexBench/Basic/lexer.js: Removed.
+        * RexBench/Basic/number.js: Removed.
+        * RexBench/Basic/parser.js: Removed.
+        * RexBench/Basic/random.js: Removed.
+        * RexBench/Basic/state.js: Removed.
+        * RexBench/Basic/stress-test.js: Removed.
+        * RexBench/Basic/util.js: Removed.
+        * RexBench/basic_benchmark.js: Removed.
+        * RexBench/about.html:
+        * RexBench/cli.js:
+        * RexBench/glue.js:
+        * RexBench/index.html:
+
 2017-10-25  Robin Morisset  <rmorisset@apple.com>
 
         Support the TailBench9000 benchmark in run-jsc-benchmarks
diff --git a/PerformanceTests/RexBench/Basic/ast.js b/PerformanceTests/RexBench/Basic/ast.js
deleted file mode 100644 (file)
index bebd9f6..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-const Basic = {};
-
-Basic.NumberApply = function(state)
-{
-    // I'd call this arguments but we're in strict mode.
-    let parameters = this.parameters.map(value => value.evaluate(state));
-    
-    return state.getValue(this.name, parameters.length).apply(state, parameters);
-};
-
-Basic.Variable = function(state)
-{
-    let parameters = this.parameters.map(value => value.evaluate(state));
-    
-    return state.getValue(this.name, parameters.length).leftApply(state, parameters);
-}
-
-Basic.Const = function(state)
-{
-    return this.value;
-}
-
-Basic.NumberPow = function(state)
-{
-    return Math.pow(this.left.evaluate(state), this.right.evaluate(state));
-}
-
-Basic.NumberMul = function(state)
-{
-    return this.left.evaluate(state) * this.right.evaluate(state);
-}
-
-Basic.NumberDiv = function(state)
-{
-    return this.left.evaluate(state) / this.right.evaluate(state);
-}
-
-Basic.NumberNeg = function(state)
-{
-    return -this.term.evaluate(state);
-}
-
-Basic.NumberAdd = function(state)
-{
-    return this.left.evaluate(state) + this.right.evaluate(state);
-}
-
-Basic.NumberSub = function(state)
-{
-    return this.left.evaluate(state) - this.right.evaluate(state);
-}
-
-Basic.StringVar = function(state)
-{
-    let value = state.stringValues.get(this.name);
-    if (value == null)
-        state.abort("Could not find string variable " + this.name);
-    return value;
-}
-
-Basic.Equals = function(state)
-{
-    return this.left.evaluate(state) == this.right.evaluate(state);
-}
-
-Basic.NotEquals = function(state)
-{
-    return this.left.evaluate(state) != this.right.evaluate(state);
-}
-
-Basic.LessThan = function(state)
-{
-    return this.left.evaluate(state) < this.right.evaluate(state);
-}
-
-Basic.GreaterThan = function(state)
-{
-    return this.left.evaluate(state) > this.right.evaluate(state);
-}
-
-Basic.LessEqual = function(state)
-{
-    return this.left.evaluate(state) <= this.right.evaluate(state);
-}
-
-Basic.GreaterEqual = function(state)
-{
-    return this.left.evaluate(state) >= this.right.evaluate(state);
-}
-
-Basic.GoTo = function*(state)
-{
-    state.nextLineNumber = this.target;
-}
-
-Basic.GoSub = function*(state)
-{
-    state.subStack.push(state.nextLineNumber);
-    state.nextLineNumber = this.target;
-}
-
-Basic.Def = function*(state)
-{
-    state.validate(!state.values.has(this.name), "Cannot redefine function");
-    state.values.set(this.name, new NumberFunction(this.parameters, this.expression));
-}
-
-Basic.Let = function*(state)
-{
-    this.variable.evaluate(state).assign(this.expression.evaluate(state));
-}
-
-Basic.If = function*(state)
-{
-    if (this.condition.evaluate(state))
-        state.nextLineNumber = this.target;
-}
-
-Basic.Return = function*(state)
-{
-    this.validate(state.subStack.length, "Not in a subroutine");
-    this.nextLineNumber = state.subStack.pop();
-}
-
-Basic.Stop = function*(state)
-{
-    state.nextLineNumber = null;
-}
-
-Basic.On = function*(state)
-{
-    let index = this.expression.evaluate(state);
-    if (!(index >= 1) || !(index <= this.targets.length))
-        state.abort("Index out of bounds: " + index);
-    this.nextLineNumber = this.targets[Math.floor(index)];
-}
-
-Basic.For = function*(state)
-{
-    let sideState = state.getSideState(this);
-    sideState.variable = state.getValue(this.variable, 0).leftApply(state, []);
-    sideState.initialValue = this.initial.evaluate(state);
-    sideState.limitValue = this.limit.evaluate(state);
-    sideState.stepValue = this.step.evaluate(state);
-    sideState.variable.assign(sideState.initialValue);
-    sideState.shouldStop = function() {
-        return (sideState.variable.value - sideState.limitValue) * Math.sign(sideState.stepValue) > 0;
-    };
-    if (sideState.shouldStop())
-        this.nextLineNumber = this.target.lineNumber + 1;
-}
-
-Basic.Next = function*(state)
-{
-    let sideState = state.getSideState(this.target);
-    sideState.variable.assign(sideState.variable.value + sideState.stepValue);
-    if (sideState.shouldStop())
-        return;
-    state.nextLineNumber = this.target.lineNumber + 1;
-}
-
-Basic.Next.isBlockEnd = true;
-
-Basic.Print = function*(state)
-{
-    let string = "";
-    for (let item of this.items) {
-        switch (item.kind) {
-        case "comma":
-            while (string.length % 14)
-                string += " ";
-            break;
-        case "tab": {
-            let value = item.value.evaluate(state);
-            value = Math.max(Math.round(value), 1);
-            while (string.length % value)
-                string += " ";
-            break;
-        }
-        case "string":
-        case "number":
-            string += item.value.evaluate(state);
-            break;
-        default:
-            throw new Error("Bad item kind: " + item.kind);
-        }
-    }
-    
-    yield {kind: "output", string};
-}
-
-Basic.Input = function*(state)
-{
-    let results = yield {kind: "input", numItems: this.items.length};
-    state.validate(results != null && results.length == this.items.length, "Input did not get the right number of items");
-    for (let i = 0; i < results.length; ++i)
-        this.items[i].evaluate(state).assign(results[i]);
-}
-
-Basic.Read = function*(state)
-{
-    for (let item of this.items) {
-        state.validate(state.dataIndex < state.program.data.length, "Attempting to read past the end of data");
-        item.assign(state.program.data[state.dataIndex++]);
-    }
-}
-
-Basic.Restore = function*(state)
-{
-    state.dataIndex = 0;
-}
-
-Basic.Dim = function*(state)
-{
-    for (let item of this.items) {
-        state.validate(!state.values.has(item.name), "Variable " + item.name + " already exists");
-        state.validate(item.bounds.length, "Dim statement is for arrays");
-        state.values.set(item.name, new NumberArray(item.bounds.map(bound => bound + 1)));
-    }
-}
-
-Basic.Randomize = function*(state)
-{
-    state.rng = createRNGWithRandomSeed();
-}
-
-Basic.End = function*(state)
-{
-    state.nextLineNumber = null;
-}
-
-Basic.End.isBlockEnd = true;
-
-Basic.Program = function* programGenerator(state)
-{
-    state.validate(state.program == this, "State must match program");
-    let maxLineNumber = Math.max(...this.statements.keys());
-    while (state.nextLineNumber != null) {
-        state.validate(state.nextLineNumber <= maxLineNumber, "Went out of bounds of the program");
-        let statement = this.statements.get(state.nextLineNumber++);
-        if (statement == null || statement.process == null)
-            continue;
-        state.statement = statement;
-        yield* statement.process(state);
-    }
-}
-
diff --git a/PerformanceTests/RexBench/Basic/basic.js b/PerformanceTests/RexBench/Basic/basic.js
deleted file mode 100644 (file)
index bbb14d2..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-function prepare(string)
-{
-    let program = parse(lex(string)).program();
-    return program.process(new State(program));
-}
-
-function simulate(program, inputs = [])
-{
-    let result = "";
-    let args = [];
-    for (;;) {
-        let next = program.next(...args);
-        args = [];
-        if (next.done)
-            break;
-        if (next.value.kind == "output") {
-            result += next.value.string + "\n";
-            continue;
-        }
-        if (next.value.kind == "input") {
-            args = inputs.splice(0, next.value.numItems);
-            continue;
-        }
-    }
-    return result;
-}
-
diff --git a/PerformanceTests/RexBench/Basic/benchmark.js b/PerformanceTests/RexBench/Basic/benchmark.js
deleted file mode 100644 (file)
index c5d63a9..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-class BasicBenchmark extends Benchmark {
-    constructor(verbose = 0)
-    {
-        super(verbose);
-    }
-    
-    runOnce()
-    {
-        prepare("10 print \"hello, world!\"\n20 end");
-        prepare("10 let x = 0\n20 let x = x + 1\n30 print x\n40 if x < 10 then 20\n50 end");
-        prepare("10 print int(rnd * 100)\n20 end\n");
-        prepare("10 let value = int(rnd * 2000)\n20 print value\n30 if value <> 100 then 10\n40 end");
-    for (let i = 0; i < 100; ++i)
-        prepare("10 dim a(2000)\n20 for i = 2 to 2000\n30 let a(i) = 1\n40 next i\n50 for i = 2 to sqr(2000)\n60 if a(i) = 0 then 100\n70 for j = i ^ 2 to 2000 step i\n80 let a(j) = 0\n90 next j\n100 next i\n110 for i = 2 to 2000\n120 if a(i) = 0 then 140\n130 print i\n140 next i\n150 end\n");
-    }
-}
diff --git a/PerformanceTests/RexBench/Basic/caseless_map.js b/PerformanceTests/RexBench/Basic/caseless_map.js
deleted file mode 100644 (file)
index 62df380..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-class CaselessMap {
-    constructor(otherMap)
-    {
-        if (otherMap == null)
-            this._map = new Map();
-        else
-            this._map = new Map(otherMap._map);
-    }
-    
-    set(key, value)
-    {
-        this._map.set(key.toLowerCase(), value);
-    }
-    
-    has(key)
-    {
-        return this._map.has(key.toLowerCase());
-    }
-    
-    get(key)
-    {
-        return this._map.get(key.toLowerCase());
-    }
-
-    [Symbol.iterator]()
-    {
-        return this._map[Symbol.iterator]();
-    }
-}
-
diff --git a/PerformanceTests/RexBench/Basic/lexer.js b/PerformanceTests/RexBench/Basic/lexer.js
deleted file mode 100644 (file)
index e947b7c..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-// Loosely based on ECMA 55 sections 4-8, but loosened to allow for modern conventions, like
-// multi-character variable names. But this doesn't go too far - in particular, this doesn't do
-// unicode, because that would require more thought.
-function* lex(string)
-{
-    let sourceLineNumber = 0;
-    for (let line of string.split("\n")) {
-        ++sourceLineNumber;
-        
-        function consumeWhitespace()
-        {
-            if (/^\s+/.test(line))
-                line = RegExp.rightContext;
-        }
-   
-        function consume(kind)
-        {
-            line = RegExp.rightContext;
-            return {kind, string: RegExp.lastMatch, sourceLineNumber, userLineNumber};
-        }
-        
-        const isIdentifier = /^[a-z_]([a-z0-9_]*)/i;
-        const isNumber = /^(([0-9]+(\.([0-9]*))?)|(\.[0-9]+)(e([+-]?)([0-9]+))?)/i;
-        const isString = /^\"([^\"]|(\"\"))*\"/;
-        const isKeyword = /^((base)|(data)|(def)|(dim)|(end)|(for)|(go)|(gosub)|(goto)|(if)|(input)|(let)|(next)|(on)|(option)|(print)|(randomize)|(read)|(restore)|(return)|(step)|(stop)|(sub)|(then)|(to))/i;
-        const isOperator = /^(-|\+|\*|\/|\^|\(|\)|(<[>=]?)|(>=?)|=|,|\$|;)/;
-        const isRem = /^rem\s.*/;
-        
-        consumeWhitespace();
-        
-        if (!/^[0-9]+/.test(line))
-            throw new Error("At line " + sourceLineNumber + ": Expect line number: " + line);
-        let userLineNumber = +RegExp.lastMatch;
-        line = RegExp.rightContext;
-        yield {kind: "userLineNumber", string: RegExp.lastMatch, sourceLineNumber, userLineNumber};
-        
-        consumeWhitespace();
-        
-        while (line.length) {
-            if (isKeyword.test(line))
-                yield consume("keyword");
-            else if (isIdentifier.test(line))
-                yield consume("identifier");
-            else if (isNumber.test(line)) {
-                let token = consume("number");
-                token.value = +token.string;
-                yield token;
-            } else if (isString.test(line)) {
-                let token = consume("string");
-                token.value = "";
-                for (let i = 1; i < token.string.length - 1; ++i) {
-                    let char = token.string.charAt(i);
-                    if (char == "\"")
-                        i++;
-                    token.value += char;
-                }
-                yield token;
-            } else if (isOperator.test(line))
-                yield consume("operator");
-            else if (isRem.test(line))
-                yield consume("remark");
-            else
-                throw new Error("At line " + sourceLineNumber + ": Cannot lex token: " + line);
-            consumeWhitespace();
-        }
-        
-        // Note: this is necessary for the parser, which may look-ahead without checking if we're
-        // done. Fortunately, it won't look-ahead past a newLine.
-        yield {kind: "newLine", string:"\n", sourceLineNumber, userLineNumber};
-    }
-}
diff --git a/PerformanceTests/RexBench/Basic/number.js b/PerformanceTests/RexBench/Basic/number.js
deleted file mode 100644 (file)
index 1532d87..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-class NumberValue {
-    constructor(value = 0)
-    {
-        this._value = value;
-    }
-    
-    get value() { return this._value; }
-    
-    apply(state, parameters)
-    {
-        state.validate(parameters.length == 0, "Should not pass arguments to simple numeric variables");
-        return this._value;
-    }
-    
-    leftApply(state, parameters)
-    {
-        state.validate(parameters.length == 0, "Should not pass arguments to simple numeric variables");
-        return this;
-    }
-    
-    assign(value)
-    {
-        this._value = value;
-    }
-}
-
-class NumberArray {
-    constructor(dim = [11])
-    {
-        function allocateDim(index)
-        {
-            let result = new Array(dim[index]);
-            if (index + 1 < dim.length) {
-                for (let i = 0; i < dim[index]; ++i)
-                    result[i] = allocateDim(index + 1);
-            } else {
-                for (let i = 0; i < dim[index]; ++i)
-                    result[i] = new NumberValue();
-            }
-            return result;
-        }
-        
-        this._array = allocateDim(0);
-        this._dim = dim;
-    }
-    
-    apply(state, parameters)
-    {
-        return this.leftApply(state, parameters).apply(state, []);
-    }
-    
-    leftApply(state, parameters)
-    {
-        if (this._dim.length != parameters.length)
-            state.abort("Expected " + this._dim.length + " arguments but " + parameters.length + " were passed.");
-        let result = this._array;
-        for (var i = 0; i < parameters.length; ++i) {
-            let index = Math.floor(parameters[i]);
-            if (!(index >= state.program.base) || !(index < result.length))
-                state.abort("Index out of bounds: " + index);
-            result = result[index];
-        }
-        return result;
-    }
-}
-
-class NumberFunction {
-    constructor(parameters, code)
-    {
-        this._parameters = parameters;
-        this._code = code;
-    }
-    
-    apply(state, parameters)
-    {
-        if (this._parameters.length != parameters.length)
-            state.abort("Expected " + this._parameters.length + " arguments but " + parameters.length + " were passed");
-        let oldValues = state.values;
-        state.values = new Map(oldValues);
-        for (let i = 0; i < parameters.length; ++i)
-            state.values.set(this._parameters[i], parameters[i]);
-        let result = this.code.evaluate(state);
-        state.values = oldValues;
-        return result;
-    }
-    
-    leftApply(state, parameters)
-    {
-        state.abort("Cannot use a function as an lvalue");
-    }
-}
-
-class NativeFunction {
-    constructor(callback)
-    {
-        this._callback = callback;
-    }
-    
-    apply(state, parameters)
-    {
-        if (this._callback.length != parameters.length)
-            state.abort("Expected " + this._callback.length + " arguments but " + parameters.length + " were passed");
-        return this._callback(...parameters);
-    }
-    
-    leftApply(state, parameters)
-    {
-        state.abort("Cannot use a native function as an lvalue");
-    }
-}
-
diff --git a/PerformanceTests/RexBench/Basic/parser.js b/PerformanceTests/RexBench/Basic/parser.js
deleted file mode 100644 (file)
index 96c2118..0000000
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-function parse(tokenizer)
-{
-    let program;
-    
-    let pushBackBuffer = [];
-    
-    function nextToken()
-    {
-        if (pushBackBuffer.length)
-            return pushBackBuffer.pop();
-        let result = tokenizer.next();
-        if (result.done)
-            return {kind: "endOfFile", string: "<end of file>"};
-        return result.value;
-    }
-    
-    function pushToken(token)
-    {
-        pushBackBuffer.push(token);
-    }
-    
-    function peekToken()
-    {
-        let result = nextToken();
-        pushToken(result);
-        return result;
-    }
-    
-    function consumeKind(kind)
-    {
-        let token = nextToken();
-        if (token.kind != kind) {
-            throw new Error("At " + token.sourceLineNumber + ": expected " + kind + " but got: " + token.string);
-        }
-        return token;
-    }
-    
-    function consumeToken(string)
-    {
-        let token = nextToken();
-        if (token.string.toLowerCase() != string.toLowerCase())
-            throw new Error("At " + token.sourceLineNumber + ": expected " + string + " but got: " + token.string);
-        return token;
-    }
-    
-    function parseVariable()
-    {
-        let name = consumeKind("identifier").string;
-        let result = {evaluate: Basic.Variable, name, parameters: []};
-        if (peekToken().string == "(") {
-            do {
-                nextToken();
-                result.parameters.push(parseNumericExpression());
-            } while (peekToken().string == ",");
-            consumeToken(")");
-        }
-        return result;
-    }
-    
-    function parseNumericExpression()
-    {
-        function parsePrimary()
-        {
-            let token = nextToken();
-            switch (token.kind) {
-            case "identifier": {
-                let result = {evaluate: Basic.NumberApply, name: token.string, parameters: []};
-                if (peekToken().string == "(") {
-                    do {
-                        nextToken();
-                        result.parameters.push(parseNumericExpression());
-                    } while (peekToken().string == ",");
-                    consumeToken(")");
-                }
-                return result;
-            }
-                
-            case "number":
-                return {evaluate: Basic.Const, value: token.value};
-                
-            case "operator":
-                switch (token.string) {
-                case "(": {
-                    let result = parseNumericExpression();
-                    consumeToken(")");
-                    return result;
-                } }
-                break;
-            }
-            throw new Error("At " + token.sourceLineNumber + ": expected identifier, number, or (, but got: " + token.string);
-        }
-        
-        function parseFactor()
-        {
-            let primary = parsePrimary();
-            
-            let ok = true;
-            while (ok) {
-                switch (peekToken().string) {
-                case "^":
-                    nextToken();
-                    primary = {evaluate: Basic.NumberPow, left: primary, right: parsePrimary()};
-                    break;
-                default:
-                    ok = false;
-                    break;
-                }
-            }
-            
-            return primary;
-        }
-        
-        function parseTerm()
-        {
-            let factor = parseFactor();
-            
-            let ok = true;
-            while (ok) {
-                switch (peekToken().string) {
-                case "*":
-                    nextToken();
-                    factor = {evaluate: Basic.NumberMul, left: factor, right: parseFactor()};
-                    break;
-                case "/":
-                    nextToken();
-                    factor = {evaluate: Basic.NumberDiv, left: factor, right: parseFactor()};
-                    break;
-                default:
-                    ok = false;
-                    break;
-                }
-            }
-            
-            return factor;
-        }
-        
-        // Only the leading term in Basic can have a sign.
-        let negate = false;
-        switch (peekToken().string) {
-        case "+":
-            nextToken();
-            break;
-        case "-":
-            negate = true;
-            nextToken()
-            break;
-        }
-        
-        let term = parseTerm();
-        if (negate)
-            term = {evaluate: Basic.NumberNeg, term: term};
-        
-        let ok = true;
-        while (ok) {
-            switch (peekToken().string) {
-            case "+":
-                nextToken();
-                term = {evaluate: Basic.NumberAdd, left: term, right: parseTerm()};
-                break;
-            case "-":
-                nextToken();
-                term = {evaluate: Basic.NumberSub, left: term, right: parseTerm()};
-                break;
-            default:
-                ok = false;
-                break;
-            }
-        }
-        
-        return term;
-    }
-    
-    function parseConstant()
-    {
-        switch (peekToken().string) {
-        case "+":
-            nextToken();
-            return consumeKind("number").value;
-        case "-":
-            nextToken();
-            return -consumeKind("number").value;
-        default:
-            if (isStringExpression())
-                return consumeKind("string").value;
-            return consumeKind("number").value;
-        }
-    }
-    
-    function parseStringExpression()
-    {
-        let token = nextToken();
-        switch (token.kind) {
-        case "string":
-            return {evaluate: Basic.Const, value: token.value};
-        case "identifier":
-            consumeToken("$");
-            return {evaluate: Basic.StringVar, name: token.string};
-        default:
-            throw new Error("At " + token.sourceLineNumber + ": expected string expression but got " + token.string);
-        }
-    }
-    
-    function isStringExpression()
-    {
-        // A string expression must start with a string variable or a string constant.
-        let token = nextToken();
-        if (token.kind == "string") {
-            pushToken(token);
-            return true;
-        }
-        if (token.kind == "identifier") {
-            let result = peekToken().string == "$";
-            pushToken(token);
-            return result;
-        }
-        pushToken(token);
-        return false;
-    }
-    
-    function parseRelationalExpression()
-    {
-        if (isStringExpression()) {
-            let left = parseStringExpression();
-            let operator = nextToken();
-            let evaluate;
-            switch (operator.string) {
-            case "=":
-                evaluate = Basic.Equals;
-                break;
-            case "<>":
-                evaluate = Basic.NotEquals;
-                break;
-            default:
-                throw new Error("At " + operator.sourceLineNumber + ": expected a string comparison operator but got: " + operator.string);
-            }
-            return {evaluate, left, right: parseStringExpression()};
-        }
-        
-        let left = parseNumericExpression();
-        let operator = nextToken();
-        let evaluate;
-        switch (operator.string) {
-        case "=":
-            evaluate = Basic.Equals;
-            break;
-        case "<>":
-            evaluate = Basic.NotEquals;
-            break;
-        case "<":
-            evaluate = Basic.LessThan;
-            break;
-        case ">":
-            evaluate = Basic.GreaterThan;
-            break;
-        case "<=":
-            evaluate = Basic.LessEqual;
-            break;
-        case ">=":
-            evaluate = Basic.GreaterEqual;
-            break;
-        default:
-            throw new Error("At " + operator.sourceLineNumber + ": expected a numeric comparison operator but got: " + operator.string);
-        }
-        return {evaluate, left, right: parseNumericExpression()};
-    }
-    
-    function parseNonNegativeInteger()
-    {
-        let token = nextToken();
-        if (!/^[0-9]+$/.test(token.string))
-            throw new Error("At ", token.sourceLineNumber + ": expected a line number but got: " + token.string);
-        return token.value;
-    }
-    
-    function parseGoToStatement()
-    {
-        statement.kind = Basic.GoTo;
-        statement.target = parseNonNegativeInteger();
-    }
-    
-    function parseGoSubStatement()
-    {
-        statement.kind = Basic.GoSub;
-        statement.target = parseNonNegativeInteger();
-    }
-    
-    function parseStatement()
-    {
-        let statement = {};
-        statement.lineNumber = consumeKind("userLineNumber").userLineNumber;
-        program.statements.set(statement.lineNumber, statement);
-        
-        let command = nextToken();
-        statement.sourceLineNumber = command.sourceLineNumber;
-        switch (command.kind) {
-        case "keyword":
-            switch (command.string.toLowerCase()) {
-            case "def":
-                statement.process = Basic.Def;
-                statement.name = consumeKind("identifier");
-                statement.parameters = [];
-                if (peekToken().string == "(") {
-                    do {
-                        nextToken();
-                        statement.parameters.push(consumeKind("identifier"));
-                    } while (peekToken().string == ",");
-                }
-                statement.expression = parseNumericExpression();
-                break;
-            case "let":
-                statement.process = Basic.Let;
-                statement.variable = parseVariable();
-                consumeToken("=");
-                if (statement.process == Basic.Let)
-                    statement.expression = parseNumericExpression();
-                else
-                    statement.expression = parseStringExpression();
-                break;
-            case "go": {
-                let next = nextToken();
-                if (next.string == "to")
-                    parseGoToStatement();
-                else if (next.string == "sub")
-                    parseGoSubStatement();
-                else
-                    throw new Error("At " + next.sourceLineNumber + ": expected to or sub but got: " + next.string);
-                break;
-            }
-            case "goto":
-                parseGoToStatement();
-                break;
-            case "gosub":
-                parseGoSubStatement();
-                break;
-            case "if":
-                statement.process = Basic.If;
-                statement.condition = parseRelationalExpression();
-                consumeToken("then");
-                statement.target = parseNonNegativeInteger();
-                break;
-            case "return":
-                statement.process = Basic.Return;
-                break;
-            case "stop":
-                statement.process = Basic.Stop;
-                break;
-            case "on":
-                statement.process = Basic.On;
-                statement.expression = parseNumericExpression();
-                if (peekToken().string == "go") {
-                    consumeToken("go");
-                    consumeToken("to");
-                } else
-                    consumeToken("goto");
-                statement.targets = [];
-                for (;;) {
-                    statement.targets.push(parseNonNegativeInteger());
-                    if (peekToken().string != ",")
-                        break;
-                    nextToken();
-                }
-                break;
-            case "for":
-                statement.process = Basic.For;
-                statement.variable = consumeKind("identifier").string;
-                consumeToken("=");
-                statement.initial = parseNumericExpression();
-                consumeToken("to");
-                statement.limit = parseNumericExpression();
-                if (peekToken().string == "step") {
-                    nextToken();
-                    statement.step = parseNumericExpression();
-                } else
-                    statement.step = {evaluate: Basic.Const, value: 1};
-                consumeKind("newLine");
-                let lastStatement = parseStatements();
-                if (lastStatement.process != Basic.Next)
-                    throw new Error("At " + lastStatement.sourceLineNumber + ": expected next statement");
-                if (lastStatement.variable != statement.variable)
-                    throw new Error("At " + lastStatement.sourceLineNumber + ": expected next for " + statement.variable + " but got " + lastStatement.variable);
-                lastStatement.target = statement;
-                statement.target = lastStatement;
-                return statement;
-            case "next":
-                statement.process = Basic.Next;
-                statement.variable = consumeKind("identifier").string;
-                break;
-            case "print": {
-                statement.process = Basic.Print;
-                statement.items = [];
-                let ok = true;
-                while (ok) {
-                    switch (peekToken().string) {
-                    case ",":
-                        nextToken();
-                        statement.items.push({kind: "comma"});
-                        break;
-                    case ";":
-                        nextToken();
-                        break;
-                    case "tab":
-                        nextToken();
-                        consumeToken("(");
-                        statement.items.push({kind: "tab", value: parseNumericExpression()});
-                        break;
-                    case "\n":
-                        ok = false;
-                        break;
-                    default:
-                        if (isStringExpression()) {
-                            statement.items.push({kind: "string", value: parseStringExpression()});
-                            break;
-                        }
-                        statement.items.push({kind: "number", value: parseNumericExpression()});
-                        break;
-                    }
-                }
-                break;
-            }
-            case "input":
-                statement.process = Basic.Input;
-                statement.items = [];
-                for (;;) {
-                    statement.items.push(parseVariable());
-                    if (peekToken().string != ",")
-                        break;
-                    nextToken();
-                }
-                break;
-            case "read":
-                statement.process = Basic.Read;
-                statement.items = [];
-                for (;;) {
-                    stament.items.push(parseVariable());
-                    if (peekToken().string != ",")
-                        break;
-                    nextToken();
-                }
-                break;
-            case "restore":
-                statement.process = Basic.Restore;
-                break;
-            case "data":
-                for (;;) {
-                    program.data.push(parseConstant());
-                    if (peekToken().string != ",")
-                        break;
-                    nextToken();
-                }
-                break;
-            case "dim":
-                statement.process = Basic.Dim;
-                statement.items = [];
-                for (;;) {
-                    let name = consumeKind("identifier").string;
-                    consumeToken("(");
-                    let bounds = [];
-                    bounds.push(parseNonNegativeInteger());
-                    if (peekToken().string == ",") {
-                        nextToken();
-                        bounds.push(parseNonNegativeInteger());
-                    }
-                    consumeToken(")");
-                    statement.items.push({name, bounds});
-                    
-                    if (peekToken().string != ",")
-                        break;
-                    consumeToken(",");
-                }
-                break;
-            case "option": {
-                consumeToken("base");
-                let base = parseNonNegativeInteger();
-                if (base != 0 && base != 1)
-                    throw new Error("At " + command.sourceLineNumber + ": unexpected base: " + base);
-                program.base = base;
-                break;
-            }
-            case "randomize":
-                statement.process = Basic.Randomize;
-                break;
-            case "end":
-                statement.process = Basic.End;
-                break;
-            default:
-                throw new Error("At " + command.sourceLineNumber + ": unexpected command but got: " + command.string);
-            }
-            break;
-        case "remark":
-            // Just ignore it.
-            break;
-        default:
-            throw new Error("At " + command.sourceLineNumber + ": expected command but got: " + command.string + " (of kind " + command.kind + ")");
-        }
-        
-        consumeKind("newLine");
-        return statement;
-    }
-    
-    function parseStatements()
-    {
-        let statement;
-        do {
-            statement = parseStatement();
-        } while (!statement.process || !statement.process.isBlockEnd);
-        return statement;
-    }
-    
-    return {
-        program()
-        {
-            program = {
-                process: Basic.Program,
-                statements: new Map(),
-                data: [],
-                base: 0
-            };
-            let lastStatement = parseStatements(program.statements);
-            if (lastStatement.process != Basic.End)
-                throw new Error("At " + lastStatement.sourceLineNumber + ": expected end");
-            
-            return program;
-        },
-        
-        statement(program_)
-        {
-            program = program_;
-            return parseStatement();
-        }
-    };
-}
-
diff --git a/PerformanceTests/RexBench/Basic/random.js b/PerformanceTests/RexBench/Basic/random.js
deleted file mode 100644 (file)
index 9f3b408..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2013 the V8 project authors. All rights reserved.
-// Copyright (C) 2015-2017 Apple Inc. 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.
-"use strict";
-
-// This is based on Octane's RNG.
-function createRNG(seed)
-{
-    return function() {
-        // Robert Jenkins' 32 bit integer hash function.
-        seed = ((seed + 0x7ed55d16) + (seed << 12))  & 0xffffffff;
-        seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff;
-        seed = ((seed + 0x165667b1) + (seed << 5))   & 0xffffffff;
-        seed = ((seed + 0xd3a2646c) ^ (seed << 9))   & 0xffffffff;
-        seed = ((seed + 0xfd7046c5) + (seed << 3))   & 0xffffffff;
-        seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff;
-        return (seed & 0xfffffff) / 0x10000000;
-    };
-}
-
-function createRNGWithFixedSeed()
-{
-    // This uses Octane's initial seed.
-    return createRNG(49734321);
-}
-
-function createRNGWithRandomSeed()
-{
-    return createRNG((Math.random() * 4294967296) | 0);
-}
diff --git a/PerformanceTests/RexBench/Basic/state.js b/PerformanceTests/RexBench/Basic/state.js
deleted file mode 100644 (file)
index 8565fc1..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-class State {
-    constructor(program)
-    {
-        this.values = new CaselessMap();
-        this.stringValues = new CaselessMap();
-        this.sideState = new WeakMap();
-        this.statement = null;
-        this.nextLineNumber = 0;
-        this.subStack = [];
-        this.dataIndex = 0;
-        this.program = program;
-        this.rng = createRNGWithFixedSeed();
-        
-        let addNative = (name, callback) => {
-            this.values.set(name, new NativeFunction(callback));
-        };
-        
-        addNative("abs", x => Math.abs(x));
-        addNative("atn", x => Math.atan(x));
-        addNative("cos", x => Math.cos(x));
-        addNative("exp", x => Math.exp(x));
-        addNative("int", x => Math.floor(x));
-        addNative("log", x => Math.log(x));
-        addNative("rnd", () => this.rng());
-        addNative("sgn", x => Math.sign(x));
-        addNative("sin", x => Math.sin(x));
-        addNative("sqr", x => Math.sqrt(x));
-        addNative("tan", x => Math.tan(x));
-    }
-    
-    getValue(name, numParameters)
-    {
-        if (this.values.has(name))
-            return this.values.get(name);
-
-        let result;
-        if (numParameters == 0)
-            result = new NumberValue();
-        else {
-            let dim = [];
-            while (numParameters--)
-                dim.push(11);
-            result = new NumberArray(dim);
-        }
-        this.values.set(name, result);
-        return result;
-    }
-    
-    getSideState(key)
-    {
-        if (!this.sideState.has(key)) {
-            let result = {};
-            this.sideState.set(key, result);
-            return result;
-        }
-        return this.sideState.get(key);
-    }
-    
-    abort(text)
-    {
-        if (!this.statement)
-            throw new Error("At beginning of execution: " + text);
-        throw new Error("At " + this.statement.sourceLineNumber + ": " + text);
-    }
-    
-    validate(predicate, text)
-    {
-        if (!predicate)
-            this.abort(text);
-    }
-}
-
diff --git a/PerformanceTests/RexBench/Basic/stress-test.js b/PerformanceTests/RexBench/Basic/stress-test.js
deleted file mode 100644 (file)
index 1d12ec6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-load("ast.js");
-load("basic.js");
-load("caseless_map.js");
-load("lexer.js");
-load("number.js");
-load("parser.js");
-load("random.js");
-load("state.js");
-load("util.js");
-load("benchmark.js");
-
-let benchmark = new BasicBenchmark();
-let before = preciseTime();
-
-// Run for at least 10 iterations.
-for (let i = 0; i < 10; ++i) {
-    print("Running mandatory iteration #" + (i + 1) + ":");
-    benchmark.runIteration();
-}
-
-// Run until we have been running for two seconds.
-while (preciseTime() < before + 2) {
-    print("Running bonus iteration:");
-    benchmark.runIteration();
-}
-
-print("Success!");
-
diff --git a/PerformanceTests/RexBench/Basic/util.js b/PerformanceTests/RexBench/Basic/util.js
deleted file mode 100644 (file)
index eff6517..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-let currentTime;
-if (this.performance && performance.now)
-    currentTime = function() { return performance.now() };
-else if (this.preciseTime)
-    currentTime = function() { return preciseTime() * 1000; };
-else
-    currentTime = function() { return +new Date(); };
-
index d0134a6..28eaece 100644 (file)
@@ -20,8 +20,6 @@
 
         <p>Octane RegExp is the regular-expression benchmark test from <a href="https://developers.google.com/octane/">Octane</a>.  It is a collection of regular-expressions taken from the 50 most popular web pages when Octane was written.</p>
 
-        <p>Basic is the lexer / parser part of the benchmark test of the same name from the <a href="http://browserbench.org/ARES-6/">ARES-6</a> benchmark.</p>
-
         <p>Offline Assembler is the lexer, parser and AST layer of the offline assembler for JavaScriptCore.  It has been ported to JavaScript from the original Ruby.</p>
 
         <p>UniPoker is a 5 card stud poker simulation using the Unicode playing cards code points, U+1F0A1..U+1F0DE, as the card representation in the code.  Scoring of hands is done with three regular expressions, one to check for a flush, one to check for straights, and one to check for pairs, three of a kind and four of a kind.  The last regular expression is used twice as needed to find hands with 2 pairs or a full house.
diff --git a/PerformanceTests/RexBench/basic_benchmark.js b/PerformanceTests/RexBench/basic_benchmark.js
deleted file mode 100644 (file)
index c373263..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 APPLE INC. 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. 
- */
-"use strict";
-
-const BasicBenchmarkCode = String.raw`
-<script src="benchmark.js"></script>
-<script src="Basic/ast.js"></script>
-<script src="Basic/basic.js"></script>
-<script src="Basic/caseless_map.js"></script>
-<script src="Basic/lexer.js"></script>
-<script src="Basic/number.js"></script>
-<script src="Basic/parser.js"></script>
-<script src="Basic/random.js"></script>
-<script src="Basic/state.js"></script>
-<script src="Basic/benchmark.js"></script>
-<script>
-"use strict";
-var results = [];
-var benchmark = new BasicBenchmark();
-var numIterations = 200;
-benchmark.runIterations(numIterations, results);
-reportResult(results);
-</script>`;
-
-
-let runBasicBenchmark = null;
-if (!isInBrowser) {
-    let sources = [
-        "benchmark.js"
-        , "Basic/ast.js"
-        , "Basic/basic.js"
-        , "Basic/caseless_map.js"
-        , "Basic/lexer.js"
-        , "Basic/number.js"
-        , "Basic/parser.js"
-        , "Basic/random.js"
-        , "Basic/state.js"
-        , "Basic/benchmark.js"
-    ];
-
-    runBasicBenchmark = makeBenchmarkRunner(sources, "BasicBenchmark", 200);
-}
-
-const BasicBenchmarkRunner = {
-    name: "Basic",
-    code: BasicBenchmarkCode,
-    run: runBasicBenchmark,
-    cells: {}
-};
-
-if (isInBrowser) {
-    BasicBenchmarkRunner.cells = {
-        firstIteration: document.getElementById("BasicFirstIteration"),
-        averageWorstCase: document.getElementById("BasicAverageWorstCase"),
-        steadyState: document.getElementById("BasicSteadyState"),
-        message: document.getElementById("BasicMessage")
-    };
-}
index bf22d8d..00e3432 100644 (file)
@@ -51,7 +51,6 @@ load("results.js");
 load("stats.js");
 load("sunspider_benchmark.js");
 load("octane2_benchmark.js");
-load("basic_benchmark.js");
 load("offline_assembler_benchmark.js");
 load("unipoker_benchmark.js");
 load("flightplan_benchmark.js");
index a62da3a..8da9799 100644 (file)
@@ -49,7 +49,6 @@ function reportResult(...args) {
 
 driver.addBenchmark(RegexDNABenchmarkRunner);
 driver.addBenchmark(Octane2RegExpBenchmarkRunner);
-driver.addBenchmark(BasicBenchmarkRunner);
 driver.addBenchmark(OfflineAssemblerBenchmarkRunner);
 driver.addBenchmark(UniPokerBenchmarkRunner);
 driver.addBenchmark(FlightPlannerBenchmarkRunner);
index 35ab23f..7d19c12 100644 (file)
                 </span>
             </div>
         </div>
-        
-        <div class="basic test">
-            <h2 id="BasicMessage">Basic Parser</h2> 
-            
-            <div class="score">
-                <label>First Iteration</label>
-                <span id="BasicFirstIteration">
-                    <span class="value">0</span><span class="units">ms</span>                    
-                </span>
-            </div>
-            <div class="score">
-                <label>Worst 4 Iteratons</label>
-                <span id="BasicAverageWorstCase">
-                    <span class="value">0</span><span class="units">ms</span>                    
-                </span>
-            </div>
-
-            <div class="score">
-                <label>Average</label>
-                <span id="BasicSteadyState">
-                    <span class="value">0</span><span class="units">ms</span>                    
-                </span>
-            </div>
-        </div>
 
         <div class="offline assembler test">
             <h2 id="OfflineAssemblerMessage">Offline Assembler</h2> 
     <iframe id="magic" frameBorder=0></iframe>
     <script src="sunspider_benchmark.js"></script>
     <script src="octane2_benchmark.js"></script>
-    <script src="basic_benchmark.js"></script>
     <script src="offline_assembler_benchmark.js"></script>
     <script src="unipoker_benchmark.js"></script>
     <script src="flightplan_benchmark.js"></script>