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

Side by Side Diff: src/compiler/js-operator.cc

Issue 894683003: Introduce LanguageMode, drop StrictMode. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebased (w/ conflicts) Created 5 years, 10 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
« no previous file with comments | « src/compiler/js-operator.h ('k') | src/contexts.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/js-operator.h" 5 #include "src/compiler/js-operator.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/base/lazy-instance.h" 9 #include "src/base/lazy-instance.h"
10 #include "src/compiler/opcodes.h" 10 #include "src/compiler/opcodes.h"
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 175
176 176
177 const LoadNamedParameters& LoadNamedParametersOf(const Operator* op) { 177 const LoadNamedParameters& LoadNamedParametersOf(const Operator* op) {
178 DCHECK_EQ(IrOpcode::kJSLoadNamed, op->opcode()); 178 DCHECK_EQ(IrOpcode::kJSLoadNamed, op->opcode());
179 return OpParameter<LoadNamedParameters>(op); 179 return OpParameter<LoadNamedParameters>(op);
180 } 180 }
181 181
182 182
183 bool operator==(StoreNamedParameters const& lhs, 183 bool operator==(StoreNamedParameters const& lhs,
184 StoreNamedParameters const& rhs) { 184 StoreNamedParameters const& rhs) {
185 return lhs.strict_mode() == rhs.strict_mode() && lhs.name() == rhs.name(); 185 return lhs.language_mode() == rhs.language_mode() && lhs.name() == rhs.name();
186 } 186 }
187 187
188 188
189 bool operator!=(StoreNamedParameters const& lhs, 189 bool operator!=(StoreNamedParameters const& lhs,
190 StoreNamedParameters const& rhs) { 190 StoreNamedParameters const& rhs) {
191 return !(lhs == rhs); 191 return !(lhs == rhs);
192 } 192 }
193 193
194 194
195 size_t hash_value(StoreNamedParameters const& p) { 195 size_t hash_value(StoreNamedParameters const& p) {
196 return base::hash_combine(p.strict_mode(), p.name()); 196 return base::hash_combine(p.language_mode(), p.name());
197 } 197 }
198 198
199 199
200 std::ostream& operator<<(std::ostream& os, StoreNamedParameters const& p) { 200 std::ostream& operator<<(std::ostream& os, StoreNamedParameters const& p) {
201 return os << p.strict_mode() << ", " << Brief(*p.name().handle()); 201 return os << p.language_mode() << ", " << Brief(*p.name().handle());
202 } 202 }
203 203
204 204
205 const StoreNamedParameters& StoreNamedParametersOf(const Operator* op) { 205 const StoreNamedParameters& StoreNamedParametersOf(const Operator* op) {
206 DCHECK_EQ(IrOpcode::kJSStoreNamed, op->opcode()); 206 DCHECK_EQ(IrOpcode::kJSStoreNamed, op->opcode());
207 return OpParameter<StoreNamedParameters>(op); 207 return OpParameter<StoreNamedParameters>(op);
208 } 208 }
209 209
210 210
211 #define CACHED_OP_LIST(V) \ 211 #define CACHED_OP_LIST(V) \
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 Name##Operator() \ 253 Name##Operator() \
254 : Operator(IrOpcode::kJS##Name, properties, "JS" #Name, \ 254 : Operator(IrOpcode::kJS##Name, properties, "JS" #Name, \
255 value_input_count, Operator::ZeroIfPure(properties), \ 255 value_input_count, Operator::ZeroIfPure(properties), \
256 Operator::ZeroIfPure(properties), value_output_count, \ 256 Operator::ZeroIfPure(properties), value_output_count, \
257 Operator::ZeroIfPure(properties), 0) {} \ 257 Operator::ZeroIfPure(properties), 0) {} \
258 }; \ 258 }; \
259 Name##Operator k##Name##Operator; 259 Name##Operator k##Name##Operator;
260 CACHED_OP_LIST(CACHED) 260 CACHED_OP_LIST(CACHED)
261 #undef CACHED 261 #undef CACHED
262 262
263 template <StrictMode kStrictMode> 263 template <LanguageMode kLanguageMode>
264 struct StorePropertyOperator FINAL : public Operator1<StrictMode> { 264 struct StorePropertyOperator FINAL : public Operator1<LanguageMode> {
265 StorePropertyOperator() 265 StorePropertyOperator()
266 : Operator1<StrictMode>(IrOpcode::kJSStoreProperty, 266 : Operator1<LanguageMode>(IrOpcode::kJSStoreProperty,
267 Operator::kNoProperties, "JSStoreProperty", 3, 267 Operator::kNoProperties, "JSStoreProperty", 3,
268 1, 1, 0, 1, 0, kStrictMode) {} 268 1, 1, 0, 1, 0, kLanguageMode) {}
269 }; 269 };
270 StorePropertyOperator<SLOPPY> kStorePropertySloppyOperator; 270 StorePropertyOperator<SLOPPY> kStorePropertySloppyOperator;
271 StorePropertyOperator<STRICT> kStorePropertyStrictOperator; 271 StorePropertyOperator<STRICT> kStorePropertyStrictOperator;
272 }; 272 };
273 273
274 274
275 static base::LazyInstance<JSOperatorGlobalCache>::type kCache = 275 static base::LazyInstance<JSOperatorGlobalCache>::type kCache =
276 LAZY_INSTANCE_INITIALIZER; 276 LAZY_INSTANCE_INITIALIZER;
277 277
278 278
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 const VectorSlotPair& feedback) { 337 const VectorSlotPair& feedback) {
338 LoadPropertyParameters parameters(feedback); 338 LoadPropertyParameters parameters(feedback);
339 return new (zone()) Operator1<LoadPropertyParameters>( // -- 339 return new (zone()) Operator1<LoadPropertyParameters>( // --
340 IrOpcode::kJSLoadProperty, Operator::kNoProperties, // opcode 340 IrOpcode::kJSLoadProperty, Operator::kNoProperties, // opcode
341 "JSLoadProperty", // name 341 "JSLoadProperty", // name
342 2, 1, 1, 1, 1, 0, // counts 342 2, 1, 1, 1, 1, 0, // counts
343 parameters); // parameter 343 parameters); // parameter
344 } 344 }
345 345
346 346
347 const Operator* JSOperatorBuilder::StoreProperty(StrictMode strict_mode) { 347 const Operator* JSOperatorBuilder::StoreProperty(LanguageMode language_mode) {
348 switch (strict_mode) { 348 if (is_strict(language_mode)) {
349 case SLOPPY: 349 return &cache_.kStorePropertyStrictOperator;
350 return &cache_.kStorePropertySloppyOperator; 350 } else {
351 case STRICT: 351 return &cache_.kStorePropertySloppyOperator;
352 return &cache_.kStorePropertyStrictOperator;
353 } 352 }
354 UNREACHABLE(); 353 UNREACHABLE();
355 return nullptr; 354 return nullptr;
356 } 355 }
357 356
358 357
359 const Operator* JSOperatorBuilder::StoreNamed(StrictMode strict_mode, 358 const Operator* JSOperatorBuilder::StoreNamed(LanguageMode language_mode,
360 const Unique<Name>& name) { 359 const Unique<Name>& name) {
361 StoreNamedParameters parameters(strict_mode, name); 360 StoreNamedParameters parameters(language_mode, name);
362 return new (zone()) Operator1<StoreNamedParameters>( // -- 361 return new (zone()) Operator1<StoreNamedParameters>( // --
363 IrOpcode::kJSStoreNamed, Operator::kNoProperties, // opcode 362 IrOpcode::kJSStoreNamed, Operator::kNoProperties, // opcode
364 "JSStoreNamed", // name 363 "JSStoreNamed", // name
365 2, 1, 1, 0, 1, 0, // counts 364 2, 1, 1, 0, 1, 0, // counts
366 parameters); // parameter 365 parameters); // parameter
367 } 366 }
368 367
369 368
370 const Operator* JSOperatorBuilder::DeleteProperty(StrictMode strict_mode) { 369 const Operator* JSOperatorBuilder::DeleteProperty(LanguageMode language_mode) {
371 return new (zone()) Operator1<StrictMode>( // -- 370 return new (zone()) Operator1<LanguageMode>( // --
372 IrOpcode::kJSDeleteProperty, Operator::kNoProperties, // opcode 371 IrOpcode::kJSDeleteProperty, Operator::kNoProperties, // opcode
373 "JSDeleteProperty", // name 372 "JSDeleteProperty", // name
374 2, 1, 1, 1, 1, 0, // counts 373 2, 1, 1, 1, 1, 0, // counts
375 strict_mode); // parameter 374 language_mode); // parameter
376 } 375 }
377 376
378 377
379 const Operator* JSOperatorBuilder::LoadContext(size_t depth, size_t index, 378 const Operator* JSOperatorBuilder::LoadContext(size_t depth, size_t index,
380 bool immutable) { 379 bool immutable) {
381 ContextAccess access(depth, index, immutable); 380 ContextAccess access(depth, index, immutable);
382 return new (zone()) Operator1<ContextAccess>( // -- 381 return new (zone()) Operator1<ContextAccess>( // --
383 IrOpcode::kJSLoadContext, Operator::kNoWrite, // opcode 382 IrOpcode::kJSLoadContext, Operator::kNoWrite, // opcode
384 "JSLoadContext", // name 383 "JSLoadContext", // name
385 1, 1, 0, 1, 1, 0, // counts 384 1, 1, 0, 1, 1, 0, // counts
(...skipping 16 matching lines...) Expand all
402 return new (zone()) Operator1<Unique<String>>( // -- 401 return new (zone()) Operator1<Unique<String>>( // --
403 IrOpcode::kJSCreateCatchContext, Operator::kNoProperties, // opcode 402 IrOpcode::kJSCreateCatchContext, Operator::kNoProperties, // opcode
404 "JSCreateCatchContext", // name 403 "JSCreateCatchContext", // name
405 2, 1, 1, 1, 1, 0, // counts 404 2, 1, 1, 1, 1, 0, // counts
406 name); // parameter 405 name); // parameter
407 } 406 }
408 407
409 } // namespace compiler 408 } // namespace compiler
410 } // namespace internal 409 } // namespace internal
411 } // namespace v8 410 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-operator.h ('k') | src/contexts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698