Changeset 37674 in webkit for trunk/JavaScriptCore/VM/Machine.cpp
- Timestamp:
- Oct 17, 2008, 11:17:31 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/VM/Machine.cpp
r37670 r37674 3983 3983 #if ENABLE(CTI) 3984 3984 3985 NEVER_INLINE static void doSetReturnAddressVMThrowTrampoline(void** returnAddress)3986 {3987 ctiSetReturnAddress(returnAddress, reinterpret_cast<void*>(ctiVMThrowTrampoline));3988 }3989 3990 3985 NEVER_INLINE void Machine::tryCTICachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, void* returnAddress, JSValue* baseValue, const PutPropertySlot& slot) 3991 3986 { … … 4199 4194 CTI::compileGetByIdChain(this, callFrame, codeBlock, structureID, chain, count, slot.cachedOffset(), returnAddress); 4200 4195 } 4196 4197 4198 NEVER_INLINE static void doSetReturnAddress(void** returnAddress, void* address) 4199 { 4200 ctiSetReturnAddress(returnAddress, address); 4201 } 4202 4203 #ifndef NDEBUG 4204 extern "C" { 4205 4206 static void jscGeneratedNativeCode() 4207 { 4208 // when executing a CTI function (which might do an allocation), we hack the return address 4209 // to pretend to be executing this function, to keep stack logging tools from blowing out 4210 // memory 4211 } 4212 4213 } 4214 4215 struct StackHack { 4216 ALWAYS_INLINE StackHack(void** location) 4217 { 4218 returnAddressLocation = location; 4219 savedReturnAddress = *returnAddressLocation; 4220 doSetReturnAddress(returnAddressLocation, reinterpret_cast<void*>(jscGeneratedNativeCode)); 4221 } 4222 ALWAYS_INLINE ~StackHack() 4223 { 4224 doSetReturnAddress(returnAddressLocation, savedReturnAddress); 4225 } 4226 4227 void** returnAddressLocation; 4228 void* savedReturnAddress; 4229 }; 4230 4231 #define CTI_STACK_HACK() StackHack stackHack(&CTI_RETURN_ADDRESS_SLOT) 4232 #define CTI_SET_RETURN_ADDRESS(addr) stackHack.savedReturnAddress = addr 4233 #define CTI_RETURN_ADDRESS stackHack.savedReturnAddress 4234 4235 #else 4236 4237 #define CTI_STACK_HACK() (void)0 4238 #define CTI_SET_RETURN_ADDRESS(addr) doSetReturnAddress(&CTI_RETURN_ADDRESS_SLOT, addr); 4239 #define CTI_RETURN_ADDRESS CTI_RETURN_ADDRESS_SLOT 4240 4241 #endif 4201 4242 4202 4243 #define VM_THROW_EXCEPTION() \ … … 4215 4256 ASSERT(ARG_globalData->exception); \ 4216 4257 ARG_globalData->throwReturnAddress = CTI_RETURN_ADDRESS; \ 4217 doSetReturnAddressVMThrowTrampoline(&CTI_RETURN_ADDRESS); \4258 CTI_SET_RETURN_ADDRESS(reinterpret_cast<void*>(ctiVMThrowTrampoline)); \ 4218 4259 } while (0) 4219 4260 … … 4251 4292 JSValue* Machine::cti_op_convert_this(CTI_ARGS) 4252 4293 { 4294 CTI_STACK_HACK(); 4295 4253 4296 JSValue* v1 = ARG_src1; 4254 4297 CallFrame* callFrame = ARG_callFrame; … … 4261 4304 void Machine::cti_op_end(CTI_ARGS) 4262 4305 { 4306 CTI_STACK_HACK(); 4307 4263 4308 ScopeChainNode* scopeChain = ARG_callFrame->scopeChain(); 4264 4309 ASSERT(scopeChain->refCount > 1); … … 4268 4313 JSValue* Machine::cti_op_add(CTI_ARGS) 4269 4314 { 4315 CTI_STACK_HACK(); 4316 4270 4317 JSValue* v1 = ARG_src1; 4271 4318 JSValue* v2 = ARG_src2; … … 4311 4358 JSValue* Machine::cti_op_pre_inc(CTI_ARGS) 4312 4359 { 4360 CTI_STACK_HACK(); 4361 4313 4362 JSValue* v = ARG_src1; 4314 4363 … … 4321 4370 void Machine::cti_timeout_check(CTI_ARGS) 4322 4371 { 4372 CTI_STACK_HACK(); 4373 4323 4374 if (ARG_globalData->machine->checkTimeout(ARG_callFrame->dynamicGlobalObject())) { 4324 4375 ARG_globalData->exception = createInterruptedExecutionException(ARG_globalData); … … 4329 4380 void Machine::cti_register_file_check(CTI_ARGS) 4330 4381 { 4382 CTI_STACK_HACK(); 4383 4331 4384 CallFrame* callFrame = ARG_callFrame; 4332 4385 CodeBlock* codeBlock = callFrame->codeBlock(); … … 4339 4392 ASSERT(ARG_globalData->exception); 4340 4393 ARG_globalData->throwReturnAddress = callFrame->returnPC(); 4341 doSetReturnAddressVMThrowTrampoline(&CTI_RETURN_ADDRESS);4394 CTI_SET_RETURN_ADDRESS(reinterpret_cast<void*>(ctiVMThrowTrampoline)); 4342 4395 } 4343 4396 } … … 4345 4398 int Machine::cti_op_loop_if_less(CTI_ARGS) 4346 4399 { 4400 CTI_STACK_HACK(); 4401 4347 4402 JSValue* src1 = ARG_src1; 4348 4403 JSValue* src2 = ARG_src2; … … 4356 4411 int Machine::cti_op_loop_if_lesseq(CTI_ARGS) 4357 4412 { 4413 CTI_STACK_HACK(); 4414 4358 4415 JSValue* src1 = ARG_src1; 4359 4416 JSValue* src2 = ARG_src2; … … 4367 4424 JSValue* Machine::cti_op_new_object(CTI_ARGS) 4368 4425 { 4426 CTI_STACK_HACK(); 4427 4369 4428 return constructEmptyObject(ARG_callFrame);; 4370 4429 } … … 4372 4431 void Machine::cti_op_put_by_id(CTI_ARGS) 4373 4432 { 4433 CTI_STACK_HACK(); 4434 4374 4435 CallFrame* callFrame = ARG_callFrame; 4375 4436 Identifier& ident = *ARG_id2; … … 4385 4446 void Machine::cti_op_put_by_id_second(CTI_ARGS) 4386 4447 { 4448 CTI_STACK_HACK(); 4449 4387 4450 PutPropertySlot slot; 4388 4451 ARG_src1->put(ARG_callFrame, *ARG_id2, ARG_src3, slot); … … 4393 4456 void Machine::cti_op_put_by_id_generic(CTI_ARGS) 4394 4457 { 4458 CTI_STACK_HACK(); 4459 4395 4460 PutPropertySlot slot; 4396 4461 ARG_src1->put(ARG_callFrame, *ARG_id2, ARG_src3, slot); … … 4400 4465 void Machine::cti_op_put_by_id_fail(CTI_ARGS) 4401 4466 { 4467 CTI_STACK_HACK(); 4468 4402 4469 CallFrame* callFrame = ARG_callFrame; 4403 4470 Identifier& ident = *ARG_id2; … … 4414 4481 JSValue* Machine::cti_op_get_by_id(CTI_ARGS) 4415 4482 { 4483 CTI_STACK_HACK(); 4484 4416 4485 CallFrame* callFrame = ARG_callFrame; 4417 4486 Identifier& ident = *ARG_id2; … … 4429 4498 JSValue* Machine::cti_op_get_by_id_second(CTI_ARGS) 4430 4499 { 4500 CTI_STACK_HACK(); 4501 4431 4502 CallFrame* callFrame = ARG_callFrame; 4432 4503 Identifier& ident = *ARG_id2; … … 4444 4515 JSValue* Machine::cti_op_get_by_id_generic(CTI_ARGS) 4445 4516 { 4517 CTI_STACK_HACK(); 4518 4446 4519 CallFrame* callFrame = ARG_callFrame; 4447 4520 Identifier& ident = *ARG_id2; … … 4457 4530 JSValue* Machine::cti_op_get_by_id_fail(CTI_ARGS) 4458 4531 { 4532 CTI_STACK_HACK(); 4533 4459 4534 CallFrame* callFrame = ARG_callFrame; 4460 4535 Identifier& ident = *ARG_id2; … … 4473 4548 JSValue* Machine::cti_op_instanceof(CTI_ARGS) 4474 4549 { 4550 CTI_STACK_HACK(); 4551 4475 4552 CallFrame* callFrame = ARG_callFrame; 4476 4553 JSValue* value = ARG_src1; … … 4514 4591 JSValue* Machine::cti_op_del_by_id(CTI_ARGS) 4515 4592 { 4593 CTI_STACK_HACK(); 4594 4516 4595 CallFrame* callFrame = ARG_callFrame; 4517 4596 Identifier& ident = *ARG_id2; … … 4526 4605 JSValue* Machine::cti_op_mul(CTI_ARGS) 4527 4606 { 4607 CTI_STACK_HACK(); 4608 4528 4609 JSValue* src1 = ARG_src1; 4529 4610 JSValue* src2 = ARG_src2; … … 4542 4623 JSValue* Machine::cti_op_new_func(CTI_ARGS) 4543 4624 { 4625 CTI_STACK_HACK(); 4626 4544 4627 return ARG_func1->makeFunction(ARG_callFrame, ARG_callFrame->scopeChain()); 4545 4628 } … … 4547 4630 void Machine::cti_op_call_profiler(CTI_ARGS) 4548 4631 { 4632 CTI_STACK_HACK(); 4633 4549 4634 ASSERT(*ARG_profilerReference); 4550 4635 (*ARG_profilerReference)->willExecute(ARG_callFrame, static_cast<JSFunction*>(ARG_src1)); … … 4553 4638 VoidPtrPair Machine::cti_op_call_JSFunction(CTI_ARGS) 4554 4639 { 4640 CTI_STACK_HACK(); 4641 4555 4642 #ifndef NDEBUG 4556 4643 CallData callData; … … 4599 4686 void* Machine::cti_vm_lazyLinkCall(CTI_ARGS) 4600 4687 { 4688 CTI_STACK_HACK(); 4689 4601 4690 Machine* machine = ARG_globalData->machine; 4602 4691 CallFrame* callFrame = CallFrame::create(ARG_callFrame); … … 4617 4706 void* Machine::cti_vm_compile(CTI_ARGS) 4618 4707 { 4708 CTI_STACK_HACK(); 4709 4619 4710 CodeBlock* codeBlock = ARG_callFrame->codeBlock(); 4620 4711 if (!codeBlock->ctiCode) … … 4625 4716 JSValue* Machine::cti_op_push_activation(CTI_ARGS) 4626 4717 { 4718 CTI_STACK_HACK(); 4719 4627 4720 JSActivation* activation = new (ARG_globalData) JSActivation(ARG_callFrame, static_cast<FunctionBodyNode*>(ARG_callFrame->codeBlock()->ownerNode)); 4628 4721 ARG_callFrame->setScopeChain(ARG_callFrame->scopeChain()->copy()->push(activation)); … … 4632 4725 JSValue* Machine::cti_op_call_NotJSFunction(CTI_ARGS) 4633 4726 { 4727 CTI_STACK_HACK(); 4728 4634 4729 JSValue* funcVal = ARG_src1; 4635 4730 … … 4674 4769 void Machine::cti_op_create_arguments(CTI_ARGS) 4675 4770 { 4771 CTI_STACK_HACK(); 4772 4676 4773 Arguments* arguments = new (ARG_globalData) Arguments(ARG_callFrame); 4677 4774 ARG_callFrame->setCalleeArguments(arguments); … … 4681 4778 void Machine::cti_op_tear_off_activation(CTI_ARGS) 4682 4779 { 4780 CTI_STACK_HACK(); 4781 4683 4782 ASSERT(ARG_callFrame->codeBlock()->needsFullScopeChain); 4684 4783 ASSERT(ARG_src1->isObject(&JSActivation::info)); … … 4688 4787 void Machine::cti_op_tear_off_arguments(CTI_ARGS) 4689 4788 { 4789 CTI_STACK_HACK(); 4790 4690 4791 ASSERT(ARG_callFrame->codeBlock()->usesArguments && !ARG_callFrame->codeBlock()->needsFullScopeChain); 4691 4792 ARG_callFrame->optionalCalleeArguments()->copyRegisters(); … … 4694 4795 void Machine::cti_op_ret_profiler(CTI_ARGS) 4695 4796 { 4797 CTI_STACK_HACK(); 4798 4696 4799 ASSERT(*ARG_profilerReference); 4697 4800 (*ARG_profilerReference)->didExecute(ARG_callFrame, ARG_callFrame->callee()); … … 4700 4803 void Machine::cti_op_ret_scopeChain(CTI_ARGS) 4701 4804 { 4805 CTI_STACK_HACK(); 4806 4702 4807 ASSERT(ARG_callFrame->codeBlock()->needsFullScopeChain); 4703 4808 ARG_callFrame->scopeChain()->deref(); … … 4706 4811 JSValue* Machine::cti_op_new_array(CTI_ARGS) 4707 4812 { 4813 CTI_STACK_HACK(); 4814 4708 4815 ArgList argList(ARG_registers1, ARG_int2); 4709 4816 return constructArray(ARG_callFrame, argList); … … 4712 4819 JSValue* Machine::cti_op_resolve(CTI_ARGS) 4713 4820 { 4821 CTI_STACK_HACK(); 4822 4714 4823 CallFrame* callFrame = ARG_callFrame; 4715 4824 ScopeChainNode* scopeChain = callFrame->scopeChain(); … … 4739 4848 JSValue* Machine::cti_op_construct_JSConstructFast(CTI_ARGS) 4740 4849 { 4850 CTI_STACK_HACK(); 4851 4741 4852 #ifndef NDEBUG 4742 4853 ConstructData constructData; … … 4754 4865 VoidPtrPair Machine::cti_op_construct_JSConstruct(CTI_ARGS) 4755 4866 { 4867 CTI_STACK_HACK(); 4868 4756 4869 CallFrame* callFrame = ARG_callFrame; 4757 4870 … … 4814 4927 JSValue* Machine::cti_op_construct_NotJSConstruct(CTI_ARGS) 4815 4928 { 4929 CTI_STACK_HACK(); 4930 4816 4931 CallFrame* callFrame = ARG_callFrame; 4817 4932 … … 4850 4965 JSValue* Machine::cti_op_get_by_val(CTI_ARGS) 4851 4966 { 4967 CTI_STACK_HACK(); 4968 4852 4969 CallFrame* callFrame = ARG_callFrame; 4853 4970 Machine* machine = ARG_globalData->machine; … … 4882 4999 VoidPtrPair Machine::cti_op_resolve_func(CTI_ARGS) 4883 5000 { 5001 CTI_STACK_HACK(); 5002 4884 5003 CallFrame* callFrame = ARG_callFrame; 4885 5004 ScopeChainNode* scopeChain = callFrame->scopeChain(); … … 4924 5043 JSValue* Machine::cti_op_sub(CTI_ARGS) 4925 5044 { 5045 CTI_STACK_HACK(); 5046 4926 5047 JSValue* src1 = ARG_src1; 4927 5048 JSValue* src2 = ARG_src2; … … 4940 5061 void Machine::cti_op_put_by_val(CTI_ARGS) 4941 5062 { 5063 CTI_STACK_HACK(); 5064 4942 5065 CallFrame* callFrame = ARG_callFrame; 4943 5066 Machine* machine = ARG_globalData->machine; … … 4972 5095 void Machine::cti_op_put_by_val_array(CTI_ARGS) 4973 5096 { 5097 CTI_STACK_HACK(); 5098 4974 5099 CallFrame* callFrame = ARG_callFrame; 4975 5100 … … 4996 5121 JSValue* Machine::cti_op_lesseq(CTI_ARGS) 4997 5122 { 5123 CTI_STACK_HACK(); 5124 4998 5125 CallFrame* callFrame = ARG_callFrame; 4999 5126 JSValue* result = jsBoolean(jsLessEq(callFrame, ARG_src1, ARG_src2)); … … 5004 5131 int Machine::cti_op_loop_if_true(CTI_ARGS) 5005 5132 { 5133 CTI_STACK_HACK(); 5134 5006 5135 JSValue* src1 = ARG_src1; 5007 5136 … … 5015 5144 JSValue* Machine::cti_op_negate(CTI_ARGS) 5016 5145 { 5146 CTI_STACK_HACK(); 5147 5017 5148 JSValue* src = ARG_src1; 5018 5149 … … 5029 5160 JSValue* Machine::cti_op_resolve_base(CTI_ARGS) 5030 5161 { 5162 CTI_STACK_HACK(); 5163 5031 5164 return inlineResolveBase(ARG_callFrame, *ARG_id1, ARG_callFrame->scopeChain()); 5032 5165 } … … 5034 5167 JSValue* Machine::cti_op_resolve_skip(CTI_ARGS) 5035 5168 { 5169 CTI_STACK_HACK(); 5170 5036 5171 CallFrame* callFrame = ARG_callFrame; 5037 5172 ScopeChainNode* scopeChain = callFrame->scopeChain(); … … 5066 5201 JSValue* Machine::cti_op_resolve_global(CTI_ARGS) 5067 5202 { 5203 CTI_STACK_HACK(); 5204 5068 5205 CallFrame* callFrame = ARG_callFrame; 5069 5206 JSGlobalObject* globalObject = static_cast<JSGlobalObject*>(ARG_src1); … … 5094 5231 JSValue* Machine::cti_op_div(CTI_ARGS) 5095 5232 { 5233 CTI_STACK_HACK(); 5234 5096 5235 JSValue* src1 = ARG_src1; 5097 5236 JSValue* src2 = ARG_src2; … … 5110 5249 JSValue* Machine::cti_op_pre_dec(CTI_ARGS) 5111 5250 { 5251 CTI_STACK_HACK(); 5252 5112 5253 JSValue* v = ARG_src1; 5113 5254 … … 5120 5261 int Machine::cti_op_jless(CTI_ARGS) 5121 5262 { 5263 CTI_STACK_HACK(); 5264 5122 5265 JSValue* src1 = ARG_src1; 5123 5266 JSValue* src2 = ARG_src2; … … 5131 5274 JSValue* Machine::cti_op_not(CTI_ARGS) 5132 5275 { 5276 CTI_STACK_HACK(); 5277 5133 5278 JSValue* src = ARG_src1; 5134 5279 … … 5142 5287 int SFX_CALL Machine::cti_op_jtrue(CTI_ARGS) 5143 5288 { 5289 CTI_STACK_HACK(); 5290 5144 5291 JSValue* src1 = ARG_src1; 5145 5292 … … 5153 5300 VoidPtrPair Machine::cti_op_post_inc(CTI_ARGS) 5154 5301 { 5302 CTI_STACK_HACK(); 5303 5155 5304 JSValue* v = ARG_src1; 5156 5305 … … 5166 5315 JSValue* Machine::cti_op_eq(CTI_ARGS) 5167 5316 { 5317 CTI_STACK_HACK(); 5318 5168 5319 JSValue* src1 = ARG_src1; 5169 5320 JSValue* src2 = ARG_src2; … … 5179 5330 JSValue* Machine::cti_op_lshift(CTI_ARGS) 5180 5331 { 5332 CTI_STACK_HACK(); 5333 5181 5334 JSValue* val = ARG_src1; 5182 5335 JSValue* shift = ARG_src2; … … 5197 5350 JSValue* Machine::cti_op_bitand(CTI_ARGS) 5198 5351 { 5352 CTI_STACK_HACK(); 5353 5199 5354 JSValue* src1 = ARG_src1; 5200 5355 JSValue* src2 = ARG_src2; … … 5213 5368 JSValue* Machine::cti_op_rshift(CTI_ARGS) 5214 5369 { 5370 CTI_STACK_HACK(); 5371 5215 5372 JSValue* val = ARG_src1; 5216 5373 JSValue* shift = ARG_src2; … … 5231 5388 JSValue* Machine::cti_op_bitnot(CTI_ARGS) 5232 5389 { 5390 CTI_STACK_HACK(); 5391 5233 5392 JSValue* src = ARG_src1; 5234 5393 … … 5245 5404 VoidPtrPair Machine::cti_op_resolve_with_base(CTI_ARGS) 5246 5405 { 5406 CTI_STACK_HACK(); 5407 5247 5408 CallFrame* callFrame = ARG_callFrame; 5248 5409 ScopeChainNode* scopeChain = callFrame->scopeChain(); … … 5279 5440 JSValue* Machine::cti_op_new_func_exp(CTI_ARGS) 5280 5441 { 5442 CTI_STACK_HACK(); 5443 5281 5444 return ARG_funcexp1->makeFunction(ARG_callFrame, ARG_callFrame->scopeChain()); 5282 5445 } … … 5284 5447 JSValue* Machine::cti_op_mod(CTI_ARGS) 5285 5448 { 5449 CTI_STACK_HACK(); 5450 5286 5451 JSValue* dividendValue = ARG_src1; 5287 5452 JSValue* divisorValue = ARG_src2; … … 5296 5461 JSValue* Machine::cti_op_less(CTI_ARGS) 5297 5462 { 5463 CTI_STACK_HACK(); 5464 5298 5465 CallFrame* callFrame = ARG_callFrame; 5299 5466 JSValue* result = jsBoolean(jsLess(callFrame, ARG_src1, ARG_src2)); … … 5304 5471 JSValue* Machine::cti_op_neq(CTI_ARGS) 5305 5472 { 5473 CTI_STACK_HACK(); 5474 5306 5475 JSValue* src1 = ARG_src1; 5307 5476 JSValue* src2 = ARG_src2; … … 5317 5486 VoidPtrPair Machine::cti_op_post_dec(CTI_ARGS) 5318 5487 { 5488 CTI_STACK_HACK(); 5489 5319 5490 JSValue* v = ARG_src1; 5320 5491 … … 5330 5501 JSValue* Machine::cti_op_urshift(CTI_ARGS) 5331 5502 { 5503 CTI_STACK_HACK(); 5504 5332 5505 JSValue* val = ARG_src1; 5333 5506 JSValue* shift = ARG_src2; … … 5346 5519 JSValue* Machine::cti_op_bitxor(CTI_ARGS) 5347 5520 { 5521 CTI_STACK_HACK(); 5522 5348 5523 JSValue* src1 = ARG_src1; 5349 5524 JSValue* src2 = ARG_src2; … … 5358 5533 JSValue* Machine::cti_op_new_regexp(CTI_ARGS) 5359 5534 { 5535 CTI_STACK_HACK(); 5536 5360 5537 return new (ARG_globalData) RegExpObject(ARG_callFrame->lexicalGlobalObject()->regExpStructure(), ARG_regexp1); 5361 5538 } … … 5363 5540 JSValue* Machine::cti_op_bitor(CTI_ARGS) 5364 5541 { 5542 CTI_STACK_HACK(); 5543 5365 5544 JSValue* src1 = ARG_src1; 5366 5545 JSValue* src2 = ARG_src2; … … 5375 5554 JSValue* Machine::cti_op_call_eval(CTI_ARGS) 5376 5555 { 5556 CTI_STACK_HACK(); 5557 5377 5558 CallFrame* callFrame = ARG_callFrame; 5378 5559 RegisterFile* registerFile = ARG_registerFile; … … 5400 5581 void* Machine::cti_op_throw(CTI_ARGS) 5401 5582 { 5583 CTI_STACK_HACK(); 5584 5402 5585 CallFrame* callFrame = ARG_callFrame; 5403 5586 CodeBlock* codeBlock = callFrame->codeBlock(); … … 5419 5602 void* catchRoutine = callFrame->codeBlock()->nativeExceptionCodeForHandlerVPC(handlerVPC); 5420 5603 ASSERT(catchRoutine); 5421 ctiSetReturnAddress(&CTI_RETURN_ADDRESS,catchRoutine);5604 CTI_SET_RETURN_ADDRESS(catchRoutine); 5422 5605 return exceptionValue; 5423 5606 } … … 5425 5608 JSPropertyNameIterator* Machine::cti_op_get_pnames(CTI_ARGS) 5426 5609 { 5610 CTI_STACK_HACK(); 5611 5427 5612 return JSPropertyNameIterator::create(ARG_callFrame, ARG_src1); 5428 5613 } … … 5430 5615 JSValue* Machine::cti_op_next_pname(CTI_ARGS) 5431 5616 { 5617 CTI_STACK_HACK(); 5618 5432 5619 JSPropertyNameIterator* it = ARG_pni1; 5433 5620 JSValue* temp = it->next(ARG_callFrame); … … 5439 5626 void Machine::cti_op_push_scope(CTI_ARGS) 5440 5627 { 5628 CTI_STACK_HACK(); 5629 5441 5630 JSObject* o = ARG_src1->toObject(ARG_callFrame); 5442 5631 VM_CHECK_EXCEPTION_VOID(); … … 5446 5635 void Machine::cti_op_pop_scope(CTI_ARGS) 5447 5636 { 5637 CTI_STACK_HACK(); 5638 5448 5639 ARG_callFrame->setScopeChain(ARG_callFrame->scopeChain()->pop()); 5449 5640 } … … 5451 5642 JSValue* Machine::cti_op_typeof(CTI_ARGS) 5452 5643 { 5644 CTI_STACK_HACK(); 5645 5453 5646 return jsTypeStringForValue(ARG_callFrame, ARG_src1); 5454 5647 } … … 5456 5649 JSValue* Machine::cti_op_is_undefined(CTI_ARGS) 5457 5650 { 5651 CTI_STACK_HACK(); 5652 5458 5653 JSValue* v = ARG_src1; 5459 5654 return jsBoolean(JSImmediate::isImmediate(v) ? v->isUndefined() : v->asCell()->structureID()->typeInfo().masqueradesAsUndefined()); … … 5462 5657 JSValue* Machine::cti_op_is_boolean(CTI_ARGS) 5463 5658 { 5659 CTI_STACK_HACK(); 5660 5464 5661 return jsBoolean(ARG_src1->isBoolean()); 5465 5662 } … … 5467 5664 JSValue* Machine::cti_op_is_number(CTI_ARGS) 5468 5665 { 5666 CTI_STACK_HACK(); 5667 5469 5668 return jsBoolean(ARG_src1->isNumber()); 5470 5669 } … … 5472 5671 JSValue* Machine::cti_op_is_string(CTI_ARGS) 5473 5672 { 5673 CTI_STACK_HACK(); 5674 5474 5675 return jsBoolean(ARG_globalData->machine->isJSString(ARG_src1)); 5475 5676 } … … 5477 5678 JSValue* Machine::cti_op_is_object(CTI_ARGS) 5478 5679 { 5680 CTI_STACK_HACK(); 5681 5479 5682 return jsBoolean(jsIsObjectType(ARG_src1)); 5480 5683 } … … 5482 5685 JSValue* Machine::cti_op_is_function(CTI_ARGS) 5483 5686 { 5687 CTI_STACK_HACK(); 5688 5484 5689 return jsBoolean(jsIsFunctionType(ARG_src1)); 5485 5690 } … … 5487 5692 JSValue* Machine::cti_op_stricteq(CTI_ARGS) 5488 5693 { 5694 CTI_STACK_HACK(); 5695 5489 5696 JSValue* src1 = ARG_src1; 5490 5697 JSValue* src2 = ARG_src2; … … 5499 5706 JSValue* Machine::cti_op_nstricteq(CTI_ARGS) 5500 5707 { 5708 CTI_STACK_HACK(); 5709 5501 5710 JSValue* src1 = ARG_src1; 5502 5711 JSValue* src2 = ARG_src2; … … 5511 5720 JSValue* Machine::cti_op_to_jsnumber(CTI_ARGS) 5512 5721 { 5722 CTI_STACK_HACK(); 5723 5513 5724 JSValue* src = ARG_src1; 5514 5725 CallFrame* callFrame = ARG_callFrame; … … 5521 5732 JSValue* Machine::cti_op_in(CTI_ARGS) 5522 5733 { 5734 CTI_STACK_HACK(); 5735 5523 5736 CallFrame* callFrame = ARG_callFrame; 5524 5737 JSValue* baseVal = ARG_src2; … … 5547 5760 JSValue* Machine::cti_op_push_new_scope(CTI_ARGS) 5548 5761 { 5762 CTI_STACK_HACK(); 5763 5549 5764 JSObject* scope = new (ARG_globalData) JSStaticScopeObject(ARG_callFrame, *ARG_id1, ARG_src2, DontDelete); 5550 5765 … … 5556 5771 void Machine::cti_op_jmp_scopes(CTI_ARGS) 5557 5772 { 5773 CTI_STACK_HACK(); 5774 5558 5775 unsigned count = ARG_int1; 5559 5776 CallFrame* callFrame = ARG_callFrame; … … 5567 5784 void Machine::cti_op_put_by_index(CTI_ARGS) 5568 5785 { 5786 CTI_STACK_HACK(); 5787 5569 5788 CallFrame* callFrame = ARG_callFrame; 5570 5789 unsigned property = ARG_int2; … … 5575 5794 void* Machine::cti_op_switch_imm(CTI_ARGS) 5576 5795 { 5796 CTI_STACK_HACK(); 5797 5577 5798 JSValue* scrutinee = ARG_src1; 5578 5799 unsigned tableIndex = ARG_int2; … … 5590 5811 void* Machine::cti_op_switch_char(CTI_ARGS) 5591 5812 { 5813 CTI_STACK_HACK(); 5814 5592 5815 JSValue* scrutinee = ARG_src1; 5593 5816 unsigned tableIndex = ARG_int2; … … 5608 5831 void* Machine::cti_op_switch_string(CTI_ARGS) 5609 5832 { 5833 CTI_STACK_HACK(); 5834 5610 5835 JSValue* scrutinee = ARG_src1; 5611 5836 unsigned tableIndex = ARG_int2; … … 5625 5850 JSValue* Machine::cti_op_del_by_val(CTI_ARGS) 5626 5851 { 5852 CTI_STACK_HACK(); 5853 5627 5854 CallFrame* callFrame = ARG_callFrame; 5628 5855 … … 5648 5875 void Machine::cti_op_put_getter(CTI_ARGS) 5649 5876 { 5877 CTI_STACK_HACK(); 5878 5650 5879 CallFrame* callFrame = ARG_callFrame; 5651 5880 … … 5659 5888 void Machine::cti_op_put_setter(CTI_ARGS) 5660 5889 { 5890 CTI_STACK_HACK(); 5891 5661 5892 CallFrame* callFrame = ARG_callFrame; 5662 5893 … … 5670 5901 JSValue* Machine::cti_op_new_error(CTI_ARGS) 5671 5902 { 5903 CTI_STACK_HACK(); 5904 5672 5905 CallFrame* callFrame = ARG_callFrame; 5673 5906 CodeBlock* codeBlock = callFrame->codeBlock(); … … 5681 5914 void Machine::cti_op_debug(CTI_ARGS) 5682 5915 { 5916 CTI_STACK_HACK(); 5917 5683 5918 CallFrame* callFrame = ARG_callFrame; 5684 5919 … … 5692 5927 void* Machine::cti_vm_throw(CTI_ARGS) 5693 5928 { 5929 CTI_STACK_HACK(); 5930 5694 5931 CallFrame* callFrame = ARG_callFrame; 5695 5932 CodeBlock* codeBlock = callFrame->codeBlock(); … … 5712 5949 void* catchRoutine = callFrame->codeBlock()->nativeExceptionCodeForHandlerVPC(handlerVPC); 5713 5950 ASSERT(catchRoutine); 5714 ctiSetReturnAddress(&CTI_RETURN_ADDRESS,catchRoutine);5951 CTI_SET_RETURN_ADDRESS(catchRoutine); 5715 5952 return exceptionValue; 5716 5953 }
Note:
See TracChangeset
for help on using the changeset viewer.