Index: src/ic/ic.cc |
diff --git a/src/ic/ic.cc b/src/ic/ic.cc |
index a6ae92a892c06ac9dcc88ecf093a0201e9f0eb12..7a42d23f0c748c6095bb16721c4e9b6cff50b250 100644 |
--- a/src/ic/ic.cc |
+++ b/src/ic/ic.cc |
@@ -2568,7 +2568,7 @@ MaybeHandle<Object> BinaryOpIC::Transition( |
// Compute the actual result using the builtin for the binary operation. |
Object* builtin = isolate()->js_builtins_object()->javascript_builtin( |
- TokenToJSBuiltin(state.op())); |
+ TokenToJSBuiltin(state.op(), state.language_mode())); |
Handle<JSFunction> function = handle(JSFunction::cast(builtin), isolate()); |
Handle<Object> result; |
ASSIGN_RETURN_ON_EXCEPTION( |
@@ -2805,43 +2805,62 @@ RUNTIME_FUNCTION(Unreachable) { |
} |
-Builtins::JavaScript BinaryOpIC::TokenToJSBuiltin(Token::Value op) { |
- switch (op) { |
- default: |
- UNREACHABLE(); |
- case Token::ADD: |
- return Builtins::ADD; |
- break; |
- case Token::SUB: |
- return Builtins::SUB; |
- break; |
- case Token::MUL: |
- return Builtins::MUL; |
- break; |
- case Token::DIV: |
- return Builtins::DIV; |
- break; |
- case Token::MOD: |
- return Builtins::MOD; |
- break; |
- case Token::BIT_OR: |
- return Builtins::BIT_OR; |
- break; |
- case Token::BIT_AND: |
- return Builtins::BIT_AND; |
- break; |
- case Token::BIT_XOR: |
- return Builtins::BIT_XOR; |
- break; |
- case Token::SAR: |
- return Builtins::SAR; |
- break; |
- case Token::SHR: |
- return Builtins::SHR; |
- break; |
- case Token::SHL: |
- return Builtins::SHL; |
- break; |
+Builtins::JavaScript BinaryOpIC::TokenToJSBuiltin(Token::Value op, |
+ LanguageMode language_mode) { |
+ if (is_strong(language_mode)) { |
+ switch (op) { |
rossberg
2015/04/24 09:50:20
Nit: to compress a little, can you put the returns
conradw
2015/04/24 10:55:16
Sort of done, compressed the switch but putting th
|
+ default: |
+ UNREACHABLE(); |
+ case Token::ADD: |
+ return Builtins::ADD; |
+ case Token::SUB: |
+ return Builtins::SUB_STRONG; |
+ case Token::MUL: |
+ return Builtins::MUL_STRONG; |
+ case Token::DIV: |
+ return Builtins::DIV_STRONG; |
+ case Token::MOD: |
+ return Builtins::MOD_STRONG; |
+ case Token::BIT_OR: |
+ return Builtins::BIT_OR; |
+ case Token::BIT_AND: |
+ return Builtins::BIT_AND; |
+ case Token::BIT_XOR: |
+ return Builtins::BIT_XOR; |
+ case Token::SAR: |
+ return Builtins::SAR; |
+ case Token::SHR: |
+ return Builtins::SHR; |
+ case Token::SHL: |
+ return Builtins::SHL; |
+ } |
+ } else { |
+ switch (op) { |
+ default: |
+ UNREACHABLE(); |
+ case Token::ADD: |
+ return Builtins::ADD; |
+ case Token::SUB: |
+ return Builtins::SUB; |
+ case Token::MUL: |
+ return Builtins::MUL; |
+ case Token::DIV: |
+ return Builtins::DIV; |
+ case Token::MOD: |
+ return Builtins::MOD; |
+ case Token::BIT_OR: |
+ return Builtins::BIT_OR; |
+ case Token::BIT_AND: |
+ return Builtins::BIT_AND; |
+ case Token::BIT_XOR: |
+ return Builtins::BIT_XOR; |
+ case Token::SAR: |
+ return Builtins::SAR; |
+ case Token::SHR: |
+ return Builtins::SHR; |
+ case Token::SHL: |
+ return Builtins::SHL; |
+ } |
} |
} |