]>
git.saurik.com Git - apple/javascriptcore.git/blob - runtime/Lookup.cpp
25b516efb0fa26e1952f5432ff5199995ddfcb47
2 * Copyright (C) 2008 Apple Inc. All rights reserved.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 #include "Executable.h"
24 #include "JSFunction.h"
28 void HashTable::createTable(JSGlobalData
* globalData
) const
31 int linkIndex
= compactHashSizeMask
+ 1;
32 HashEntry
* entries
= new HashEntry
[compactSize
];
33 for (int i
= 0; i
< compactSize
; ++i
)
35 for (int i
= 0; values
[i
].key
; ++i
) {
36 StringImpl
* identifier
= Identifier::add(globalData
, values
[i
].key
).leakRef();
37 int hashIndex
= identifier
->existingHash() & compactHashSizeMask
;
38 HashEntry
* entry
= &entries
[hashIndex
];
41 while (entry
->next()) {
42 entry
= entry
->next();
44 ASSERT(linkIndex
< compactSize
);
45 entry
->setNext(&entries
[linkIndex
++]);
46 entry
= entry
->next();
49 entry
->initialize(identifier
, values
[i
].attributes
, values
[i
].value1
, values
[i
].value2
58 void HashTable::deleteTable() const
61 int max
= compactSize
;
62 for (int i
= 0; i
!= max
; ++i
) {
63 if (StringImpl
* key
= table
[i
].key())
71 void setUpStaticFunctionSlot(ExecState
* exec
, const HashEntry
* entry
, JSObject
* thisObj
, const Identifier
& propertyName
, PropertySlot
& slot
)
73 ASSERT(thisObj
->structure()->anonymousSlotCount() > 0);
74 ASSERT(thisObj
->getAnonymousValue(0).isCell() && asObject(thisObj
->getAnonymousValue(0).asCell())->isGlobalObject());
75 ASSERT(entry
->attributes() & Function
);
76 WriteBarrierBase
<Unknown
>* location
= thisObj
->getDirectLocation(exec
->globalData(), propertyName
);
80 JSGlobalObject
* globalObject
= asGlobalObject(thisObj
->getAnonymousValue(0).asCell());
81 #if ENABLE(JIT) && ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
82 if (entry
->generator())
83 function
= new (exec
) JSFunction(exec
, globalObject
, globalObject
->functionStructure(), entry
->functionLength(), propertyName
, exec
->globalData().getHostFunction(entry
->function(), entry
->generator()));
86 function
= new (exec
) JSFunction(exec
, globalObject
, globalObject
->functionStructure(), entry
->functionLength(), propertyName
, entry
->function());
88 thisObj
->putDirectFunction(exec
->globalData(), propertyName
, function
, entry
->attributes());
89 location
= thisObj
->getDirectLocation(exec
->globalData(), propertyName
);
92 slot
.setValue(thisObj
, location
->get(), thisObj
->offsetForLocation(location
));