# Copyright 2014 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Print HeapObjects.
define job
print ((v8::internal::HeapObject*)($arg0))->Print()
end
document job
Print a v8 JavaScript object
Usage: job tagged_ptr
end

# Print Code objects containing given PC.
define jco
job (v8::internal::Isolate::Current()->FindCodeObject((v8::internal::Address)$arg0))
end
document jco
Print a v8 Code object from an internal code address
Usage: jco pc
end

# Print TypeFeedbackVector
define jfv
print ((v8::internal::TypeFeedbackVector*)($arg0))->Print()
end
document jfv
Print a v8 TypeFeedbackVector object
Usage: jtv tagged_ptr
end

# Print DescriptorArray.
define jda
print ((v8::internal::DescriptorArray*)($arg0))->Print()
end
document jda
Print a v8 DescriptorArray object
Usage: jda tagged_ptr
end

# Print TransitionArray.
define jta
print ((v8::internal::TransitionArray*)($arg0))->Print()
end
document jta
Print a v8 TransitionArray object
Usage: jta tagged_ptr
end

# Print JavaScript stack trace.
define jst
print v8::internal::Isolate::Current()->PrintStack((FILE*) stdout, 1)
end
document jst
Print the current JavaScript stack trace
Usage: jst
end

set disassembly-flavor intel
set disable-randomization off
