1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/*
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/licenses/publicdomain/
* Contributor:
*/
var BUGNUMBER = 632003;
var summary = 'The var statement should add the property to the global if it exists on the prototype';
// Define properties on Object.prototype with various attributes and
// value-getter-setter combinations then check that a var statement
// can always define a variable with the same name in the global object.
if (typeof evaluate != "undefined") {
var global_case = def_all("global_case");
evaluate(global_case.source);
check_values(this, global_case.var_list);
}
var eval_case = def_all("eval_case");
eval(eval_case.source);
check_values(this, eval_case.var_list);
function def_all(prefix)
{
var builder, index, i, j;
builder = {source: "", var_list: []};
index = 0;
for (i = 0; i <= 1; ++i) {
for (j = 0; j <= 1; ++j) {
def({value: index});
def({value: index, writable: true});
def({get: Function("return "+index+";")});
def({set: function() { }});
def({get: Function("return "+index+";"), set: function() { }});
}
}
return builder;
function def(descriptor_seed)
{
var var_name = prefix + index;
descriptor_seed.configurable = !!i;
descriptor_seed.enumerable = !!j;
Object.defineProperty(Object.prototype, var_name, descriptor_seed);
var var_value = index + 0.5;
builder.source += "var "+var_name+" = "+var_value+";\n";
builder.var_list.push({name: var_name, expected_value: var_value});
++index;
}
}
function check_values(obj, var_list)
{
for (i = 0; i != var_list.length; ++i) {
var name = var_list[i].name;
assertEq(obj.hasOwnProperty(name), true);
assertEq(obj[name], var_list[i].expected_value);
}
}
reportCompare(true, true);
|