OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 #define TONATIVE_VOID_PROMISE(type, var, value, info) \ | 83 #define TONATIVE_VOID_PROMISE(type, var, value, info) \ |
84 type var; \ | 84 type var; \ |
85 { \ | 85 { \ |
86 v8::TryCatch block; \ | 86 v8::TryCatch block; \ |
87 TONATIVE_VOID_PROMISE_INTERNAL(var, value, info); \ | 87 TONATIVE_VOID_PROMISE_INTERNAL(var, value, info); \ |
88 } | 88 } |
89 | 89 |
90 | 90 |
91 #define TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(var, value, exceptionState) \ | 91 #define TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(var, value, exceptionState) \ |
92 var = (value); \ | 92 var = (value); \ |
93 if (UNLIKELY(block.HasCaught() || exceptionState.throwIfNeeded())) \ | 93 if (UNLIKELY(exceptionState.throwIfNeeded())) \ |
94 return; \ | 94 return; \ |
95 | 95 |
96 #define TONATIVE_VOID_EXCEPTIONSTATE(type, var, value, exceptionState) \ | 96 #define TONATIVE_VOID_EXCEPTIONSTATE(type, var, value, exceptionState) \ |
97 type var; \ | 97 type var; \ |
98 { \ | 98 var = (value); \ |
99 v8::TryCatch block; \ | 99 if (UNLIKELY(exceptionState.throwIfNeeded())) \ |
100 V8RethrowTryCatchScope rethrow(block); \ | 100 return; |
101 TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(var, value, exceptionState); \ | |
102 } | |
103 | 101 |
104 #define TONATIVE_DEFAULT_EXCEPTIONSTATE(type, var, value, exceptionState, retVal
) \ | 102 #define TONATIVE_DEFAULT_EXCEPTIONSTATE(type, var, value, exceptionState, retVal
) \ |
105 type var;
\ | 103 type var = (value);
\ |
106 {
\ | 104 if (UNLIKELY(exceptionState.throwIfNeeded()))
\ |
107 v8::TryCatch block;
\ | 105 return retVal; |
108 V8RethrowTryCatchScope rethrow(block);
\ | |
109 var = (value);
\ | |
110 if (UNLIKELY(block.HasCaught() || exceptionState.throwIfNeeded()))
\ | |
111 return retVal;
\ | |
112 } | |
113 | 106 |
114 // We need to cancel the exception propergation when we return a rejected | 107 // We need to cancel the exception propergation when we return a rejected |
115 // Promise. | 108 // Promise. |
116 #define TONATIVE_VOID_EXCEPTIONSTATE_PROMISE_INTERNAL(var, value, exceptionState
, info, scriptState) \ | 109 #define TONATIVE_VOID_EXCEPTIONSTATE_PROMISE_INTERNAL(var, value, exceptionState
, info, scriptState) \ |
117 var = (value);
\ | 110 var = (value);
\ |
118 if (UNLIKELY(block.HasCaught())) {
\ | |
119 v8SetReturnValue(info, ScriptPromise::rejectRaw(info.GetIsolate(), block
.Exception())); \ | |
120 block.Reset();
\ | |
121 return;
\ | |
122 }
\ | |
123 if (UNLIKELY(exceptionState.hadException())) {
\ | 111 if (UNLIKELY(exceptionState.hadException())) {
\ |
124 v8SetReturnValue(info, exceptionState.reject(scriptState).v8Value());
\ | 112 v8SetReturnValue(info, exceptionState.reject(scriptState).v8Value());
\ |
125 return;
\ | 113 return;
\ |
126 } | 114 } |
127 | 115 |
128 #define TONATIVE_VOID_EXCEPTIONSTATE_PROMISE(type, var, value, exceptionState, i
nfo, scriptState) \ | 116 #define TONATIVE_VOID_EXCEPTIONSTATE_PROMISE(type, var, value, exceptionState, i
nfo, scriptState) \ |
129 type var;
\ | 117 type var;
\ |
130 {
\ | 118 TONATIVE_VOID_EXCEPTIONSTATE_PROMISE_INTERNAL(var, value, exceptionState, in
fo, scriptState); |
131 v8::TryCatch block;
\ | |
132 TONATIVE_VOID_EXCEPTIONSTATE_PROMISE_INTERNAL(var, value, exceptionState
, info, scriptState); \ | |
133 } | |
134 | 119 |
135 // type is an instance of class template V8StringResource<>, | 120 // type is an instance of class template V8StringResource<>, |
136 // but Mode argument varies; using type (not Mode) for consistency | 121 // but Mode argument varies; using type (not Mode) for consistency |
137 // with other macros and ease of code generation | 122 // with other macros and ease of code generation |
138 #define TOSTRING_VOID(type, var, value) \ | 123 #define TOSTRING_VOID(type, var, value) \ |
139 type var(value); \ | 124 type var(value); \ |
140 if (UNLIKELY(!var.prepare())) \ | 125 if (UNLIKELY(!var.prepare())) \ |
141 return; | 126 return; |
142 | 127 |
143 #define TOSTRING_VOID_INTERNAL(var, value) \ | 128 #define TOSTRING_VOID_INTERNAL(var, value) \ |
(...skipping 19 matching lines...) Expand all Loading... |
163 #define TOSTRING_VOID_PROMISE(type, var, value, info) \ | 148 #define TOSTRING_VOID_PROMISE(type, var, value, info) \ |
164 type var; \ | 149 type var; \ |
165 { \ | 150 { \ |
166 v8::TryCatch block; \ | 151 v8::TryCatch block; \ |
167 TOSTRING_VOID_PROMISE_INTERNAL(type, var, value, info); \ | 152 TOSTRING_VOID_PROMISE_INTERNAL(type, var, value, info); \ |
168 } | 153 } |
169 | 154 |
170 } // namespace blink | 155 } // namespace blink |
171 | 156 |
172 #endif // V8BindingMacros_h | 157 #endif // V8BindingMacros_h |
OLD | NEW |