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

Side by Side Diff: src/messages.cc

Issue 1909353002: [wasm] Make wasm info available on the stack trace (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@wasm-offset-table-3
Patch Set: more gcmole problems Created 4 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
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/messages.h" 5 #include "src/messages.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/execution.h" 8 #include "src/execution.h"
9 #include "src/isolate-inl.h" 9 #include "src/isolate-inl.h"
10 #include "src/string-builder.h" 10 #include "src/string-builder.h"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 Isolate* isolate, Handle<Object> data) { 161 Isolate* isolate, Handle<Object> data) {
162 HandleScope scope(isolate); 162 HandleScope scope(isolate);
163 return GetMessage(isolate, data)->ToCString(DISALLOW_NULLS); 163 return GetMessage(isolate, data)->ToCString(DISALLOW_NULLS);
164 } 164 }
165 165
166 166
167 CallSite::CallSite(Isolate* isolate, Handle<JSObject> call_site_obj) 167 CallSite::CallSite(Isolate* isolate, Handle<JSObject> call_site_obj)
168 : isolate_(isolate) { 168 : isolate_(isolate) {
169 Handle<Object> maybe_function = JSObject::GetDataProperty( 169 Handle<Object> maybe_function = JSObject::GetDataProperty(
170 call_site_obj, isolate->factory()->call_site_function_symbol()); 170 call_site_obj, isolate->factory()->call_site_function_symbol());
171 if (!maybe_function->IsJSFunction()) return; 171 Handle<Object> maybe_wasm_func_index;
172 if (maybe_function->IsJSFunction()) {
173 // javascript
174 fun_ = Handle<JSFunction>::cast(maybe_function);
175 receiver_ = JSObject::GetDataProperty(
176 call_site_obj, isolate->factory()->call_site_receiver_symbol());
177 } else if (!(maybe_wasm_func_index = JSObject::GetDataProperty(
178 call_site_obj,
179 isolate->factory()->call_site_wasm_func_index_symbol()))
180 ->IsUndefined()) {
181 // wasm
182 wasm_obj_ = JSObject::GetDataProperty(
183 call_site_obj, isolate->factory()->call_site_wasm_obj_symbol());
184 CHECK(maybe_wasm_func_index->ToUint32(&wasm_func_index_));
185 } else {
186 return;
187 }
172 188
173 fun_ = Handle<JSFunction>::cast(maybe_function);
174 receiver_ = JSObject::GetDataProperty(
175 call_site_obj, isolate->factory()->call_site_receiver_symbol());
176 CHECK(JSObject::GetDataProperty( 189 CHECK(JSObject::GetDataProperty(
177 call_site_obj, isolate->factory()->call_site_position_symbol()) 190 call_site_obj, isolate->factory()->call_site_position_symbol())
178 ->ToInt32(&pos_)); 191 ->ToInt32(&pos_));
179 } 192 }
180 193
181 194
182 Handle<Object> CallSite::GetFileName() { 195 Handle<Object> CallSite::GetFileName() {
183 Handle<Object> script(fun_->shared()->script(), isolate_); 196 Object* script;
184 if (script->IsScript()) { 197 if (!IsJavaScript() || !(script = fun_->shared()->script())->IsScript())
185 return Handle<Object>(Handle<Script>::cast(script)->name(), isolate_); 198 return isolate_->factory()->null_value();
186 } 199 return Handle<Object>(Script::cast(script)->name(), isolate_);
187 return isolate_->factory()->null_value();
188 } 200 }
189 201
190 202
191 Handle<Object> CallSite::GetFunctionName() { 203 Handle<Object> CallSite::GetFunctionName() {
204 if (!IsJavaScript()) return isolate_->factory()->null_value();
titzer 2016/04/22 12:16:25 We probably want to use the WASM function name her
Clemens Hammacher 2016/04/26 14:00:10 Oh, definitely. Forgot to change this. Nice catch!
192 Handle<String> result = JSFunction::GetName(fun_); 205 Handle<String> result = JSFunction::GetName(fun_);
193 if (result->length() != 0) return result; 206 if (result->length() != 0) return result;
194 207
195 Handle<Object> script(fun_->shared()->script(), isolate_); 208 Handle<Object> script(fun_->shared()->script(), isolate_);
196 if (script->IsScript() && 209 if (script->IsScript() &&
197 Handle<Script>::cast(script)->compilation_type() == 210 Handle<Script>::cast(script)->compilation_type() ==
198 Script::COMPILATION_TYPE_EVAL) { 211 Script::COMPILATION_TYPE_EVAL) {
199 return isolate_->factory()->eval_string(); 212 return isolate_->factory()->eval_string();
200 } 213 }
201 return isolate_->factory()->null_value(); 214 return isolate_->factory()->null_value();
202 } 215 }
203 216
204
205 Handle<Object> CallSite::GetScriptNameOrSourceUrl() { 217 Handle<Object> CallSite::GetScriptNameOrSourceUrl() {
206 Handle<Object> script_obj(fun_->shared()->script(), isolate_); 218 Object* script_obj;
207 if (script_obj->IsScript()) { 219 if (!IsJavaScript() || !(script_obj = fun_->shared()->script())->IsScript())
208 Handle<Script> script = Handle<Script>::cast(script_obj); 220 return isolate_->factory()->null_value();
209 Object* source_url = script->source_url(); 221 Handle<Script> script(Script::cast(script_obj), isolate_);
210 if (source_url->IsString()) return Handle<Object>(source_url, isolate_); 222 Object* source_url = script->source_url();
211 return Handle<Object>(script->name(), isolate_); 223 if (source_url->IsString()) return Handle<Object>(source_url, isolate_);
212 } 224 return Handle<Object>(script->name(), isolate_);
213 return isolate_->factory()->null_value();
214 } 225 }
215 226
216
217 bool CheckMethodName(Isolate* isolate, Handle<JSObject> obj, Handle<Name> name, 227 bool CheckMethodName(Isolate* isolate, Handle<JSObject> obj, Handle<Name> name,
218 Handle<JSFunction> fun, 228 Handle<JSFunction> fun,
219 LookupIterator::Configuration config) { 229 LookupIterator::Configuration config) {
220 LookupIterator iter = 230 LookupIterator iter =
221 LookupIterator::PropertyOrElement(isolate, obj, name, config); 231 LookupIterator::PropertyOrElement(isolate, obj, name, config);
222 if (iter.state() == LookupIterator::DATA) { 232 if (iter.state() == LookupIterator::DATA) {
223 return iter.GetDataValue().is_identical_to(fun); 233 return iter.GetDataValue().is_identical_to(fun);
224 } else if (iter.state() == LookupIterator::ACCESSOR) { 234 } else if (iter.state() == LookupIterator::ACCESSOR) {
225 Handle<Object> accessors = iter.GetAccessors(); 235 Handle<Object> accessors = iter.GetAccessors();
226 if (accessors->IsAccessorPair()) { 236 if (accessors->IsAccessorPair()) {
227 Handle<AccessorPair> pair = Handle<AccessorPair>::cast(accessors); 237 Handle<AccessorPair> pair = Handle<AccessorPair>::cast(accessors);
228 return pair->getter() == *fun || pair->setter() == *fun; 238 return pair->getter() == *fun || pair->setter() == *fun;
229 } 239 }
230 } 240 }
231 return false; 241 return false;
232 } 242 }
233 243
234 244
235 Handle<Object> CallSite::GetMethodName() { 245 Handle<Object> CallSite::GetMethodName() {
236 if (receiver_->IsNull() || receiver_->IsUndefined()) { 246 if (!IsJavaScript() || receiver_->IsNull() || receiver_->IsUndefined()) {
237 return isolate_->factory()->null_value(); 247 return isolate_->factory()->null_value();
238 } 248 }
239 Handle<JSReceiver> receiver = 249 Handle<JSReceiver> receiver =
240 Object::ToObject(isolate_, receiver_).ToHandleChecked(); 250 Object::ToObject(isolate_, receiver_).ToHandleChecked();
241 if (!receiver->IsJSObject()) { 251 if (!receiver->IsJSObject()) {
242 return isolate_->factory()->null_value(); 252 return isolate_->factory()->null_value();
243 } 253 }
244 254
245 Handle<JSObject> obj = Handle<JSObject>::cast(receiver); 255 Handle<JSObject> obj = Handle<JSObject>::cast(receiver);
246 Handle<Object> function_name(fun_->shared()->name(), isolate_); 256 Handle<Object> function_name(fun_->shared()->name(), isolate_);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 result = inner_scope.CloseAndEscape(name_key); 294 result = inner_scope.CloseAndEscape(name_key);
285 } 295 }
286 } 296 }
287 297
288 if (!result.is_null()) return outer_scope.CloseAndEscape(result); 298 if (!result.is_null()) return outer_scope.CloseAndEscape(result);
289 return isolate_->factory()->null_value(); 299 return isolate_->factory()->null_value();
290 } 300 }
291 301
292 302
293 int CallSite::GetLineNumber() { 303 int CallSite::GetLineNumber() {
294 if (pos_ >= 0) { 304 if (pos_ >= 0 && IsJavaScript()) {
295 Handle<Object> script_obj(fun_->shared()->script(), isolate_); 305 Handle<Object> script_obj(fun_->shared()->script(), isolate_);
296 if (script_obj->IsScript()) { 306 if (script_obj->IsScript()) {
297 Handle<Script> script = Handle<Script>::cast(script_obj); 307 Handle<Script> script = Handle<Script>::cast(script_obj);
298 return Script::GetLineNumber(script, pos_) + 1; 308 return Script::GetLineNumber(script, pos_) + 1;
299 } 309 }
300 } 310 }
301 return -1; 311 return -1;
302 } 312 }
303 313
304 314
305 int CallSite::GetColumnNumber() { 315 int CallSite::GetColumnNumber() {
306 if (pos_ >= 0) { 316 if (pos_ >= 0 && IsJavaScript()) {
307 Handle<Object> script_obj(fun_->shared()->script(), isolate_); 317 Handle<Object> script_obj(fun_->shared()->script(), isolate_);
308 if (script_obj->IsScript()) { 318 if (script_obj->IsScript()) {
309 Handle<Script> script = Handle<Script>::cast(script_obj); 319 Handle<Script> script = Handle<Script>::cast(script_obj);
310 return Script::GetColumnNumber(script, pos_) + 1; 320 return Script::GetColumnNumber(script, pos_) + 1;
311 } 321 }
312 } 322 }
313 return -1; 323 return -1;
314 } 324 }
315 325
316 326
317 bool CallSite::IsNative() { 327 bool CallSite::IsNative() {
328 if (!IsJavaScript()) return false;
318 Handle<Object> script(fun_->shared()->script(), isolate_); 329 Handle<Object> script(fun_->shared()->script(), isolate_);
319 return script->IsScript() && 330 return script->IsScript() &&
320 Handle<Script>::cast(script)->type() == Script::TYPE_NATIVE; 331 Handle<Script>::cast(script)->type() == Script::TYPE_NATIVE;
321 } 332 }
322 333
323 334
324 bool CallSite::IsToplevel() { 335 bool CallSite::IsToplevel() {
325 return receiver_->IsJSGlobalProxy() || receiver_->IsNull() || 336 return IsWasm() || receiver_->IsJSGlobalProxy() || receiver_->IsNull() ||
titzer 2016/04/22 12:16:26 I think isTopLevel for WASM should be false.
Clemens Hammacher 2016/04/26 14:00:10 Probably, yes. It's a bit unclear from the documen
326 receiver_->IsUndefined(); 337 receiver_->IsUndefined();
327 } 338 }
328 339
329 340
330 bool CallSite::IsEval() { 341 bool CallSite::IsEval() {
342 if (!IsJavaScript()) return false;
331 Handle<Object> script(fun_->shared()->script(), isolate_); 343 Handle<Object> script(fun_->shared()->script(), isolate_);
332 return script->IsScript() && 344 return script->IsScript() &&
333 Handle<Script>::cast(script)->compilation_type() == 345 Handle<Script>::cast(script)->compilation_type() ==
334 Script::COMPILATION_TYPE_EVAL; 346 Script::COMPILATION_TYPE_EVAL;
335 } 347 }
336 348
337 349
338 bool CallSite::IsConstructor() { 350 bool CallSite::IsConstructor() {
339 if (!receiver_->IsJSObject()) return false; 351 if (!IsJavaScript() || !receiver_->IsJSObject()) return false;
340 Handle<Object> constructor = 352 Handle<Object> constructor =
341 JSReceiver::GetDataProperty(Handle<JSObject>::cast(receiver_), 353 JSReceiver::GetDataProperty(Handle<JSObject>::cast(receiver_),
342 isolate_->factory()->constructor_string()); 354 isolate_->factory()->constructor_string());
343 return constructor.is_identical_to(fun_); 355 return constructor.is_identical_to(fun_);
344 } 356 }
345 357
346 358
347 Handle<String> MessageTemplate::FormatMessage(Isolate* isolate, 359 Handle<String> MessageTemplate::FormatMessage(Isolate* isolate,
348 int template_index, 360 int template_index,
349 Handle<Object> arg) { 361 Handle<Object> arg) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 builder.AppendCharacter(*c); 433 builder.AppendCharacter(*c);
422 } 434 }
423 } 435 }
424 436
425 return builder.Finish(); 437 return builder.Finish();
426 } 438 }
427 439
428 440
429 } // namespace internal 441 } // namespace internal
430 } // namespace v8 442 } // namespace v8
OLDNEW
« src/frames.h ('K') | « src/messages.h ('k') | src/profiler/allocation-tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698