Changeset 36851 in webkit for trunk/JavaScriptCore/kjs
- Timestamp:
- Sep 24, 2008, 10:02:14 AM (17 years ago)
- Location:
- trunk/JavaScriptCore/kjs
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/JSActivation.cpp
r36821 r36851 31 31 32 32 #include "Arguments.h" 33 #include "CodeBlock.h"34 33 #include "Machine.h" 35 #include "Register.h"36 34 #include "JSFunction.h" 37 35 … … 84 82 r.mark(); 85 83 } 86 }87 88 void JSActivation::copyRegisters()89 {90 ASSERT(!d()->registerArray);91 ASSERT(!d()->registerArraySize);92 93 size_t numParametersMinusThis = d()->functionBody->generatedByteCode().numParameters - 1;94 size_t numVars = d()->functionBody->generatedByteCode().numVars;95 size_t numLocals = numVars + numParametersMinusThis;96 97 if (!numLocals)98 return;99 100 int registerOffset = numParametersMinusThis + RegisterFile::CallFrameHeaderSize;101 size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize;102 103 Register* registerArray = copyRegisterArray(d()->registers - registerOffset, registerArraySize);104 setRegisters(registerArray + registerOffset, registerArray, registerArraySize);105 84 } 106 85 -
trunk/JavaScriptCore/kjs/JSActivation.h
r36821 r36851 30 30 #define JSActivation_h 31 31 32 #include "CodeBlock.h" 32 33 #include "JSVariableObject.h" 34 #include "RegisterFile.h" 33 35 #include "SymbolTable.h" 34 36 #include "nodes.h" … … 99 101 }; 100 102 103 inline void JSActivation::copyRegisters() 104 { 105 ASSERT(!d()->registerArray); 106 107 size_t numParametersMinusThis = d()->functionBody->generatedByteCode().numParameters - 1; 108 size_t numVars = d()->functionBody->generatedByteCode().numVars; 109 size_t numLocals = numVars + numParametersMinusThis; 110 111 if (!numLocals) 112 return; 113 114 int registerOffset = numParametersMinusThis + RegisterFile::CallFrameHeaderSize; 115 size_t registerArraySize = numLocals + RegisterFile::CallFrameHeaderSize; 116 117 Register* registerArray = copyRegisterArray(d()->registers - registerOffset, registerArraySize); 118 setRegisters(registerArray + registerOffset, registerArray); 119 } 120 101 121 } // namespace JSC 102 122 -
trunk/JavaScriptCore/kjs/JSGlobalObject.cpp
r36843 r36851 196 196 void JSGlobalObject::reset(JSValue* prototype) 197 197 { 198 // Clear before inititalizing, to avoid calling mark() on stale pointers --199 // which would be wasteful -- or uninitialized pointers -- which would be200 // dangerous. (The allocations below may cause a GC.)201 202 ASSERT(!hasCustomProperties());203 symbolTable().clear();204 setRegisters(0, 0, 0);205 206 198 ExecState* exec = d()->globalExec.get(); 207 199 -
trunk/JavaScriptCore/kjs/JSGlobalObject.h
r36821 r36851 57 57 JSGlobalObjectData(JSGlobalObject* globalObject, JSObject* thisValue) 58 58 : JSVariableObjectData(&symbolTable, 0) 59 , registerArraySize(0) 59 60 , globalScopeChain(globalObject, thisValue) 60 61 , regExpConstructor(0) … … 82 83 } 83 84 85 size_t registerArraySize; 86 84 87 JSGlobalObject* next; 85 88 JSGlobalObject* prev; … … 270 273 void reset(JSValue* prototype); 271 274 275 void setRegisters(Register* registers, Register* registerArray, size_t count); 276 272 277 void* operator new(size_t); // can only be allocated with JSGlobalData 273 278 }; 279 280 inline void JSGlobalObject::setRegisters(Register* registers, Register* registerArray, size_t count) 281 { 282 JSVariableObject::setRegisters(registers, registerArray); 283 d()->registerArraySize = count; 284 } 274 285 275 286 inline void JSGlobalObject::addStaticGlobals(GlobalPropertyInfo* globals, int count) … … 324 335 } 325 336 337 326 338 } // namespace JSC 327 339 -
trunk/JavaScriptCore/kjs/JSStaticScopeObject.h
r36821 r36851 38 38 : JSVariableObjectData(&symbolTable, ®isterStore + 1) 39 39 { 40 registerArraySize = 1;41 40 } 42 41 SymbolTable symbolTable; -
trunk/JavaScriptCore/kjs/JSVariableObject.cpp
r36821 r36851 69 69 } 70 70 71 Register* JSVariableObject::copyRegisterArray(Register* src, size_t count)72 {73 Register* registerArray = new Register[count];74 memcpy(registerArray, src, count * sizeof(Register));75 76 return registerArray;77 }78 79 void JSVariableObject::setRegisters(Register* r, Register* registerArray, size_t count)80 {81 if (registerArray != d->registerArray.get())82 d->registerArray.set(registerArray);83 d->registerArraySize = count;84 d->registers = r;85 }86 87 71 } // namespace JSC -
trunk/JavaScriptCore/kjs/JSVariableObject.h
r36821 r36851 65 65 : symbolTable(symbolTable_) 66 66 , registers(registers_) 67 , registerArraySize(0)68 67 { 69 68 ASSERT(symbolTable_); … … 73 72 Register* registers; // "r" in the register file. 74 73 OwnArrayPtr<Register> registerArray; // Independent copy of registers, used when a variable object copies its registers out of the register file. 75 size_t registerArraySize;76 74 77 75 static inline ptrdiff_t offsetOf_registers() … … 92 90 93 91 Register* copyRegisterArray(Register* src, size_t count); 94 void setRegisters(Register* r, Register* registerArray , size_t count);92 void setRegisters(Register* r, Register* registerArray); 95 93 96 94 bool symbolTableGet(const Identifier&, PropertySlot&); … … 161 159 } 162 160 161 inline Register* JSVariableObject::copyRegisterArray(Register* src, size_t count) 162 { 163 Register* registerArray = new Register[count]; 164 memcpy(registerArray, src, count * sizeof(Register)); 165 166 return registerArray; 167 } 168 169 inline void JSVariableObject::setRegisters(Register* registers, Register* registerArray) 170 { 171 ASSERT(registerArray != d->registerArray.get()); 172 d->registerArray.set(registerArray); 173 d->registers = registers; 174 } 175 163 176 } // namespace JSC 164 177
Note:
See TracChangeset
for help on using the changeset viewer.