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

Unified Diff: src/compiler/js-operator.cc

Issue 1084243005: [turbofan] Sanitize language mode for javascript operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/globals.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/js-operator.cc
diff --git a/src/compiler/js-operator.cc b/src/compiler/js-operator.cc
index 716592bd972b3928bf7fccbba0baf08f7b8ef342..f2f4f3891f04b13ff3849d0423a04dd59023bb6f 100644
--- a/src/compiler/js-operator.cc
+++ b/src/compiler/js-operator.cc
@@ -265,21 +265,23 @@ struct JSOperatorGlobalCache final {
#undef CACHED
-#define CACHED_WITH_STRONG(Name, properties, value_input_count, \
- value_output_count) \
- template <LanguageMode kLanguageMode> \
- struct Name##Operator final : public Operator1<LanguageMode> { \
- Name##Operator() \
- : Operator1<LanguageMode>(IrOpcode::kJS##Name, properties, "JS" #Name, \
- value_input_count, Operator::ZeroIfPure(properties), \
- Operator::ZeroIfEliminatable(properties), \
- value_output_count, Operator::ZeroIfPure(properties), \
- Operator::ZeroIfNoThrow(properties), kLanguageMode) {} \
- }; \
- Name##Operator<SLOPPY> k##Name##SloppyOperator; \
+#define CACHED_WITH_LANGUAGE_MODE(Name, properties, value_input_count, \
+ value_output_count) \
+ template <LanguageMode kLanguageMode> \
+ struct Name##Operator final : public Operator1<LanguageMode> { \
+ Name##Operator() \
+ : Operator1<LanguageMode>( \
+ IrOpcode::kJS##Name, properties, "JS" #Name, value_input_count, \
+ Operator::ZeroIfPure(properties), \
+ Operator::ZeroIfEliminatable(properties), value_output_count, \
+ Operator::ZeroIfPure(properties), \
+ Operator::ZeroIfNoThrow(properties), kLanguageMode) {} \
+ }; \
+ Name##Operator<SLOPPY> k##Name##SloppyOperator; \
+ Name##Operator<STRICT> k##Name##StrictOperator; \
conradw 2015/04/27 10:23:52 This change means that operators which behave iden
Name##Operator<STRONG> k##Name##StrongOperator;
- CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_STRONG)
-#undef CACHED_WITH_STRONG
+ CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE)
+#undef CACHED_WITH_LANGUAGE_MODE
template <LanguageMode kLanguageMode>
@@ -310,19 +312,24 @@ CACHED_OP_LIST(CACHED)
#undef CACHED
-#define CACHED_WITH_STRONG(Name, properties, value_input_count, \
- value_output_count) \
+#define CACHED_WITH_LANGUAGE_MODE(Name, properties, value_input_count, \
+ value_output_count) \
const Operator* JSOperatorBuilder::Name(LanguageMode language_mode) { \
- if (is_strong(language_mode)) { \
- return &cache_.k##Name##StrongOperator; \
- } else { \
- return &cache_.k##Name##SloppyOperator; \
+ switch (language_mode) { \
+ case SLOPPY: \
+ return &cache_.k##Name##SloppyOperator; \
+ case STRICT: \
+ return &cache_.k##Name##StrictOperator; \
+ case STRONG: \
+ return &cache_.k##Name##StrongOperator; \
+ case STRONG_BIT: \
+ break; /* %*!%^$#@ */ \
} \
UNREACHABLE(); \
return nullptr; \
}
-CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_STRONG)
-#undef CACHED_WITH_STRONG
+CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE)
+#undef CACHED_WITH_LANGUAGE_MODE
const Operator* JSOperatorBuilder::CallFunction(size_t arity,
« no previous file with comments | « no previous file | src/globals.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698