//@ defaultNoNoLLIntRun if $architecture == "arm"

var testCase = function (actual, expected, message) {
    if (actual !== expected) {
        throw message + ". Expected '" + expected + "', but was '" + actual + "'";
    }
};

var testValue  = 'test-value';

var A = class A {
    constructor() {
        this.value = testValue;
    }
    getConstValue () {
        return testValue;
    }
    getValue () {
        return this.value;
    }
    setValue (value) {
        this.value = value;
    }
};

var B = class B extends A {
    getParentValue() {
        var arrow  = () => super.getValue();
        return arrow();
    }
};

var C = class C {
    constructor() {
        this.value = testValue;
    }
    static getStaticValue() {
        return testValue;
    }
};

var D = class D extends C {
    static getParentStaticValue() {
        var arrow  = () => super.getStaticValue();
        return arrow();
    }
};

var E = class E extends A {
     constructor() {
         super();
     }
     get prop() {
         var arrow = () => super.getConstValue() + '-' + this.value;
         return arrow();
     }
     set prop(value) {
         var arrow = (newVal) => super.setValue(newVal);
         arrow(value);
     }
     setInitValue() {
       this.value = testValue;
     }
 };

var b = new B();
for (var i = 0; i < 10000; i++) {
    testCase(b.getParentValue(), testValue, i);
}

for (var i = 0; i < 10000; i++) {
    testCase(D.getParentStaticValue(), testValue, i);
}

var e = new E();
for (var i = 0; i < 10000; i++) {
     e.setInitValue();
     testCase(e.prop, testValue+'-'+testValue, i);
     e.prop = 'new-test-value';
     testCase(e.prop, testValue+'-new-test-value', i);
}

var F  = class F extends A {
    newMethod() {
        var arrow  = () => eval('super.getValue()');
        var r = arrow();
        return r;
    }
};

var f = new F();
for (var i=0; i < 10000; i++) {
    try {
        var result = f.newMethod();
        testCase(result, testValue, i);
     } catch(e) {
        if (!(e instanceof SyntaxError))
           throw e;
     }
}

var G = class G extends A {
     constructor() {
         super();
     }
     get prop() {
         var arrow = () => () => super.getConstValue() + '-' + this.value;
         return arrow()();
     }
     set prop(value) {
         var arrow =  () => (newVal) => this.value = newVal;
         arrow()(value);
     }
     setInitValue() {
         this.value = testValue;
     }
     getValueCB() {
         var arrow  = () => super.getValue();
         return arrow;
     }
     setValueCB() {
         var arrow =  (newVal) => this.value = newVal;
         return arrow;
     }
     getParentValue() {
         return super.getValue();
     }

     getValueBlockScope() {
         if (true) {
             var someValue ='';
             if (true) {
                 return () => {
                    if (true) {
                        let internalValue = '';
                        return super.getValue();
                    }
                 }
             }
         }
     }
     *genGetParentValue() {
         let arr = () => super.getValue();
         yield arr();
     }
     *genGetParentValueDeepArrow() {
         let arr = () => () => () => super.getValue();
         yield arr()()();
     }
 };

 var g = new G();
 for (var i = 0; i < 10000; i++) {
    g.setInitValue();
    testCase(g.prop, testValue + '-' + testValue, 'Error: Some problem with using arrow and "super" inside of the method');
    g.prop = 'new-test-value';
    testCase(g.prop, testValue + '-new-test-value', 'Error: Some problem with using arrow and "super" inside of the getter and setter');
 }

var g1 = new G();
for (var i = 0; i < 10000; i++) {
    g1.setInitValue();
    let getValue = g1.getValueCB();
    testCase(getValue(), testValue,  'Error: Some problem with using arrow and "super" inside of the method that retun arrow function');
    let setValue = g1.setValueCB();
    setValue('new-value');
    testCase(getValue(), 'new-value', 'Error: Some problem with using arrow and "super" inside of the method that retun arrow function');
    getValue = g1.getValueBlockScope();
    testCase(getValue(), 'new-value',  'Error: Some problem with using arrow and "super" with deep nesting inside of the method that retun arrow function');
    testCase(g1.genGetParentValue().next().value, 'new-value',  'Error: Some problem with using arrow and "super" with deep nesting inside of the generator method that retun arrow function');
    testCase(g1.genGetParentValueDeepArrow().next().value, 'new-value',  'Error: Some problem with using arrow and "super" with deep nesting inside of the generator method that retun arrow function');
}

