Changeset 128260 in webkit for trunk/Source/JavaScriptCore/bytecompiler
- Timestamp:
- Sep 11, 2012, 9:08:18 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore/bytecompiler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r128096 r128260 261 261 } 262 262 263 BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, JSScope* scope, S ymbolTable* symbolTable, ProgramCodeBlock* codeBlock, CompilationKind compilationKind)263 BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, JSScope* scope, SharedSymbolTable* symbolTable, ProgramCodeBlock* codeBlock, CompilationKind compilationKind) 264 264 : m_shouldEmitDebugHooks(scope->globalObject()->debugger()) 265 265 , m_shouldEmitProfileHooks(scope->globalObject()->globalObjectMethodTable()->supportsProfiling(scope->globalObject())) … … 296 296 m_codeBlock->setNeedsFullScopeChain(true); 297 297 298 codeBlock->setGlobalData(m_globalData); 299 symbolTable->setUsesNonStrictEval(codeBlock->usesEval() && !codeBlock->isStrictMode()); 300 m_codeBlock->setNumParameters(1); // Allocate space for "this" 301 298 302 prependComment("entering Program block"); 299 303 emitOpcode(op_enter); 300 codeBlock->setGlobalData(m_globalData);301 304 302 305 // FIXME: Move code that modifies the global object to Interpreter::execute. 303 306 304 m_codeBlock->setNumParameters(1); // Allocate space for "this"305 307 codeBlock->m_numCapturedVars = codeBlock->m_numVars; 306 308 … … 343 345 } 344 346 345 BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, JSScope* scope, S ymbolTable* symbolTable, CodeBlock* codeBlock, CompilationKind)347 BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, JSScope* scope, SharedSymbolTable* symbolTable, CodeBlock* codeBlock, CompilationKind) 346 348 : m_shouldEmitDebugHooks(scope->globalObject()->debugger()) 347 349 , m_shouldEmitProfileHooks(scope->globalObject()->globalObjectMethodTable()->supportsProfiling(scope->globalObject())) … … 379 381 380 382 codeBlock->setGlobalData(m_globalData); 381 383 symbolTable->setUsesNonStrictEval(codeBlock->usesEval() && !codeBlock->isStrictMode()); 384 symbolTable->setParameterCountIncludingThis(functionBody->parameters()->size() + 1); 385 382 386 prependComment("entering Function block"); 383 387 emitOpcode(op_enter); … … 389 393 } 390 394 391 if ( m_codeBlock->needsFullScopeChain() || functionBody->usesArguments()) {395 if (functionBody->usesArguments() || codeBlock->usesEval() || m_shouldEmitDebugHooks) { // May reify arguments object. 392 396 RegisterID* unmodifiedArgumentsRegister = addVar(); // Anonymous, so it can't be modified by user code. 393 397 RegisterID* argumentsRegister = addVar(propertyNames().arguments, false); // Can be changed by assigning to 'arguments'. … … 418 422 instructions().append(argumentsRegister->index()); 419 423 } 424 } 425 426 bool capturesAnyArgument = codeBlock->usesArguments() || codeBlock->usesEval() || m_shouldEmitDebugHooks; // May reify arguments object. 427 if (!capturesAnyArgument && functionBody->hasCapturedVariables()) { 428 FunctionParameters& parameters = *functionBody->parameters(); 429 for (size_t i = 0; i < parameters.size(); ++i) { 430 if (!functionBody->captures(parameters[i])) 431 continue; 432 capturesAnyArgument = true; 433 break; 434 } 435 } 436 437 if (capturesAnyArgument) { 438 symbolTable->setCaptureMode(SharedSymbolTable::AllOfTheThings); 439 symbolTable->setCaptureStart(-CallFrame::offsetFor(symbolTable->parameterCountIncludingThis())); 440 } else { 441 symbolTable->setCaptureMode(SharedSymbolTable::SomeOfTheThings); 442 symbolTable->setCaptureStart(m_codeBlock->m_numVars); 420 443 } 421 444 … … 485 508 } 486 509 487 if (m_shouldEmitDebugHooks )510 if (m_shouldEmitDebugHooks || codeBlock->usesEval()) 488 511 codeBlock->m_numCapturedVars = codeBlock->m_numVars; 512 513 symbolTable->setCaptureEnd(codeBlock->m_numCapturedVars); 489 514 490 515 FunctionParameters& parameters = *functionBody->parameters(); … … 515 540 } 516 541 517 BytecodeGenerator::BytecodeGenerator(EvalNode* evalNode, JSScope* scope, S ymbolTable* symbolTable, EvalCodeBlock* codeBlock, CompilationKind)542 BytecodeGenerator::BytecodeGenerator(EvalNode* evalNode, JSScope* scope, SharedSymbolTable* symbolTable, EvalCodeBlock* codeBlock, CompilationKind) 518 543 : m_shouldEmitDebugHooks(scope->globalObject()->debugger()) 519 544 , m_shouldEmitProfileHooks(scope->globalObject()->globalObjectMethodTable()->supportsProfiling(scope->globalObject())) … … 550 575 m_codeBlock->setNeedsFullScopeChain(true); 551 576 577 codeBlock->setGlobalData(m_globalData); 578 symbolTable->setUsesNonStrictEval(codeBlock->usesEval() && !codeBlock->isStrictMode()); 579 m_codeBlock->setNumParameters(1); 580 552 581 prependComment("entering Eval block"); 553 582 emitOpcode(op_enter); 554 codeBlock->setGlobalData(m_globalData);555 m_codeBlock->setNumParameters(1);556 583 557 584 const DeclarationStacks::FunctionStack& functionStack = evalNode->functionStack(); … … 1356 1383 #if !ASSERT_DISABLED 1357 1384 if (JSActivation* activation = jsDynamicCast<JSActivation*>(currentVariableObject)) 1358 ASSERT(activation->isValid ScopedLookup(entry.getIndex()));1385 ASSERT(activation->isValid(entry)); 1359 1386 #endif 1360 1387 return ResolveResult::lexicalResolve(entry.getIndex(), depth, flags); -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
r128096 r128260 262 262 static bool dumpsGeneratedCode(); 263 263 264 BytecodeGenerator(ProgramNode*, JSScope*, S ymbolTable*, ProgramCodeBlock*, CompilationKind);265 BytecodeGenerator(FunctionBodyNode*, JSScope*, S ymbolTable*, CodeBlock*, CompilationKind);266 BytecodeGenerator(EvalNode*, JSScope*, S ymbolTable*, EvalCodeBlock*, CompilationKind);264 BytecodeGenerator(ProgramNode*, JSScope*, SharedSymbolTable*, ProgramCodeBlock*, CompilationKind); 265 BytecodeGenerator(FunctionBodyNode*, JSScope*, SharedSymbolTable*, CodeBlock*, CompilationKind); 266 BytecodeGenerator(EvalNode*, JSScope*, SharedSymbolTable*, EvalCodeBlock*, CompilationKind); 267 267 268 268 ~BytecodeGenerator(); … … 655 655 Vector<Instruction>& instructions() { return m_instructions; } 656 656 657 S ymbolTable& symbolTable() { return *m_symbolTable; }657 SharedSymbolTable& symbolTable() { return *m_symbolTable; } 658 658 #if ENABLE(BYTECODE_COMMENTS) 659 659 Vector<Comment>& comments() { return m_comments; } … … 698 698 699 699 Strong<JSScope> m_scope; 700 S ymbolTable* m_symbolTable;700 SharedSymbolTable* m_symbolTable; 701 701 702 702 #if ENABLE(BYTECODE_COMMENTS)
Note:
See TracChangeset
for help on using the changeset viewer.