From 41386e9cb918eed93b3f13648cbef387e371e451 Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Wed, 20 May 2015 09:56:07 +0000 Subject: webkitgtk-2.4.9 --- Source/JavaScriptCore/bytecode/CodeOrigin.cpp | 125 ++------------------------ 1 file changed, 6 insertions(+), 119 deletions(-) (limited to 'Source/JavaScriptCore/bytecode/CodeOrigin.cpp') diff --git a/Source/JavaScriptCore/bytecode/CodeOrigin.cpp b/Source/JavaScriptCore/bytecode/CodeOrigin.cpp index 15f759165..39b83fead 100644 --- a/Source/JavaScriptCore/bytecode/CodeOrigin.cpp +++ b/Source/JavaScriptCore/bytecode/CodeOrigin.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2015 Apple Inc. All rights reserved. + * Copyright (C) 2012, 2013 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -29,7 +29,7 @@ #include "CallFrame.h" #include "CodeBlock.h" #include "Executable.h" -#include "JSCInlines.h" +#include "Operations.h" namespace JSC { @@ -45,64 +45,7 @@ unsigned CodeOrigin::inlineDepth() const { return inlineDepthForCallFrame(inlineCallFrame); } - -bool CodeOrigin::isApproximatelyEqualTo(const CodeOrigin& other) const -{ - CodeOrigin a = *this; - CodeOrigin b = other; - - if (!a.isSet()) - return !b.isSet(); - if (!b.isSet()) - return false; - if (a.isHashTableDeletedValue()) - return b.isHashTableDeletedValue(); - if (b.isHashTableDeletedValue()) - return false; - - for (;;) { - ASSERT(a.isSet()); - ASSERT(b.isSet()); - - if (a.bytecodeIndex != b.bytecodeIndex) - return false; - - if ((!!a.inlineCallFrame) != (!!b.inlineCallFrame)) - return false; - - if (!a.inlineCallFrame) - return true; - - if (a.inlineCallFrame->executable.get() != b.inlineCallFrame->executable.get()) - return false; - - a = a.inlineCallFrame->caller; - b = b.inlineCallFrame->caller; - } -} - -unsigned CodeOrigin::approximateHash() const -{ - if (!isSet()) - return 0; - if (isHashTableDeletedValue()) - return 1; - - unsigned result = 2; - CodeOrigin codeOrigin = *this; - for (;;) { - result += codeOrigin.bytecodeIndex; - - if (!codeOrigin.inlineCallFrame) - return result; - - result += WTF::PtrHash::hash(codeOrigin.inlineCallFrame->executable.get()); - - codeOrigin = codeOrigin.inlineCallFrame->caller; - } -} - Vector CodeOrigin::inlineStack() const { Vector result(inlineDepth()); @@ -141,27 +84,6 @@ void CodeOrigin::dumpInContext(PrintStream& out, DumpContext*) const dump(out); } -JSFunction* InlineCallFrame::calleeConstant() const -{ - if (calleeRecovery.isConstant()) - return jsCast(calleeRecovery.constant()); - return nullptr; -} - -void InlineCallFrame::visitAggregate(SlotVisitor& visitor) -{ - // FIXME: This is an antipattern for two reasons. References introduced by the DFG - // that aren't in the original CodeBlock being compiled should be weakly referenced. - // Inline call frames aren't in the original CodeBlock, so they qualify as weak. Also, - // those weak references should already be tracked in the DFG as weak FrozenValues. So, - // there is probably no need for this. We already have assertions that this should be - // unnecessary. Finally, just marking the executable and not anything else in the inline - // call frame is almost certainly insufficient for what this method thought it was going - // to accomplish. - // https://bugs.webkit.org/show_bug.cgi?id=146613 - visitor.append(&executable); -} - JSFunction* InlineCallFrame::calleeForCallFrame(ExecState* exec) const { return jsCast(calleeRecovery.recover(exec)); @@ -173,12 +95,6 @@ CodeBlockHash InlineCallFrame::hash() const specializationKind())->hash(); } -CString InlineCallFrame::hashAsStringIfPossible() const -{ - return jsCast(executable.get())->codeBlockFor( - specializationKind())->hashAsStringIfPossible(); -} - CString InlineCallFrame::inferredName() const { return jsCast(executable.get())->inferredName().utf8(); @@ -191,7 +107,7 @@ CodeBlock* InlineCallFrame::baselineCodeBlock() const void InlineCallFrame::dumpBriefFunctionInformation(PrintStream& out) const { - out.print(inferredName(), "#", hashAsStringIfPossible()); + out.print(inferredName(), "#", hash()); } void InlineCallFrame::dumpInContext(PrintStream& out, DumpContext* context) const @@ -199,14 +115,14 @@ void InlineCallFrame::dumpInContext(PrintStream& out, DumpContext* context) cons out.print(briefFunctionInformation(), ":<", RawPointer(executable.get())); if (executable->isStrictMode()) out.print(" (StrictMode)"); - out.print(", bc#", caller.bytecodeIndex, ", ", kind); + out.print(", bc#", caller.bytecodeIndex, ", ", specializationKind()); if (isClosureCall) out.print(", closure call"); else out.print(", known callee: ", inContext(calleeRecovery.constant(), context)); out.print(", numArgs+this = ", arguments.size()); - out.print(", stackOffset = ", stackOffset); - out.print(" (", virtualRegisterForLocal(0), " maps to ", virtualRegisterForLocal(0) + stackOffset, ")>"); + out.print(", stack < loc", VirtualRegister(stackOffset).toLocal()); + out.print(">"); } void InlineCallFrame::dump(PrintStream& out) const @@ -216,32 +132,3 @@ void InlineCallFrame::dump(PrintStream& out) const } // namespace JSC -namespace WTF { - -void printInternal(PrintStream& out, JSC::InlineCallFrame::Kind kind) -{ - switch (kind) { - case JSC::InlineCallFrame::Call: - out.print("Call"); - return; - case JSC::InlineCallFrame::Construct: - out.print("Construct"); - return; - case JSC::InlineCallFrame::CallVarargs: - out.print("CallVarargs"); - return; - case JSC::InlineCallFrame::ConstructVarargs: - out.print("ConstructVarargs"); - return; - case JSC::InlineCallFrame::GetterCall: - out.print("GetterCall"); - return; - case JSC::InlineCallFrame::SetterCall: - out.print("SetterCall"); - return; - } - RELEASE_ASSERT_NOT_REACHED(); -} - -} // namespace WTF - -- cgit v1.2.1