| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 | 277 |
| 278 // Default number of ticks before a timeout check should be done. | 278 // Default number of ticks before a timeout check should be done. |
| 279 static const int initialTickCountThreshold = 1024; | 279 static const int initialTickCountThreshold = 1024; |
| 280 | 280 |
| 281 bool isJSArray(JSValue* v) { return !JSImmediate::isImmediate(v) && v->a
sCell()->vptr() == m_jsArrayVptr; } | 281 bool isJSArray(JSValue* v) { return !JSImmediate::isImmediate(v) && v->a
sCell()->vptr() == m_jsArrayVptr; } |
| 282 bool isJSString(JSValue* v) { return !JSImmediate::isImmediate(v) && v->
asCell()->vptr() == m_jsStringVptr; } | 282 bool isJSString(JSValue* v) { return !JSImmediate::isImmediate(v) && v->
asCell()->vptr() == m_jsStringVptr; } |
| 283 | 283 |
| 284 private: | 284 private: |
| 285 enum ExecutionFlag { Normal, InitializeAndReturn }; | 285 enum ExecutionFlag { Normal, InitializeAndReturn }; |
| 286 | 286 |
| 287 NEVER_INLINE JSValue* callEval(CallFrame*, JSObject* thisObject, ScopeCh
ainNode*, RegisterFile*, int argv, int argc, JSValue*& exceptionValue); | 287 NEVER_INLINE JSValue* callEval(CallFrame*, RegisterFile*, Register* argv
, int argc, int registerOffset, JSValue*& exceptionValue); |
| 288 JSValue* execute(EvalNode*, CallFrame*, JSObject* thisObject, int regist
erOffset, ScopeChainNode*, JSValue** exception); | 288 JSValue* execute(EvalNode*, CallFrame*, JSObject* thisObject, int global
RegisterOffset, ScopeChainNode*, JSValue** exception); |
| 289 | 289 |
| 290 NEVER_INLINE void debug(CallFrame*, DebugHookID, int firstLine, int last
Line); | 290 NEVER_INLINE void debug(CallFrame*, DebugHookID, int firstLine, int last
Line); |
| 291 | 291 |
| 292 NEVER_INLINE bool resolve(CallFrame*, Instruction*, JSValue*& exceptionV
alue); | 292 NEVER_INLINE bool resolve(CallFrame*, Instruction*, JSValue*& exceptionV
alue); |
| 293 NEVER_INLINE bool resolveSkip(CallFrame*, Instruction*, JSValue*& except
ionValue); | 293 NEVER_INLINE bool resolveSkip(CallFrame*, Instruction*, JSValue*& except
ionValue); |
| 294 NEVER_INLINE bool resolveGlobal(CallFrame*, Instruction*, JSValue*& exce
ptionValue); | 294 NEVER_INLINE bool resolveGlobal(CallFrame*, Instruction*, JSValue*& exce
ptionValue); |
| 295 NEVER_INLINE void resolveBase(CallFrame*, Instruction* vPC); | 295 NEVER_INLINE void resolveBase(CallFrame*, Instruction* vPC); |
| 296 NEVER_INLINE bool resolveBaseAndProperty(CallFrame*, Instruction*, JSVal
ue*& exceptionValue); | 296 NEVER_INLINE bool resolveBaseAndProperty(CallFrame*, Instruction*, JSVal
ue*& exceptionValue); |
| 297 NEVER_INLINE ScopeChainNode* createExceptionScope(CallFrame*, const Inst
ruction* vPC); | 297 NEVER_INLINE ScopeChainNode* createExceptionScope(CallFrame*, const Inst
ruction* vPC); |
| 298 | 298 |
| 299 NEVER_INLINE bool unwindCallFrame(CallFrame*&, JSValue*, const Instructi
on*&, CodeBlock*&); | 299 NEVER_INLINE bool unwindCallFrame(CallFrame*&, JSValue*, const Instructi
on*&, CodeBlock*&); |
| 300 NEVER_INLINE Instruction* throwException(CallFrame*&, JSValue*&, const I
nstruction*, bool); | 300 NEVER_INLINE Instruction* throwException(CallFrame*&, JSValue*&, const I
nstruction*, bool); |
| 301 NEVER_INLINE bool resolveBaseAndFunc(CallFrame*, Instruction*, JSValue*&
exceptionValue); | 301 NEVER_INLINE bool resolveBaseAndFunc(CallFrame*, Instruction*, JSValue*&
exceptionValue); |
| 302 | 302 |
| 303 static ALWAYS_INLINE CallFrame* slideRegisterWindowForCall(CodeBlock*, R
egisterFile*, CallFrame*, size_t registerOffset, int argc); | 303 static ALWAYS_INLINE CallFrame* slideRegisterWindowForCall(CodeBlock*, R
egisterFile*, CallFrame*, size_t registerOffset, int argc); |
| 304 | 304 |
| 305 static CallFrame* findFunctionCallFrame(CallFrame*, InternalFunction*); | 305 static CallFrame* findFunctionCallFrame(CallFrame*, InternalFunction*); |
| 306 | 306 |
| 307 JSValue* privateExecute(ExecutionFlag, RegisterFile*, CallFrame*, JSValu
e** exception); | 307 JSValue* privateExecute(ExecutionFlag, RegisterFile*, CallFrame*, JSValu
e** exception); |
| 308 | 308 |
| 309 void dumpCallFrame(const RegisterFile*, CallFrame*); | 309 void dumpCallFrame(CallFrame*); |
| 310 void dumpRegisters(const RegisterFile*, CallFrame*); | 310 void dumpRegisters(CallFrame*); |
| 311 | 311 |
| 312 JSValue* checkTimeout(JSGlobalObject*); | 312 JSValue* checkTimeout(JSGlobalObject*); |
| 313 void resetTimeoutCheck(); | 313 void resetTimeoutCheck(); |
| 314 | 314 |
| 315 void tryCacheGetByID(CallFrame*, CodeBlock*, Instruction*, JSValue* base
Value, const Identifier& propertyName, const PropertySlot&); | 315 void tryCacheGetByID(CallFrame*, CodeBlock*, Instruction*, JSValue* base
Value, const Identifier& propertyName, const PropertySlot&); |
| 316 void uncacheGetByID(CodeBlock*, Instruction* vPC); | 316 void uncacheGetByID(CodeBlock*, Instruction* vPC); |
| 317 void tryCachePutByID(CallFrame*, CodeBlock*, Instruction*, JSValue* base
Value, const PutPropertySlot&); | 317 void tryCachePutByID(CallFrame*, CodeBlock*, Instruction*, JSValue* base
Value, const PutPropertySlot&); |
| 318 void uncachePutByID(CodeBlock*, Instruction* vPC); | 318 void uncachePutByID(CodeBlock*, Instruction* vPC); |
| 319 | 319 |
| 320 bool isCallOpcode(Opcode opcode) { return opcode == getOpcode(op_call) |
| opcode == getOpcode(op_construct) || opcode == getOpcode(op_call_eval); } | 320 bool isCallOpcode(Opcode opcode) { return opcode == getOpcode(op_call) |
| opcode == getOpcode(op_construct) || opcode == getOpcode(op_call_eval); } |
| 321 | 321 |
| 322 #if ENABLE(CTI) | 322 #if ENABLE(CTI) |
| 323 static void throwStackOverflowPreviousFrame(CallFrame*, JSGlobalData*, v
oid*& returnAddress); | 323 static void throwStackOverflowPreviousFrame(CallFrame**, JSGlobalData*,
void*& returnAddress); |
| 324 | 324 |
| 325 void tryCTICacheGetByID(CallFrame*, CodeBlock*, void* returnAddress, JSV
alue* baseValue, const Identifier& propertyName, const PropertySlot&); | 325 void tryCTICacheGetByID(CallFrame*, CodeBlock*, void* returnAddress, JSV
alue* baseValue, const Identifier& propertyName, const PropertySlot&); |
| 326 void tryCTICachePutByID(CallFrame*, CodeBlock*, void* returnAddress, JSV
alue* baseValue, const PutPropertySlot&); | 326 void tryCTICachePutByID(CallFrame*, CodeBlock*, void* returnAddress, JSV
alue* baseValue, const PutPropertySlot&); |
| 327 | 327 |
| 328 JITCodeBuffer* jitCodeBuffer() const { return m_jitCodeBuffer.get(); } | 328 JITCodeBuffer* jitCodeBuffer() const { return m_jitCodeBuffer.get(); } |
| 329 #endif | 329 #endif |
| 330 | 330 |
| 331 SamplingTool* m_sampler; | 331 SamplingTool* m_sampler; |
| 332 | 332 |
| 333 #if ENABLE(CTI) | 333 #if ENABLE(CTI) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 352 | 352 |
| 353 #if HAVE(COMPUTED_GOTO) | 353 #if HAVE(COMPUTED_GOTO) |
| 354 Opcode m_opcodeTable[numOpcodeIDs]; // Maps OpcodeID => Opcode for compi
ling | 354 Opcode m_opcodeTable[numOpcodeIDs]; // Maps OpcodeID => Opcode for compi
ling |
| 355 HashMap<Opcode, OpcodeID> m_opcodeIDTable; // Maps Opcode => OpcodeID fo
r decompiling | 355 HashMap<Opcode, OpcodeID> m_opcodeIDTable; // Maps Opcode => OpcodeID fo
r decompiling |
| 356 #endif | 356 #endif |
| 357 }; | 357 }; |
| 358 | 358 |
| 359 } // namespace JSC | 359 } // namespace JSC |
| 360 | 360 |
| 361 #endif // Machine_h | 361 #endif // Machine_h |
| OLD | NEW |