~ubuntu-branches/ubuntu/saucy/mozjs17/saucy

« back to all changes in this revision

Viewing changes to js/src/tests/ecma/Statements/12.6.3-4.js

  • Committer: Package Import Robot
  • Author(s): Rico Tzschichholz
  • Date: 2013-05-25 12:24:23 UTC
  • Revision ID: package-import@ubuntu.com-20130525122423-zmxucrhtensw90xy
Tags: upstream-17.0.0
ImportĀ upstreamĀ versionĀ 17.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 
2
/* This Source Code Form is subject to the terms of the Mozilla Public
 
3
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 
4
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
5
 
 
6
 
 
7
/**
 
8
   File Name:          12.6.3-1.js
 
9
   ECMA Section:       12.6.3 The for...in Statement
 
10
   Description:
 
11
   The production IterationStatement : for ( LeftHandSideExpression in Expression )
 
12
   Statement is evaluated as follows:
 
13
 
 
14
   1.  Evaluate the Expression.
 
15
   2.  Call GetValue(Result(1)).
 
16
   3.  Call ToObject(Result(2)).
 
17
   4.  Let C be "normal completion".
 
18
   5.  Get the name of the next property of Result(3) that doesn't have the
 
19
   DontEnum attribute. If there is no such property, go to step 14.
 
20
   6.  Evaluate the LeftHandSideExpression (it may be evaluated repeatedly).
 
21
   7.  Call PutValue(Result(6), Result(5)).  PutValue( V, W ):
 
22
   1.  If Type(V) is not Reference, generate a runtime error.
 
23
   2.  Call GetBase(V).
 
24
   3.  If Result(2) is null, go to step 6.
 
25
   4.  Call the [[Put]] method of Result(2), passing GetPropertyName(V)
 
26
   for the property name and W for the value.
 
27
   5.  Return.
 
28
   6.  Call the [[Put]] method for the global object, passing
 
29
   GetPropertyName(V) for the property name and W for the value.
 
30
   7.  Return.
 
31
   8.  Evaluate Statement.
 
32
   9.  If Result(8) is a value completion, change C to be "normal completion
 
33
   after value V" where V is the value carried by Result(8).
 
34
   10. If Result(8) is a break completion, go to step 14.
 
35
   11. If Result(8) is a continue completion, go to step 5.
 
36
   12. If Result(8) is a return completion, return Result(8).
 
37
   13. Go to step 5.
 
38
   14. Return C.
 
39
 
 
40
   Author:             christine@netscape.com
 
41
   Date:               11 september 1997
 
42
*/
 
43
var SECTION = "12.6.3-4";
 
44
var VERSION = "ECMA_1";
 
45
startTest();
 
46
var TITLE   = "The for..in statement";
 
47
var BUGNUMBER="http://scopus.mcom.com/bugsplat/show_bug.cgi?id=344855";
 
48
 
 
49
writeHeaderToLog( SECTION + " "+ TITLE);
 
50
 
 
51
//  for ( LeftHandSideExpression in Expression )
 
52
//  LeftHandSideExpression:NewExpression:MemberExpression
 
53
 
 
54
var o = new MyObject();
 
55
var result = 0;
 
56
 
 
57
for ( MyObject in o ) {
 
58
  result += o[MyObject];
 
59
}
 
60
 
 
61
new TestCase( SECTION,
 
62
              "for ( MyObject in o ) { result += o[MyObject] }",
 
63
              6,
 
64
              result );
 
65
 
 
66
var result = 0;
 
67
 
 
68
for ( value in o ) {
 
69
  result += o[value];
 
70
}
 
71
 
 
72
new TestCase( SECTION,
 
73
              "for ( value in o ) { result += o[value]",
 
74
              6,
 
75
              result );
 
76
 
 
77
var value = "value";
 
78
var result = 0;
 
79
for ( value in o ) {
 
80
  result += o[value];
 
81
}
 
82
 
 
83
new TestCase( SECTION,
 
84
              "value = \"value\"; for ( value in o ) { result += o[value]",
 
85
              6,
 
86
              result );
 
87
 
 
88
var value = 0;
 
89
var result = 0;
 
90
for ( value in o ) {
 
91
  result += o[value];
 
92
}
 
93
 
 
94
new TestCase( SECTION,
 
95
              "value = 0; for ( value in o ) { result += o[value]",
 
96
              6,
 
97
              result );
 
98
 
 
99
// this causes a segv
 
100
 
 
101
var ob = { 0:"hello" };
 
102
var result = 0;
 
103
for ( ob[0] in o ) {
 
104
  result += o[ob[0]];
 
105
}
 
106
 
 
107
new TestCase( SECTION,
 
108
              "ob = { 0:\"hello\" }; for ( ob[0] in o ) { result += o[ob[0]]",
 
109
              6,
 
110
              result );
 
111
 
 
112
var result = 0;
 
113
for ( ob["0"] in o ) {
 
114
  result += o[ob["0"]];
 
115
}
 
116
 
 
117
new TestCase( SECTION,
 
118
              "value = 0; for ( ob[\"0\"] in o ) { result += o[o[\"0\"]]",
 
119
              6,
 
120
              result );
 
121
 
 
122
var result = 0;
 
123
var ob = { value:"hello" };
 
124
for ( ob[value] in o ) {
 
125
  result += o[ob[value]];
 
126
}
 
127
 
 
128
new TestCase( SECTION,
 
129
              "ob = { 0:\"hello\" }; for ( ob[value] in o ) { result += o[ob[value]]",
 
130
              6,
 
131
              result );
 
132
 
 
133
var result = 0;
 
134
for ( ob["value"] in o ) {
 
135
  result += o[ob["value"]];
 
136
}
 
137
 
 
138
new TestCase( SECTION,
 
139
              "value = 0; for ( ob[\"value\"] in o ) { result += o[ob[\"value\"]]",
 
140
              6,
 
141
              result );
 
142
 
 
143
var result = 0;
 
144
for ( ob.value in o ) {
 
145
  result += o[ob.value];
 
146
}
 
147
 
 
148
new TestCase( SECTION,
 
149
              "value = 0; for ( ob.value in o ) { result += o[ob.value]",
 
150
              6,
 
151
              result );
 
152
 
 
153
//  LeftHandSideExpression:NewExpression:MemberExpression [ Expression ]
 
154
//  LeftHandSideExpression:NewExpression:MemberExpression . Identifier
 
155
//  LeftHandSideExpression:NewExpression:new MemberExpression Arguments
 
156
//  LeftHandSideExpression:NewExpression:PrimaryExpression:( Expression )
 
157
//  LeftHandSideExpression:CallExpression:MemberExpression Arguments
 
158
//  LeftHandSideExpression:CallExpression Arguments
 
159
//  LeftHandSideExpression:CallExpression [ Expression ]
 
160
//  LeftHandSideExpression:CallExpression . Identifier
 
161
 
 
162
test();
 
163
 
 
164
function MyObject() {
 
165
  this.value = 2;
 
166
  this[0] = 4;
 
167
  return this;
 
168
}