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 |