Index: src/x64/code-stubs-x64.h |
=================================================================== |
--- src/x64/code-stubs-x64.h (revision 6881) |
+++ src/x64/code-stubs-x64.h (working copy) |
@@ -360,24 +360,35 @@ |
// 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_; |
}; |