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