Ignore:
Timestamp:
Jul 16, 2008, 3:47:32 PM (17 years ago)
Author:
[email protected]
Message:

JavaScriptCore:

2008-07-16 Geoffrey Garen <[email protected]>

Reviewed by Oliver Hunt.


First step toward putting doubles in registers: Turned Register into a
proper abstraction layer. It is no longer possible to cast a Register
to a JSValue*, or a Register& to a JSValue*&, or to access the union
inside a Register directly.


SunSpider reports no change.


In support of this change, I had to make the following mechanical changes
in a lot of places:


  1. Clients now use explicit accessors to read data out of Registers, and implicit copy constructors to write data into registers.


So, assignment that used to look like


x.u.jsValue = y;


now looks like


x = y;


And access that used to look like


x = y.u.jsValue;


now looks like


x = y.jsValue();

  1. I made generic flow control specific in opcodes that made their flow control generic by treating a Register& as a JSValue*&. This had the added benefit of removing some exception checking branches from immediate number code.
  1. I beefed up PropertySlot to support storing a Register* in a property slot. For now, only JSVariableObject's symbolTableGet and symbolTablePut use this functionality, but I expect more clients to use it in the future.


  1. I changed ArgList to be a buffer of Registers, not JSValue*'s, and I changed ArgList iterator clients to iterate Registers, not JSValue*'s.

WebCore:

2008-07-16 Geoffrey Garen <[email protected]>

Reviewed by Oliver Hunt.

Support for JavaScriptCore's first step toward putting doubles in
registers: Treat ArgList iterators as Register*'s, not JSValue*'s.

  • bindings/js/ScheduledAction.cpp: (WebCore::ScheduledAction::ScheduledAction):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/DebuggerCallFrame.cpp

    r34906 r35203  
    4747        return 0;
    4848
    49     JSFunction* function = static_cast<JSFunction*>(callFrame()[RegisterFile::Callee].u.jsValue);
     49    JSFunction* function = static_cast<JSFunction*>(callFrame()[RegisterFile::Callee].jsValue());
    5050    if (!function)
    5151        return 0;
     
    5555DebuggerCallFrame::Type DebuggerCallFrame::type() const
    5656{
    57     if (callFrame()[RegisterFile::Callee].u.jsObject)
     57    if (callFrame()[RegisterFile::Callee].jsValue())
    5858        return FunctionType;
    5959
     
    6666        return 0;
    6767
    68     return static_cast<JSObject*>(m_registers[m_codeBlock->thisRegister].u.jsValue);
     68    return static_cast<JSObject*>(m_registers[m_codeBlock->thisRegister].jsValue());
    6969}
    7070
Note: See TracChangeset for help on using the changeset viewer.