Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(715)

Side by Side Diff: test/preparser/strict-identifiers.pyt

Issue 7207007: Proper handling of future reserved words in strict and normal mode. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/mjsunit/strict-mode.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2011 the V8 project authors. All rights reserved. 1 # Copyright 2011 the V8 project authors. All rights reserved.
2 # Redistribution and use in source and binary forms, with or without 2 # Redistribution and use in source and binary forms, with or without
3 # modification, are permitted provided that the following conditions are 3 # modification, are permitted provided that the following conditions are
4 # met: 4 # met:
5 # 5 #
6 # * Redistributions of source code must retain the above copyright 6 # * Redistributions of source code must retain the above copyright
7 # notice, this list of conditions and the following disclaimer. 7 # notice, this list of conditions and the following disclaimer.
8 # * Redistributions in binary form must reproduce the above 8 # * Redistributions in binary form must reproduce the above
9 # copyright notice, this list of conditions and the following 9 # copyright notice, this list of conditions and the following
10 # disclaimer in the documentation and/or other materials provided 10 # disclaimer in the documentation and/or other materials provided
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 ++$id; 157 ++$id;
158 --$id; 158 --$id;
159 $id += 10; 159 $id += 10;
160 $id -= 10; 160 $id -= 10;
161 try {} catch ($id) { } 161 try {} catch ($id) { }
162 function $id($id) { } 162 function $id($id) { }
163 x = {$id: 42}; 163 x = {$id: 42};
164 x = {get $id() {}, set $id(value) {}}; 164 x = {get $id() {}, set $id(value) {}};
165 """) 165 """)
166 166
167 identifier_name_source = """
168 var x = {$id: 42};
169 x = {get $id() {}, set $id(value) {}};
170 x.$id = 42;
171 function foo() { "use strict;" }
172 x = {$id: 42};
173 x = {get $id() {}, set $id(value) {}};
174 x.$id = 42;
175 """
176
177 identifier_name = Template("identifier_name-$id", identifier_name_source)
178 identifier_name_strict = StrictTemplate("identifier_name_strict-$id",
179 identifier_name_source)
180
167 # ---------------------------------------------------------------------- 181 # ----------------------------------------------------------------------
168 # Run tests 182 # Run tests
169 183
170 # eval and arguments have specific exceptions for different uses. 184 # eval and arguments have specific exceptions for different uses.
171 for id in ["eval", "arguments"]: 185 for id in ["eval", "arguments"]:
172 arg_name_own({"id": id}, "strict_param_name") 186 arg_name_own({"id": id}, "strict_param_name")
173 arg_name_nested({"id": id}, "strict_param_name") 187 arg_name_nested({"id": id}, "strict_param_name")
174 func_name_own({"id": id}, "strict_function_name") 188 func_name_own({"id": id}, "strict_function_name")
175 func_name_nested({"id": id}, "strict_function_name") 189 func_name_nested({"id": id}, "strict_function_name")
176 setter_arg({"id": id}, "strict_param_name") 190 setter_arg({"id": id}, "strict_param_name")
177 for op in assign_ops.keys(): 191 for op in assign_ops.keys():
178 assign_var({"id": id, "op":op, "opname": assign_ops[op]}, 192 assign_var({"id": id, "op":op, "opname": assign_ops[op]},
179 "strict_lhs_assignment") 193 "strict_lhs_assignment")
180 catch_var({"id": id}, "strict_catch_variable") 194 catch_var({"id": id}, "strict_catch_variable")
181 declare_var({"id": id}, "strict_var_name") 195 declare_var({"id": id}, "strict_var_name")
182 prefix_var({"id": id, "op":"++", "opname":"inc"}, "strict_lhs_prefix") 196 prefix_var({"id": id, "op":"++", "opname":"inc"}, "strict_lhs_prefix")
183 prefix_var({"id": id, "op":"--", "opname":"dec"}, "strict_lhs_prefix") 197 prefix_var({"id": id, "op":"--", "opname":"dec"}, "strict_lhs_prefix")
184 postfix_var({"id": id, "op":"++", "opname":"inc"}, "strict_lhs_postfix") 198 postfix_var({"id": id, "op":"++", "opname":"inc"}, "strict_lhs_postfix")
185 postfix_var({"id": id, "op":"--", "opname":"dec"}, "strict_lhs_postfix") 199 postfix_var({"id": id, "op":"--", "opname":"dec"}, "strict_lhs_postfix")
186 non_strict_use({"id": id}, None) 200 non_strict_use({"id": id}, None)
187 201
188 202
189 # Reserved words just throw the same exception in all cases 203 # Reserved words just throw the same exception in all cases
190 # (with "const" being special, as usual). 204 # (with "const" being special, as usual).
191 for reserved_word in reserved_words + strict_reserved_words: 205 for reserved_word in reserved_words + strict_reserved_words:
192 message = "strict_reserved_word" 206 if (reserved_word in strict_reserved_words):
193 if (reserved_word == "const"): message = "unexpected_token" 207 message = "strict_reserved_word"
208 elif (reserved_word == "const"):
209 message = "unexpected_token"
210 else:
211 message = "reserved_word"
194 arg_name_own({"id":reserved_word}, message) 212 arg_name_own({"id":reserved_word}, message)
195 arg_name_nested({"id":reserved_word}, message) 213 arg_name_nested({"id":reserved_word}, message)
196 setter_arg({"id": reserved_word}, message) 214 setter_arg({"id": reserved_word}, message)
197 func_name_own({"id":reserved_word}, message) 215 func_name_own({"id":reserved_word}, message)
198 func_name_nested({"id":reserved_word}, message) 216 func_name_nested({"id":reserved_word}, message)
199 for op in assign_ops.keys(): 217 for op in assign_ops.keys():
200 assign_var({"id":reserved_word, "op":op, "opname": assign_ops[op]}, message) 218 assign_var({"id":reserved_word, "op":op, "opname": assign_ops[op]}, message)
201 catch_var({"id":reserved_word}, message) 219 catch_var({"id":reserved_word}, message)
202 declare_var({"id":reserved_word}, message) 220 declare_var({"id":reserved_word}, message)
203 prefix_var({"id":reserved_word, "op":"++", "opname":"inc"}, message) 221 prefix_var({"id":reserved_word, "op":"++", "opname":"inc"}, message)
204 prefix_var({"id":reserved_word, "op":"--", "opname":"dec"}, message) 222 prefix_var({"id":reserved_word, "op":"--", "opname":"dec"}, message)
205 postfix_var({"id":reserved_word, "op":"++", "opname":"inc"}, message) 223 postfix_var({"id":reserved_word, "op":"++", "opname":"inc"}, message)
206 postfix_var({"id":reserved_word, "op":"--", "opname":"dec"}, message) 224 postfix_var({"id":reserved_word, "op":"--", "opname":"dec"}, message)
207 read_var({"id": reserved_word}, message) 225 read_var({"id": reserved_word}, message)
226 identifier_name({"id": reserved_word}, None);
227 identifier_name_strict({"id": reserved_word}, None);
208 228
209 229
230 # Future reserved words in strict mode behave like normal identifiers
231 # in a non strict context.
232 for reserved_word in strict_reserved_words:
233 non_strict_use({"id": id}, None)
OLDNEW
« no previous file with comments | « test/mjsunit/strict-mode.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698