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

Side by Side Diff: Source/bindings/v8/ExceptionState.h

Issue 219263002: Improve chances for inlining of ExceptionState::throwIfNeeded() (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Drop LIKELY. Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/bindings/v8/ExceptionState.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 virtual void throwSecurityError(const String& sanitizedMessage, const String & unsanitizedMessage = String()); 79 virtual void throwSecurityError(const String& sanitizedMessage, const String & unsanitizedMessage = String());
80 80
81 bool hadException() const { return !m_exception.isEmpty() || m_code; } 81 bool hadException() const { return !m_exception.isEmpty() || m_code; }
82 void clearException(); 82 void clearException();
83 83
84 ExceptionCode code() const { return m_code; } 84 ExceptionCode code() const { return m_code; }
85 const String& message() const { return m_message; } 85 const String& message() const { return m_message; }
86 86
87 bool throwIfNeeded() 87 bool throwIfNeeded()
88 { 88 {
89 if (m_exception.isEmpty()) { 89 if (!hadException())
90 if (!m_code) 90 return false;
91 return false; 91 throwException();
92 throwDOMException(m_code, String()); // FIXME: Do we ever hit this? If so, where and why?
93 }
94
95 V8ThrowException::throwError(m_exception.newLocal(m_isolate), m_isolate) ;
96 return true; 92 return true;
97 } 93 }
98 94
99 Context context() const { return m_context; } 95 Context context() const { return m_context; }
100 const char* propertyName() const { return m_propertyName; } 96 const char* propertyName() const { return m_propertyName; }
101 const char* interfaceName() const { return m_interfaceName; } 97 const char* interfaceName() const { return m_interfaceName; }
102 98
103 void rethrowV8Exception(v8::Handle<v8::Value> value) 99 void rethrowV8Exception(v8::Handle<v8::Value> value)
104 { 100 {
105 setException(value); 101 setException(value);
106 } 102 }
107 103
108 protected: 104 protected:
109 ExceptionCode m_code; 105 ExceptionCode m_code;
110 Context m_context; 106 Context m_context;
111 String m_message; 107 String m_message;
112 const char* m_propertyName; 108 const char* m_propertyName;
113 const char* m_interfaceName; 109 const char* m_interfaceName;
114 110
115 private: 111 private:
116 void setException(v8::Handle<v8::Value>); 112 void setException(v8::Handle<v8::Value>);
113 void throwException();
117 114
118 String addExceptionContext(const String&) const; 115 String addExceptionContext(const String&) const;
119 116
120 ScopedPersistent<v8::Value> m_exception; 117 ScopedPersistent<v8::Value> m_exception;
121 v8::Handle<v8::Object> m_creationContext; 118 v8::Handle<v8::Object> m_creationContext;
122 v8::Isolate* m_isolate; 119 v8::Isolate* m_isolate;
123 }; 120 };
124 121
125 // Used if exceptions can/should not be directly thrown. 122 // Used if exceptions can/should not be directly thrown.
126 class NonThrowableExceptionState FINAL : public ExceptionState { 123 class NonThrowableExceptionState FINAL : public ExceptionState {
127 public: 124 public:
128 NonThrowableExceptionState(): ExceptionState(ExceptionState::UnknownContext, 0, 0, v8::Handle<v8::Object>(), v8::Isolate::GetCurrent()) { } 125 NonThrowableExceptionState(): ExceptionState(ExceptionState::UnknownContext, 0, 0, v8::Handle<v8::Object>(), v8::Isolate::GetCurrent()) { }
129 virtual void throwDOMException(const ExceptionCode&, const String& message) OVERRIDE; 126 virtual void throwDOMException(const ExceptionCode&, const String& message) OVERRIDE;
130 virtual void throwTypeError(const String& message = String()) OVERRIDE; 127 virtual void throwTypeError(const String& message = String()) OVERRIDE;
131 virtual void throwSecurityError(const String& sanitizedMessage, const String & unsanitizedMessage = String()) OVERRIDE; 128 virtual void throwSecurityError(const String& sanitizedMessage, const String & unsanitizedMessage = String()) OVERRIDE;
132 }; 129 };
133 130
134 // Used if any exceptions thrown are ignorable. 131 // Used if any exceptions thrown are ignorable.
135 class TrackExceptionState FINAL : public ExceptionState { 132 class TrackExceptionState FINAL : public ExceptionState {
136 public: 133 public:
137 TrackExceptionState(): ExceptionState(ExceptionState::UnknownContext, 0, 0, v8::Handle<v8::Object>(), v8::Isolate::GetCurrent()) { } 134 TrackExceptionState(): ExceptionState(ExceptionState::UnknownContext, 0, 0, v8::Handle<v8::Object>(), v8::Isolate::GetCurrent()) { }
138 virtual void throwDOMException(const ExceptionCode&, const String& message) OVERRIDE; 135 virtual void throwDOMException(const ExceptionCode&, const String& message) OVERRIDE;
139 virtual void throwTypeError(const String& message = String()) OVERRIDE; 136 virtual void throwTypeError(const String& message = String()) OVERRIDE;
140 virtual void throwSecurityError(const String& sanitizedMessage, const String & unsanitizedMessage = String()) OVERRIDE; 137 virtual void throwSecurityError(const String& sanitizedMessage, const String & unsanitizedMessage = String()) OVERRIDE;
141 }; 138 };
142 139
143 } // namespace WebCore 140 } // namespace WebCore
144 141
145 #endif // ExceptionState_h 142 #endif // ExceptionState_h
OLDNEW
« no previous file with comments | « no previous file | Source/bindings/v8/ExceptionState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698