Index: src/ia32/code-stubs-ia32.h |
diff --git a/src/ia32/code-stubs-ia32.h b/src/ia32/code-stubs-ia32.h |
index 4eac9a9a304ff9e608bd1a7cfb27cfaf2ed5503a..351636faf776502f5203985745c8917857af195e 100644 |
--- a/src/ia32/code-stubs-ia32.h |
+++ b/src/ia32/code-stubs-ia32.h |
@@ -272,24 +272,35 @@ class StringHelper : public AllStatic { |
// Flag that indicates how to generate code for the stub StringAddStub. |
enum StringAddFlags { |
NO_STRING_ADD_FLAGS = 0, |
- NO_STRING_CHECK_IN_STUB = 1 << 0 // Omit string check in stub. |
+ // Omit left string check in stub (left is definitely a string). |
+ NO_STRING_CHECK_LEFT_IN_STUB = 1 << 0, |
+ // Omit right string check in stub (right is definitely a string). |
+ NO_STRING_CHECK_RIGHT_IN_STUB = 1 << 1, |
+ // Omit both string checks in stub. |
+ NO_STRING_CHECK_IN_STUB = |
+ NO_STRING_CHECK_LEFT_IN_STUB | NO_STRING_CHECK_RIGHT_IN_STUB |
}; |
class StringAddStub: public CodeStub { |
public: |
- explicit StringAddStub(StringAddFlags flags) { |
- string_check_ = ((flags & NO_STRING_CHECK_IN_STUB) == 0); |
- } |
+ explicit StringAddStub(StringAddFlags flags) : flags_(flags) {} |
private: |
Major MajorKey() { return StringAdd; } |
- int MinorKey() { return string_check_ ? 0 : 1; } |
+ int MinorKey() { return flags_; } |
void Generate(MacroAssembler* masm); |
- // Should the stub check whether arguments are strings? |
- bool string_check_; |
+ void GenerateConvertArgument(MacroAssembler* masm, |
+ int stack_offset, |
+ Register arg, |
+ Register scratch1, |
+ Register scratch2, |
+ Register scratch3, |
+ Label* slow); |
+ |
+ const StringAddFlags flags_; |
}; |