Changeset 36462 in webkit for trunk/JavaScriptCore/VM/Machine.cpp


Ignore:
Timestamp:
Sep 15, 2008, 4:33:25 PM (17 years ago)
Author:
[email protected]
Message:

2008-09-15 Gavin Barraclough <[email protected]>

Reviewed by Geoff Garen.

Inline code generation of eq_null/neq_null for CTI. Uses vptr checking for
StringObjectsThatAreMasqueradingAsBeingUndefined. In the long run, the
masquerading may be handled differently (through the StructureIDs - see bug
#20823).

1% on v8-tests.

  • VM/CTI.cpp: (JSC::CTI::emitJumpSlowCaseIfIsJSCell): (JSC::CTI::privateCompileMainPass): (JSC::CTI::privateCompileSlowCases):
  • VM/CTI.h:
  • VM/Machine.cpp: (JSC::Machine::Machine): (JSC::Machine::cti_op_eq_null): (JSC::Machine::cti_op_neq_null):
  • VM/Machine.h: (JSC::Machine::doesMasqueradesAsUndefined):
  • kjs/JSWrapperObject.h: (JSC::JSWrapperObject::): (JSC::JSWrapperObject::JSWrapperObject):
  • kjs/StringObject.h: (JSC::StringObject::StringObject):
  • kjs/StringObjectThatMasqueradesAsUndefined.h: (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/VM/Machine.cpp

    r36437 r36462  
    5454#include "operations.h"
    5555#include "SamplingTool.h"
     56#include "StringObjectThatMasqueradesAsUndefined.h"
    5657#include <stdio.h>
    5758
     
    572573    m_jsArrayVptr = jsArray->vptr();
    573574    static_cast<JSCell*>(jsArray)->~JSCell();
     575
     576    StringObjectThatMasqueradesAsUndefined* jsStringObjectThatMasqueradesAsUndefined = new (storage) StringObjectThatMasqueradesAsUndefined(StringObjectThatMasqueradesAsUndefined::VPtrStealingHack);
     577    m_jsStringObjectThatMasqueradesAsUndefinedVptr = jsStringObjectThatMasqueradesAsUndefined->vptr();
     578    static_cast<JSCell*>(jsStringObjectThatMasqueradesAsUndefined)->~JSCell();
    574579
    575580    JSString* jsString = new (storage) JSString(JSString::VPtrStealingHack);
     
    54025407{
    54035408    JSValue* src = ARG_src1;
     5409   
    54045410    if (src->isUndefinedOrNull())
    54055411        return jsBoolean(true);
    54065412
    5407     return jsBoolean(!JSImmediate::isImmediate(src) && static_cast<JSCell*>(src)->masqueradeAsUndefined());
     5413    return jsBoolean(ARG_exec->machine()->doesMasqueradesAsUndefined(src));
    54085414}
    54095415
     
    54145420        return jsBoolean(false);
    54155421
    5416     return jsBoolean(JSImmediate::isImmediate(src) || !static_cast<JSCell*>(src)->masqueradeAsUndefined());
     5422    return jsBoolean(!ARG_exec->machine()->doesMasqueradesAsUndefined(src));
    54175423}
    54185424
Note: See TracChangeset for help on using the changeset viewer.