var H = class H extends A {
    constructor() {
        var arrow = () => () => super.getValue();
        super();
        this.newValue  = arrow()();
    }
};

for (var i = 0; i < 10000; i++) {
    let h = new H();
    testCase(h.newValue, testValue, 'Error: Some problem with using "super" inside of the constructor');
}

var I = class I extends A {
    constructor (beforeSuper) {
        var arrow = () => super.getValue();
        if (beforeSuper)  {
            this._value = arrow();
            super();
        } else {
            super();
            this._value = arrow();
        }
    }
}

var J = class J extends A {
    constructor (beforeSuper) {
        var _value;
        var arrow = () => super.getConstValue();
        if (beforeSuper)  {
            _value = arrow();
            super();
         } else {
            super();
            _value = arrow();
        }
        this._value = _value;
    }
}

for (var i = 0; i < 10000; i++) {
    let i = new I(false);
    testCase(i._value, testValue, 'Error: Some problem with using "super" inside of the constructor');
    let j = new J(false);
    testCase(j._value, testValue, 'Error: Some problem with using "super" inside of the constructor');

    // FIXME: Problem with access to the super before super() in constructor
    // https://bugs.webkit.org/show_bug.cgi?id=152108
    //let j2 = new J(true);
    //testCase(j2._value, testValue, 'Error: Some problem with using "super" inside of the constructor');
    error = false;
    try {
        new I(true);
    } catch (e) {
        error = e instanceof ReferenceError;
    }
    testCase(error, true, 'Error: using "super" property before super() should lead to error');
}

class K extends A {
    newMethodArrowEval() {
        var arrow = () => eval('super.getValue()');
        var r = arrow();
        return r;
    }
    newMethodArrowDoubleEval() {
      var arrow = () => eval("eval('super.getValue()')");
      var r = arrow();
      return r;
    }
    newMethodArrowEvalEvalArrow() {
      var arrow = () => eval("eval('(() => super.getValue())()')");
      var r = arrow();
      return r;
    }
    newMethodArrowEvalEvalArrowEval() {
      var arrow  = () => eval("eval('(() => eval(\"super.getValue()\"))()')");
      var r = arrow();
      return r;
    }
    newMethodEval() {
        var r = eval("super.getValue()");
        return r;
    }
    newMethodEvalEval() {
        var r = eval("eval('super.getValue()')");
        return r;
    }
    newMethodEvalArrow() {
        var r = eval("(() => super.getValue())()");
        return r;
    }
    newMethodEvalEvalArrow() {
        var r = eval("eval('(() => super.getValue())()')");
        return r;
    }
    newMethodEvalEvalArrowEval() {
        var r = eval("eval('(() => eval(\"(super.getValue())\"))()')");
        return r;
    }
}

var k = new K();

for (var i = 0; i < 1000; i++) {
    testCase(k.newMethodArrowEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #1');
    testCase(k.newMethodArrowDoubleEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #2');
    testCase(k.newMethodArrowEvalEvalArrow() , testValue, 'Error: Error in lexical bind with eval and arrow function #3');
    testCase(k.newMethodArrowEvalEvalArrowEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #4');

    testCase(k.newMethodEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #5');
    testCase(k.newMethodEvalEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #6');
    testCase(k.newMethodEvalArrow() , testValue, 'Error: Error in lexical bind with eval and arrow function #7');
    testCase(k.newMethodEvalEvalArrow() , testValue, 'Error: Error in lexical bind with eval and arrow function 8');
    testCase(k.newMethodEvalEvalArrowEval() , testValue, 'Error: Error in lexical bind with eval and arrow function #9');
}
