diff options
Diffstat (limited to 'js/src/jit-test/tests/auto-regress/bug499169.js')
-rw-r--r-- | js/src/jit-test/tests/auto-regress/bug499169.js | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/auto-regress/bug499169.js b/js/src/jit-test/tests/auto-regress/bug499169.js new file mode 100644 index 000000000..93b196a49 --- /dev/null +++ b/js/src/jit-test/tests/auto-regress/bug499169.js @@ -0,0 +1,179 @@ +// Binary: cache/js-dbg-32-30b481fd82f5-linux +// Flags: -j +// +var Native = function(k) { + var f = k.initialize; + var d = f; + var j = function(n, l, o, m) { + n.prototype[l] = o; + }; + d.alias = function(n, l, o) { + n = this.prototype[n] + return j(this, l, n, o); + }; + d.implement = function(m, l, o) { + for (var n in m) { + j(this, n, m[n], l); + } + } + return d; +}; +(function() { + var a = { + Array: Array, + Function: Function, + }; + for (var h in a) { + new Native({ + initialize: a[h], + }); + } +} ()); +Array.alias("forEach", "each"); +function $merge() { + var a = Array.slice(arguments); + a.unshift({}); + return $mixin.apply(null, a); +} +function $mixin(e) { + for (var d = 1, a = arguments.length; d < a; d++) { + var b = arguments[d]; + for (var c in b) { + var g = b[c], + f = e[c]; + e[c] = f && $type(g) == "object" && $type(f) == "object" ? $mixin(f, g) : $unlink(g); + } + } +} +function $type(a) { + if (a == undefined) { + return false; + } + if (a.$family) { + } + return typeof a; +} +function $unlink(c) { + if ($type(c) == "object") { + b = {}; + } + return b; +} +var Window = new Native({ + initialize: function(a) {}, +}); +Array.implement({ + extend: function(c) { + return this; + } +}); +Function.implement({ + extend: function(a) { + for (var b in a) { + this[b] = a[b]; + } + return this; + }, + run: function(a, b) { + return this.apply(b, a); + } +}); +function Class(b) { + var a = function() { + Object.reset(this); + var c = this.initialize ? this.initialize.apply(this, arguments) : this; + }.extend(this); + a.implement(b); + return a; +} +Object.reset = function(a, c) { + if (c == null) { + for (var e in a) { + Object.reset(a, e); + } + } + switch ($type(a[c])) { + case "object": + var d = function() {}; + d.prototype = a[c]; + var b = new d; + a[c] = Object.reset(b); + } + return a; +}; +(new Native({initialize: Class})).extend({}); + function wrap(a, b, c) { + return function() { + var d = c.apply(this, arguments); + }.extend({}); + } +Class.implement({ + implement: function(a, d) { + if ($type(a) == "object") { + for (var e in a) { + this.implement(e, a[e]); + } + } + var f = Class.Mutators[a]; + if (f) { + d = f.call(this, d); + } + var c = this.prototype; + switch ($type(d)) { + case "function": + c[a] = wrap(this, a, d); + break; + case "object": + var b = c[a]; + if ($type(b) == "object") { + $mixin(b, d); + } else { + c[a] = $unlink(d); + } + } + } +}); +Class.Mutators = { + Extends: function(a) { + this.prototype = new a; + }, + Implements: function(a) { + a.each(function(b) { + b = new b; + this.implement(b); + }, + this); + } +}; +var Events = new Class({}); +var Options = new Class({ + setOptions: function() { + this.options = $merge.run([this.options].extend(arguments)); + } +}); +var Autocompleter = {}; +Autocompleter.Base = new Class({ + Implements: [Options, Events], + options: {}, +}); +Autocompleter.Ajax = {}; +Autocompleter.Ajax.Base = new Class({ + Extends: Autocompleter.Base, + options: { + postVar: "value", + onRequest: function(){}, + } +}); +Autocompleter.Ajax.Json = new Class({ + Extends: Autocompleter.Ajax.Base, +}); +Autocompleter.JsonP = new Class({ + Extends: Autocompleter.Ajax.Json, + options: { + minLength: 1 + }, + initialize: function(el, url, options) { + this.setOptions({}); + } +}); +new Autocompleter.JsonP(); |