webkit  2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
JSC::BytecodeGenerator Class Reference

#include <BytecodeGenerator.h>

Classes

class  CompletionRecordScope
 

Public Types

enum  ExistingVariableMode { VerifyExisting, IgnoreExisting }
 
enum  PropertyDescriptorOption { PropertyConfigurable = 1, PropertyWritable = 1 << 1, PropertyEnumerable = 1 << 2 }
 
enum  ReturnFrom { ReturnFrom::Normal, ReturnFrom::Finally }
 
enum  TDZCheckOptimization { TDZCheckOptimization::Optimize, TDZCheckOptimization::DoNotOptimize }
 
enum  NestedScopeType { NestedScopeType::IsNested, NestedScopeType::IsNotNested }
 
typedef DeclarationStacks::FunctionStack FunctionStack
 

Public Member Functions

 BytecodeGenerator (VM &, ProgramNode *, UnlinkedProgramCodeBlock *, DebuggerMode, const VariableEnvironment *)
 
 BytecodeGenerator (VM &, FunctionNode *, UnlinkedFunctionCodeBlock *, DebuggerMode, const VariableEnvironment *)
 
 BytecodeGenerator (VM &, EvalNode *, UnlinkedEvalCodeBlock *, DebuggerMode, const VariableEnvironment *)
 
 BytecodeGenerator (VM &, ModuleProgramNode *, UnlinkedModuleProgramCodeBlock *, DebuggerMode, const VariableEnvironment *)
 
 ~BytecodeGenerator ()
 
VM * vm () const
 
ParserArena & parserArena () const
 
const CommonIdentifiers & propertyNames () const
 
bool isConstructor () const
 
DerivedContextType derivedContextType () const
 
bool usesArrowFunction () const
 
bool needsToUpdateArrowFunctionContext () const
 
bool usesEval () const
 
bool usesThis () const
 
ConstructorKind constructorKind () const
 
SuperBinding superBinding () const
 
JSParserScriptMode scriptMode () const
 
bool isArgumentNumber (const Identifier &, int)
 
Variable variable (const Identifier &, ThisResolutionType=ThisResolutionType::Local)
 
void createVariable (const Identifier &, VarKind, SymbolTable *, ExistingVariableMode=VerifyExisting)
 
RegisterID * thisRegister ()
 
RegisterID * argumentsRegister ()
 
RegisterID * newTarget ()
 
RegisterID * scopeRegister ()
 
RegisterID * generatorRegister ()
 
RegisterID * promiseCapabilityRegister ()
 
RegisterID * newTemporary ()
 
RegisterID * newTemporaryOr (RegisterID *suggestion)
 
RegisterID * ignoredResult ()
 
RegisterID * newBlockScopeVariable ()
 
RegisterID * tempDestination (RegisterID *dst)
 
RegisterID * finalDestination (RegisterID *originalDst, RegisterID *tempDst=0)
 
RegisterID * destinationForAssignResult (RegisterID *dst)
 
RegisterID * moveToDestinationIfNeeded (RegisterID *dst, RegisterID *src)
 
LabelScopePtr newLabelScope (LabelScope::Type, const Identifier *=0)
 
Ref< Label > newLabel ()
 
Ref< Label > newEmittedLabel ()
 
void emitNode (RegisterID *dst, StatementNode *n)
 
void emitNodeInTailPosition (RegisterID *dst, StatementNode *n)
 
void emitNode (StatementNode *n)
 
void emitNodeInTailPosition (StatementNode *n)
 
RegisterID * emitNode (RegisterID *dst, ExpressionNode *n)
 
RegisterID * emitNodeInTailPosition (RegisterID *dst, ExpressionNode *n)
 
RegisterID * emitNode (ExpressionNode *n)
 
RegisterID * emitNodeInTailPosition (ExpressionNode *n)
 
void emitNodeInConditionContext (ExpressionNode *n, Label &trueTarget, Label &falseTarget, FallThroughMode fallThroughMode)
 
void emitExpressionInfo (const JSTextPosition &divot, const JSTextPosition &divotStart, const JSTextPosition &divotEnd)
 
ALWAYS_INLINE bool leftHandSideNeedsCopy (bool rightHasAssignments, bool rightIsPure)
 
ALWAYS_INLINE RefPtr< RegisterID > emitNodeForLeftHandSide (ExpressionNode *n, bool rightHasAssignments, bool rightIsPure)
 
void hoistSloppyModeFunctionIfNecessary (const Identifier &functionName)
 
void emitProfileType (RegisterID *registerToProfile, ProfileTypeBytecodeFlag)
 
void emitProfileType (RegisterID *registerToProfile, const Variable &, const JSTextPosition &startDivot, const JSTextPosition &endDivot)
 
void emitProfileType (RegisterID *registerToProfile, ProfileTypeBytecodeFlag, const JSTextPosition &startDivot, const JSTextPosition &endDivot)
 
void emitProfileType (RegisterID *registerToProfile, const JSTextPosition &startDivot, const JSTextPosition &endDivot)
 
void emitProfileControlFlow (int)
 
RegisterID * emitLoadArrowFunctionLexicalEnvironment (const Identifier &)
 
RegisterID * ensureThis ()
 
void emitLoadThisFromArrowFunctionLexicalEnvironment ()
 
RegisterID * emitLoadNewTargetFromArrowFunctionLexicalEnvironment ()
 
RegisterID * emitLoad (RegisterID *dst, bool)
 
RegisterID * emitLoad (RegisterID *dst, const Identifier &)
 
RegisterID * emitLoad (RegisterID *dst, JSValue, SourceCodeRepresentation=SourceCodeRepresentation::Other)
 
RegisterID * emitLoadGlobalObject (RegisterID *dst)
 
RegisterID * emitUnaryOp (OpcodeID, RegisterID *dst, RegisterID *src)
 
RegisterID * emitUnaryOp (OpcodeID, RegisterID *dst, RegisterID *src, OperandTypes)
 
RegisterID * emitUnaryOpProfiled (OpcodeID, RegisterID *dst, RegisterID *src)
 
RegisterID * emitBinaryOp (OpcodeID, RegisterID *dst, RegisterID *src1, RegisterID *src2, OperandTypes)
 
RegisterID * emitEqualityOp (OpcodeID, RegisterID *dst, RegisterID *src1, RegisterID *src2)
 
RegisterID * emitUnaryNoDstOp (OpcodeID, RegisterID *src)
 
RegisterID * emitCreateThis (RegisterID *dst)
 
void emitTDZCheck (RegisterID *target)
 
bool needsTDZCheck (const Variable &)
 
void emitTDZCheckIfNecessary (const Variable &, RegisterID *target, RegisterID *scope)
 
void liftTDZCheckIfPossible (const Variable &)
 
RegisterID * emitNewObject (RegisterID *dst)
 
RegisterID * emitNewArray (RegisterID *dst, ElementNode *, unsigned length)
 
RegisterID * emitNewArrayWithSpread (RegisterID *dst, ElementNode *)
 
RegisterID * emitNewArrayWithSize (RegisterID *dst, RegisterID *length)
 
RegisterID * emitNewFunction (RegisterID *dst, FunctionMetadataNode *)
 
RegisterID * emitNewFunctionExpression (RegisterID *dst, FuncExprNode *)
 
RegisterID * emitNewDefaultConstructor (RegisterID *dst, ConstructorKind, const Identifier &name, const Identifier &ecmaName, const SourceCode &classSource)
 
RegisterID * emitNewArrowFunctionExpression (RegisterID *, ArrowFuncExprNode *)
 
RegisterID * emitNewMethodDefinition (RegisterID *dst, MethodDefinitionNode *)
 
RegisterID * emitNewRegExp (RegisterID *dst, RegExp *)
 
void emitSetFunctionNameIfNeeded (ExpressionNode *valueNode, RegisterID *value, RegisterID *name)
 
RegisterID * emitMoveLinkTimeConstant (RegisterID *dst, LinkTimeConstant)
 
RegisterID * emitMoveEmptyValue (RegisterID *dst)
 
RegisterID * emitMove (RegisterID *dst, RegisterID *src)
 
RegisterID * emitToNumber (RegisterID *dst, RegisterID *src)
 
RegisterID * emitToString (RegisterID *dst, RegisterID *src)
 
RegisterID * emitInc (RegisterID *srcDst)
 
RegisterID * emitDec (RegisterID *srcDst)
 
RegisterID * emitOverridesHasInstance (RegisterID *dst, RegisterID *constructor, RegisterID *hasInstanceValue)
 
RegisterID * emitInstanceOf (RegisterID *dst, RegisterID *value, RegisterID *basePrototype)
 
RegisterID * emitInstanceOfCustom (RegisterID *dst, RegisterID *value, RegisterID *constructor, RegisterID *hasInstanceValue)
 
RegisterID * emitTypeOf (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIn (RegisterID *dst, RegisterID *property, RegisterID *base)
 
RegisterID * emitTryGetById (RegisterID *dst, RegisterID *base, const Identifier &property)
 
RegisterID * emitGetById (RegisterID *dst, RegisterID *base, const Identifier &property)
 
RegisterID * emitGetById (RegisterID *dst, RegisterID *base, RegisterID *thisVal, const Identifier &property)
 
RegisterID * emitPutById (RegisterID *base, const Identifier &property, RegisterID *value)
 
RegisterID * emitPutById (RegisterID *base, RegisterID *thisValue, const Identifier &property, RegisterID *value)
 
RegisterID * emitDirectPutById (RegisterID *base, const Identifier &property, RegisterID *value, PropertyNode::PutType)
 
RegisterID * emitDeleteById (RegisterID *dst, RegisterID *base, const Identifier &)
 
RegisterID * emitGetByVal (RegisterID *dst, RegisterID *base, RegisterID *property)
 
RegisterID * emitGetByVal (RegisterID *dst, RegisterID *base, RegisterID *thisValue, RegisterID *property)
 
RegisterID * emitGetArgumentByVal (RegisterID *dst, RegisterID *base, RegisterID *property)
 
RegisterID * emitPutByVal (RegisterID *base, RegisterID *property, RegisterID *value)
 
RegisterID * emitPutByVal (RegisterID *base, RegisterID *thisValue, RegisterID *property, RegisterID *value)
 
RegisterID * emitDirectPutByVal (RegisterID *base, RegisterID *property, RegisterID *value)
 
RegisterID * emitDeleteByVal (RegisterID *dst, RegisterID *base, RegisterID *property)
 
RegisterID * emitPutByIndex (RegisterID *base, unsigned index, RegisterID *value)
 
RegisterID * emitAssert (RegisterID *condition, int line)
 
void emitPutGetterById (RegisterID *base, const Identifier &property, unsigned propertyDescriptorOptions, RegisterID *getter)
 
void emitPutSetterById (RegisterID *base, const Identifier &property, unsigned propertyDescriptorOptions, RegisterID *setter)
 
void emitPutGetterSetter (RegisterID *base, const Identifier &property, unsigned attributes, RegisterID *getter, RegisterID *setter)
 
void emitPutGetterByVal (RegisterID *base, RegisterID *property, unsigned propertyDescriptorOptions, RegisterID *getter)
 
void emitPutSetterByVal (RegisterID *base, RegisterID *property, unsigned propertyDescriptorOptions, RegisterID *setter)
 
RegisterID * emitGetArgument (RegisterID *dst, int32_t index)
 
void emitPutGeneratorFields (RegisterID *nextFunction)
 
ExpectedFunction expectedFunctionForIdentifier (const Identifier &)
 
RegisterID * emitCall (RegisterID *dst, RegisterID *func, ExpectedFunction, CallArguments &, const JSTextPosition &divot, const JSTextPosition &divotStart, const JSTextPosition &divotEnd, DebuggableCall)
 
RegisterID * emitCallInTailPosition (RegisterID *dst, RegisterID *func, ExpectedFunction, CallArguments &, const JSTextPosition &divot, const JSTextPosition &divotStart, const JSTextPosition &divotEnd, DebuggableCall)
 
RegisterID * emitCallEval (RegisterID *dst, RegisterID *func, CallArguments &, const JSTextPosition &divot, const JSTextPosition &divotStart, const JSTextPosition &divotEnd, DebuggableCall)
 
RegisterID * emitCallVarargs (RegisterID *dst, RegisterID *func, RegisterID *thisRegister, RegisterID *arguments, RegisterID *firstFreeRegister, int32_t firstVarArgOffset, const JSTextPosition &divot, const JSTextPosition &divotStart, const JSTextPosition &divotEnd, DebuggableCall)
 
RegisterID * emitCallVarargsInTailPosition (RegisterID *dst, RegisterID *func, RegisterID *thisRegister, RegisterID *arguments, RegisterID *firstFreeRegister, int32_t firstVarArgOffset, const JSTextPosition &divot, const JSTextPosition &divotStart, const JSTextPosition &divotEnd, DebuggableCall)
 
RegisterID * emitCallForwardArgumentsInTailPosition (RegisterID *dst, RegisterID *func, RegisterID *thisRegister, RegisterID *firstFreeRegister, int32_t firstVarArgOffset, const JSTextPosition &divot, const JSTextPosition &divotStart, const JSTextPosition &divotEnd, DebuggableCall)
 
void emitCallDefineProperty (RegisterID *newObj, RegisterID *propertyNameRegister, RegisterID *valueRegister, RegisterID *getterRegister, RegisterID *setterRegister, unsigned options, const JSTextPosition &)
 
void emitEnumeration (ThrowableExpressionData *enumerationNode, ExpressionNode *subjectNode, const std::function< void(BytecodeGenerator &, RegisterID *)> &callBack, ForOfNode *=nullptr, RegisterID *forLoopSymbolTable=nullptr)
 
RegisterID * emitGetTemplateObject (RegisterID *dst, TaggedTemplateNode *)
 
RegisterID * emitGetGlobalPrivate (RegisterID *dst, const Identifier &property)
 
RegisterID * emitReturn (RegisterID *src, ReturnFrom=ReturnFrom::Normal)
 
RegisterID * emitEnd (RegisterID *src)
 
RegisterID * emitConstruct (RegisterID *dst, RegisterID *func, ExpectedFunction, CallArguments &, const JSTextPosition &divot, const JSTextPosition &divotStart, const JSTextPosition &divotEnd)
 
RegisterID * emitStrcat (RegisterID *dst, RegisterID *src, int count)
 
void emitToPrimitive (RegisterID *dst, RegisterID *src)
 
ResolveType resolveType ()
 
RegisterID * emitResolveConstantLocal (RegisterID *dst, const Variable &)
 
RegisterID * emitResolveScope (RegisterID *dst, const Variable &)
 
RegisterID * emitGetFromScope (RegisterID *dst, RegisterID *scope, const Variable &, ResolveMode)
 
RegisterID * emitPutToScope (RegisterID *scope, const Variable &, RegisterID *value, ResolveMode, InitializationMode)
 
RegisterID * initializeVariable (const Variable &, RegisterID *value)
 
void emitLabel (Label &)
 
void emitLoopHint ()
 
void emitJump (Label &target)
 
void emitJumpIfTrue (RegisterID *cond, Label &target)
 
void emitJumpIfFalse (RegisterID *cond, Label &target)
 
void emitJumpIfNotFunctionCall (RegisterID *cond, Label &target)
 
void emitJumpIfNotFunctionApply (RegisterID *cond, Label &target)
 
void emitEnter ()
 
void emitCheckTraps ()
 
RegisterID * emitHasIndexedProperty (RegisterID *dst, RegisterID *base, RegisterID *propertyName)
 
RegisterID * emitHasStructureProperty (RegisterID *dst, RegisterID *base, RegisterID *propertyName, RegisterID *enumerator)
 
RegisterID * emitHasGenericProperty (RegisterID *dst, RegisterID *base, RegisterID *propertyName)
 
RegisterID * emitGetPropertyEnumerator (RegisterID *dst, RegisterID *base)
 
RegisterID * emitGetEnumerableLength (RegisterID *dst, RegisterID *base)
 
RegisterID * emitGetStructurePropertyEnumerator (RegisterID *dst, RegisterID *base, RegisterID *length)
 
RegisterID * emitGetGenericPropertyEnumerator (RegisterID *dst, RegisterID *base, RegisterID *length, RegisterID *structureEnumerator)
 
RegisterID * emitEnumeratorStructurePropertyName (RegisterID *dst, RegisterID *enumerator, RegisterID *index)
 
RegisterID * emitEnumeratorGenericPropertyName (RegisterID *dst, RegisterID *enumerator, RegisterID *index)
 
RegisterID * emitToIndexString (RegisterID *dst, RegisterID *index)
 
RegisterID * emitIsCellWithType (RegisterID *dst, RegisterID *src, JSType)
 
RegisterID * emitIsJSArray (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIsProxyObject (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIsRegExpObject (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIsMap (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIsSet (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIsObject (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIsNumber (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIsUndefined (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIsEmpty (RegisterID *dst, RegisterID *src)
 
RegisterID * emitIsDerivedArray (RegisterID *dst, RegisterID *src)
 
void emitRequireObjectCoercible (RegisterID *value, const String &error)
 
RegisterID * emitIteratorNext (RegisterID *dst, RegisterID *iterator, const ThrowableExpressionData *node)
 
RegisterID * emitIteratorNextWithValue (RegisterID *dst, RegisterID *iterator, RegisterID *value, const ThrowableExpressionData *node)
 
void emitIteratorClose (RegisterID *iterator, const ThrowableExpressionData *node)
 
RegisterID * emitRestParameter (RegisterID *result, unsigned numParametersToSkip)
 
bool emitReadOnlyExceptionIfNeeded (const Variable &)
 
TryData * pushTry (Label &start, Label &handlerLabel, HandlerType)
 
void popTry (TryData *, Label &end)
 
void emitCatch (RegisterID *exceptionRegister, RegisterID *thrownValueRegister)
 
void restoreScopeRegister ()
 
void restoreScopeRegister (int lexicalScopeIndex)
 
int labelScopeDepthToLexicalScopeIndex (int labelScopeDepth)
 
void emitThrow (RegisterID *exc)
 
void emitThrowStaticError (ErrorType, RegisterID *)
 
void emitThrowStaticError (ErrorType, const Identifier &message)
 
void emitThrowReferenceError (const String &message)
 
void emitThrowTypeError (const String &message)
 
void emitThrowTypeError (const Identifier &message)
 
void emitThrowRangeError (const Identifier &message)
 
void emitThrowOutOfMemoryError ()
 
void emitPushCatchScope (VariableEnvironment &)
 
void emitPopCatchScope (VariableEnvironment &)
 
void emitGetScope ()
 
RegisterID * emitPushWithScope (RegisterID *objectScope)
 
void emitPopWithScope ()
 
void emitPutThisToArrowFunctionContextScope ()
 
void emitPutNewTargetToArrowFunctionContextScope ()
 
void emitPutDerivedConstructorToArrowFunctionContextScope ()
 
RegisterID * emitLoadDerivedConstructorFromArrowFunctionLexicalEnvironment ()
 
void emitDebugHook (DebugHookType, const JSTextPosition &)
 
void emitDebugHook (DebugHookType, unsigned line, unsigned charOffset, unsigned lineStart)
 
void emitDebugHook (StatementNode *)
 
void emitDebugHook (ExpressionNode *)
 
void emitWillLeaveCallFrameDebugHook ()
 
RegisterID * completionTypeRegister () const
 
RegisterID * completionValueRegister () const
 
void emitSetCompletionType (CompletionType type)
 
void emitSetCompletionValue (RegisterID *reg)
 
void emitJumpIf (OpcodeID compareOpcode, RegisterID *completionTypeRegister, CompletionType, Label &jumpTarget)
 
bool emitJumpViaFinallyIfNeeded (int targetLabelScopeDepth, Label &jumpTarget)
 
bool emitReturnViaFinallyIfNeeded (RegisterID *returnRegister)
 
void emitFinallyCompletion (FinallyContext &, RegisterID *completionTypeRegister, Label &normalCompletionLabel)
 
FinallyContext * pushFinallyControlFlowScope (Label &finallyLabel)
 
FinallyContext popFinallyControlFlowScope ()
 
void pushIndexedForInScope (RegisterID *local, RegisterID *index)
 
void popIndexedForInScope (RegisterID *local)
 
void pushStructureForInScope (RegisterID *local, RegisterID *index, RegisterID *property, RegisterID *enumerator)
 
void popStructureForInScope (RegisterID *local)
 
void invalidateForInContextForLocal (RegisterID *local)
 
LabelScopePtr breakTarget (const Identifier &)
 
LabelScopePtr continueTarget (const Identifier &)
 
void beginSwitch (RegisterID *, SwitchInfo::SwitchType)
 
void endSwitch (uint32_t clauseCount, const Vector< Ref< Label >, 8 > &, ExpressionNode **, Label &defaultLabel, int32_t min, int32_t range)
 
void emitYieldPoint (RegisterID *)
 
void emitGeneratorStateLabel ()
 
void emitGeneratorStateChange (int32_t state)
 
RegisterID * emitYield (RegisterID *argument)
 
RegisterID * emitDelegateYield (RegisterID *argument, ThrowableExpressionData *)
 
RegisterID * generatorStateRegister ()
 
RegisterID * generatorValueRegister ()
 
RegisterID * generatorResumeModeRegister ()
 
RegisterID * generatorFrameRegister ()
 
CodeType codeType () const
 
bool shouldEmitDebugHooks ()
 
bool isStrictMode () const
 
SourceParseMode parseMode () const
 
bool isBuiltinFunction () const
 
OpcodeID lastOpcodeID () const
 
bool isDerivedConstructorContext ()
 
bool isDerivedClassContext ()
 
bool isArrowFunction ()
 
bool isSuperUsedInInnerArrowFunction ()
 
bool isSuperCallUsedInInnerArrowFunction ()
 
bool isThisUsedInInnerArrowFunction ()
 
void pushLexicalScope (VariableEnvironmentNode *, TDZCheckOptimization, NestedScopeType=NestedScopeType::IsNotNested, RegisterID **constantSymbolTableResult=nullptr, bool shouldInitializeBlockScopedFunctions=true)
 
void popLexicalScope (VariableEnvironmentNode *)
 
void prepareLexicalScopeForNextForLoopIteration (VariableEnvironmentNode *, RegisterID *loopSymbolTable)
 
int labelScopeDepth () const
 
JSString * addStringConstant (const Identifier &)
 
JSTemplateRegistryKey * addTemplateRegistryKeyConstant (Ref< TemplateRegistryKey > &&)
 
Vector< UnlinkedInstruction, 0, UnsafeVectorOverflow > & instructions ()
 
RegisterID * emitThrowExpressionTooDeepException ()
 

Static Public Member Functions

template<typename... Args>
static ParserError generate (VM &vm, Args &&...args)
 

Member Typedef Documentation

◆ FunctionStack

Member Enumeration Documentation

◆ ExistingVariableMode

Enumerator
VerifyExisting 
IgnoreExisting 

◆ NestedScopeType

Enumerator
IsNested 
IsNotNested 

◆ PropertyDescriptorOption

Enumerator
PropertyConfigurable 
PropertyWritable 
PropertyEnumerable 

◆ ReturnFrom

Enumerator
Normal 
Finally 

◆ TDZCheckOptimization

Enumerator
Optimize 
DoNotOptimize 

Constructor & Destructor Documentation

◆ BytecodeGenerator() [1/4]

JSC::BytecodeGenerator::BytecodeGenerator ( VM &  vm,
ProgramNode *  programNode,
UnlinkedProgramCodeBlock *  codeBlock,
DebuggerMode  debuggerMode,
const VariableEnvironment *  parentScopeTDZVariables 
)

◆ BytecodeGenerator() [2/4]

JSC::BytecodeGenerator::BytecodeGenerator ( VM &  vm,
FunctionNode *  functionNode,
UnlinkedFunctionCodeBlock *  codeBlock,
DebuggerMode  debuggerMode,
const VariableEnvironment *  parentScopeTDZVariables 
)

◆ BytecodeGenerator() [3/4]

JSC::BytecodeGenerator::BytecodeGenerator ( VM &  vm,
EvalNode *  evalNode,
UnlinkedEvalCodeBlock *  codeBlock,
DebuggerMode  debuggerMode,
const VariableEnvironment *  parentScopeTDZVariables 
)

◆ BytecodeGenerator() [4/4]

JSC::BytecodeGenerator::BytecodeGenerator ( VM &  vm,
ModuleProgramNode *  moduleProgramNode,
UnlinkedModuleProgramCodeBlock *  codeBlock,
DebuggerMode  debuggerMode,
const VariableEnvironment *  parentScopeTDZVariables 
)

◆ ~BytecodeGenerator()

JSC::BytecodeGenerator::~BytecodeGenerator ( )

Member Function Documentation

◆ addStringConstant()

JSString * JSC::BytecodeGenerator::addStringConstant ( const Identifier &  identifier)

◆ addTemplateRegistryKeyConstant()

JSTemplateRegistryKey * JSC::BytecodeGenerator::addTemplateRegistryKeyConstant ( Ref< TemplateRegistryKey > &&  templateRegistryKey)

◆ argumentsRegister()

RegisterID* JSC::BytecodeGenerator::argumentsRegister ( )
inline

◆ beginSwitch()

void JSC::BytecodeGenerator::beginSwitch ( RegisterID *  scrutineeRegister,
SwitchInfo::SwitchType  type 
)

◆ breakTarget()

LabelScopePtr JSC::BytecodeGenerator::breakTarget ( const Identifier &  name)

◆ codeType()

CodeType JSC::BytecodeGenerator::codeType ( ) const
inline

◆ completionTypeRegister()

RegisterID* JSC::BytecodeGenerator::completionTypeRegister ( ) const
inline

◆ completionValueRegister()

RegisterID* JSC::BytecodeGenerator::completionValueRegister ( ) const
inline

◆ constructorKind()

ConstructorKind JSC::BytecodeGenerator::constructorKind ( ) const
inline

◆ continueTarget()

LabelScopePtr JSC::BytecodeGenerator::continueTarget ( const Identifier &  name)

◆ createVariable()

void JSC::BytecodeGenerator::createVariable ( const Identifier &  property,
VarKind  varKind,
SymbolTable *  symbolTable,
ExistingVariableMode  existingVariableMode = VerifyExisting 
)

◆ derivedContextType()

DerivedContextType JSC::BytecodeGenerator::derivedContextType ( ) const
inline

◆ destinationForAssignResult()

RegisterID* JSC::BytecodeGenerator::destinationForAssignResult ( RegisterID *  dst)
inline

◆ emitAssert()

RegisterID * JSC::BytecodeGenerator::emitAssert ( RegisterID *  condition,
int  line 
)

◆ emitBinaryOp()

RegisterID * JSC::BytecodeGenerator::emitBinaryOp ( OpcodeID  opcodeID,
RegisterID *  dst,
RegisterID *  src1,
RegisterID *  src2,
OperandTypes  types 
)

◆ emitCall()

RegisterID * JSC::BytecodeGenerator::emitCall ( RegisterID *  dst,
RegisterID *  func,
ExpectedFunction  expectedFunction,
CallArguments &  callArguments,
const JSTextPosition &  divot,
const JSTextPosition &  divotStart,
const JSTextPosition &  divotEnd,
DebuggableCall  debuggableCall 
)

◆ emitCallDefineProperty()

void JSC::BytecodeGenerator::emitCallDefineProperty ( RegisterID *  newObj,
RegisterID *  propertyNameRegister,
RegisterID *  valueRegister,
RegisterID *  getterRegister,
RegisterID *  setterRegister,
unsigned  options,
const JSTextPosition &  position 
)

◆ emitCallEval()

RegisterID * JSC::BytecodeGenerator::emitCallEval ( RegisterID *  dst,
RegisterID *  func,
CallArguments &  callArguments,
const JSTextPosition &  divot,
const JSTextPosition &  divotStart,
const JSTextPosition &  divotEnd,
DebuggableCall  debuggableCall 
)

◆ emitCallForwardArgumentsInTailPosition()

RegisterID * JSC::BytecodeGenerator::emitCallForwardArgumentsInTailPosition ( RegisterID *  dst,
RegisterID *  func,
RegisterID *  thisRegister,
RegisterID *  firstFreeRegister,
int32_t  firstVarArgOffset,
const JSTextPosition &  divot,
const JSTextPosition &  divotStart,
const JSTextPosition &  divotEnd,
DebuggableCall  debuggableCall 
)

◆ emitCallInTailPosition()

RegisterID * JSC::BytecodeGenerator::emitCallInTailPosition ( RegisterID *  dst,
RegisterID *  func,
ExpectedFunction  expectedFunction,
CallArguments &  callArguments,
const JSTextPosition &  divot,
const JSTextPosition &  divotStart,
const JSTextPosition &  divotEnd,
DebuggableCall  debuggableCall 
)

◆ emitCallVarargs()

RegisterID * JSC::BytecodeGenerator::emitCallVarargs ( RegisterID *  dst,
RegisterID *  func,
RegisterID *  thisRegister,
RegisterID *  arguments,
RegisterID *  firstFreeRegister,
int32_t  firstVarArgOffset,
const JSTextPosition &  divot,
const JSTextPosition &  divotStart,
const JSTextPosition &  divotEnd,
DebuggableCall  debuggableCall 
)

◆ emitCallVarargsInTailPosition()

RegisterID * JSC::BytecodeGenerator::emitCallVarargsInTailPosition ( RegisterID *  dst,
RegisterID *  func,
RegisterID *  thisRegister,
RegisterID *  arguments,
RegisterID *  firstFreeRegister,
int32_t  firstVarArgOffset,
const JSTextPosition &  divot,
const JSTextPosition &  divotStart,
const JSTextPosition &  divotEnd,
DebuggableCall  debuggableCall 
)

◆ emitCatch()

void JSC::BytecodeGenerator::emitCatch ( RegisterID *  exceptionRegister,
RegisterID *  thrownValueRegister 
)

◆ emitCheckTraps()

void JSC::BytecodeGenerator::emitCheckTraps ( )

◆ emitConstruct()

RegisterID * JSC::BytecodeGenerator::emitConstruct ( RegisterID *  dst,
RegisterID *  func,
ExpectedFunction  expectedFunction,
CallArguments &  callArguments,
const JSTextPosition &  divot,
const JSTextPosition &  divotStart,
const JSTextPosition &  divotEnd 
)

◆ emitCreateThis()

RegisterID * JSC::BytecodeGenerator::emitCreateThis ( RegisterID *  dst)

◆ emitDebugHook() [1/4]

void JSC::BytecodeGenerator::emitDebugHook ( DebugHookType  debugHookType,
const JSTextPosition &  divot 
)

◆ emitDebugHook() [2/4]

void JSC::BytecodeGenerator::emitDebugHook ( DebugHookType  debugHookType,
unsigned  line,
unsigned  charOffset,
unsigned  lineStart 
)

◆ emitDebugHook() [3/4]

void JSC::BytecodeGenerator::emitDebugHook ( StatementNode *  statement)

◆ emitDebugHook() [4/4]

void JSC::BytecodeGenerator::emitDebugHook ( ExpressionNode *  expr)

◆ emitDec()

RegisterID * JSC::BytecodeGenerator::emitDec ( RegisterID *  srcDst)

◆ emitDelegateYield()

RegisterID * JSC::BytecodeGenerator::emitDelegateYield ( RegisterID *  argument,
ThrowableExpressionData *  node 
)

◆ emitDeleteById()

RegisterID * JSC::BytecodeGenerator::emitDeleteById ( RegisterID *  dst,
RegisterID *  base,
const Identifier &  property 
)

◆ emitDeleteByVal()

RegisterID * JSC::BytecodeGenerator::emitDeleteByVal ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  property 
)

◆ emitDirectPutById()

RegisterID * JSC::BytecodeGenerator::emitDirectPutById ( RegisterID *  base,
const Identifier &  property,
RegisterID *  value,
PropertyNode::PutType  putType 
)

◆ emitDirectPutByVal()

RegisterID * JSC::BytecodeGenerator::emitDirectPutByVal ( RegisterID *  base,
RegisterID *  property,
RegisterID *  value 
)

◆ emitEnd()

RegisterID* JSC::BytecodeGenerator::emitEnd ( RegisterID *  src)
inline

◆ emitEnter()

void JSC::BytecodeGenerator::emitEnter ( )

◆ emitEnumeration()

void JSC::BytecodeGenerator::emitEnumeration ( ThrowableExpressionData *  enumerationNode,
ExpressionNode *  subjectNode,
const std::function< void(BytecodeGenerator &, RegisterID *)> &  callBack,
ForOfNode *  forLoopNode = nullptr,
RegisterID *  forLoopSymbolTable = nullptr 
)

◆ emitEnumeratorGenericPropertyName()

RegisterID * JSC::BytecodeGenerator::emitEnumeratorGenericPropertyName ( RegisterID *  dst,
RegisterID *  enumerator,
RegisterID *  index 
)

◆ emitEnumeratorStructurePropertyName()

RegisterID * JSC::BytecodeGenerator::emitEnumeratorStructurePropertyName ( RegisterID *  dst,
RegisterID *  enumerator,
RegisterID *  index 
)

◆ emitEqualityOp()

RegisterID * JSC::BytecodeGenerator::emitEqualityOp ( OpcodeID  opcodeID,
RegisterID *  dst,
RegisterID *  src1,
RegisterID *  src2 
)

◆ emitExpressionInfo()

void JSC::BytecodeGenerator::emitExpressionInfo ( const JSTextPosition &  divot,
const JSTextPosition &  divotStart,
const JSTextPosition &  divotEnd 
)
inline

◆ emitFinallyCompletion()

void JSC::BytecodeGenerator::emitFinallyCompletion ( FinallyContext &  context,
RegisterID *  completionTypeRegister,
Label &  normalCompletionLabel 
)

◆ emitGeneratorStateChange()

void JSC::BytecodeGenerator::emitGeneratorStateChange ( int32_t  state)

◆ emitGeneratorStateLabel()

void JSC::BytecodeGenerator::emitGeneratorStateLabel ( )

◆ emitGetArgument()

RegisterID * JSC::BytecodeGenerator::emitGetArgument ( RegisterID *  dst,
int32_t  index 
)

◆ emitGetArgumentByVal()

RegisterID* JSC::BytecodeGenerator::emitGetArgumentByVal ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  property 
)

◆ emitGetById() [1/2]

RegisterID * JSC::BytecodeGenerator::emitGetById ( RegisterID *  dst,
RegisterID *  base,
const Identifier &  property 
)

◆ emitGetById() [2/2]

RegisterID * JSC::BytecodeGenerator::emitGetById ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  thisVal,
const Identifier &  property 
)

◆ emitGetByVal() [1/2]

RegisterID * JSC::BytecodeGenerator::emitGetByVal ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  property 
)

◆ emitGetByVal() [2/2]

RegisterID * JSC::BytecodeGenerator::emitGetByVal ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  thisValue,
RegisterID *  property 
)

◆ emitGetEnumerableLength()

RegisterID * JSC::BytecodeGenerator::emitGetEnumerableLength ( RegisterID *  dst,
RegisterID *  base 
)

◆ emitGetFromScope()

RegisterID * JSC::BytecodeGenerator::emitGetFromScope ( RegisterID *  dst,
RegisterID *  scope,
const Variable &  variable,
ResolveMode  resolveMode 
)

◆ emitGetGenericPropertyEnumerator()

RegisterID* JSC::BytecodeGenerator::emitGetGenericPropertyEnumerator ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  length,
RegisterID *  structureEnumerator 
)

◆ emitGetGlobalPrivate()

RegisterID * JSC::BytecodeGenerator::emitGetGlobalPrivate ( RegisterID *  dst,
const Identifier &  property 
)

◆ emitGetPropertyEnumerator()

RegisterID * JSC::BytecodeGenerator::emitGetPropertyEnumerator ( RegisterID *  dst,
RegisterID *  base 
)

◆ emitGetScope()

void JSC::BytecodeGenerator::emitGetScope ( )

◆ emitGetStructurePropertyEnumerator()

RegisterID* JSC::BytecodeGenerator::emitGetStructurePropertyEnumerator ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  length 
)

◆ emitGetTemplateObject()

RegisterID * JSC::BytecodeGenerator::emitGetTemplateObject ( RegisterID *  dst,
TaggedTemplateNode *  taggedTemplate 
)

◆ emitHasGenericProperty()

RegisterID * JSC::BytecodeGenerator::emitHasGenericProperty ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  propertyName 
)

◆ emitHasIndexedProperty()

RegisterID * JSC::BytecodeGenerator::emitHasIndexedProperty ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  propertyName 
)

◆ emitHasStructureProperty()

RegisterID * JSC::BytecodeGenerator::emitHasStructureProperty ( RegisterID *  dst,
RegisterID *  base,
RegisterID *  propertyName,
RegisterID *  enumerator 
)

◆ emitIn()

RegisterID * JSC::BytecodeGenerator::emitIn ( RegisterID *  dst,
RegisterID *  property,
RegisterID *  base 
)

◆ emitInc()

RegisterID * JSC::BytecodeGenerator::emitInc ( RegisterID *  srcDst)

◆ emitInstanceOf()

RegisterID * JSC::BytecodeGenerator::emitInstanceOf ( RegisterID *  dst,
RegisterID *  value,
RegisterID *  basePrototype 
)

◆ emitInstanceOfCustom()

RegisterID * JSC::BytecodeGenerator::emitInstanceOfCustom ( RegisterID *  dst,
RegisterID *  value,
RegisterID *  constructor,
RegisterID *  hasInstanceValue 
)

◆ emitIsCellWithType()

RegisterID * JSC::BytecodeGenerator::emitIsCellWithType ( RegisterID *  dst,
RegisterID *  src,
JSType  type 
)

◆ emitIsDerivedArray()

RegisterID* JSC::BytecodeGenerator::emitIsDerivedArray ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ emitIsEmpty()

RegisterID * JSC::BytecodeGenerator::emitIsEmpty ( RegisterID *  dst,
RegisterID *  src 
)

◆ emitIsJSArray()

RegisterID* JSC::BytecodeGenerator::emitIsJSArray ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ emitIsMap()

RegisterID* JSC::BytecodeGenerator::emitIsMap ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ emitIsNumber()

RegisterID * JSC::BytecodeGenerator::emitIsNumber ( RegisterID *  dst,
RegisterID *  src 
)

◆ emitIsObject()

RegisterID * JSC::BytecodeGenerator::emitIsObject ( RegisterID *  dst,
RegisterID *  src 
)

◆ emitIsProxyObject()

RegisterID* JSC::BytecodeGenerator::emitIsProxyObject ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ emitIsRegExpObject()

RegisterID* JSC::BytecodeGenerator::emitIsRegExpObject ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ emitIsSet()

RegisterID* JSC::BytecodeGenerator::emitIsSet ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ emitIsUndefined()

RegisterID * JSC::BytecodeGenerator::emitIsUndefined ( RegisterID *  dst,
RegisterID *  src 
)

◆ emitIteratorClose()

void JSC::BytecodeGenerator::emitIteratorClose ( RegisterID *  iterator,
const ThrowableExpressionData *  node 
)

◆ emitIteratorNext()

RegisterID * JSC::BytecodeGenerator::emitIteratorNext ( RegisterID *  dst,
RegisterID *  iterator,
const ThrowableExpressionData *  node 
)

◆ emitIteratorNextWithValue()

RegisterID * JSC::BytecodeGenerator::emitIteratorNextWithValue ( RegisterID *  dst,
RegisterID *  iterator,
RegisterID *  value,
const ThrowableExpressionData *  node 
)

◆ emitJump()

void JSC::BytecodeGenerator::emitJump ( Label &  target)

◆ emitJumpIf()

void JSC::BytecodeGenerator::emitJumpIf ( OpcodeID  compareOpcode,
RegisterID *  completionTypeRegister,
CompletionType  type,
Label &  jumpTarget 
)

◆ emitJumpIfFalse()

void JSC::BytecodeGenerator::emitJumpIfFalse ( RegisterID *  cond,
Label &  target 
)

◆ emitJumpIfNotFunctionApply()

void JSC::BytecodeGenerator::emitJumpIfNotFunctionApply ( RegisterID *  cond,
Label &  target 
)

◆ emitJumpIfNotFunctionCall()

void JSC::BytecodeGenerator::emitJumpIfNotFunctionCall ( RegisterID *  cond,
Label &  target 
)

◆ emitJumpIfTrue()

void JSC::BytecodeGenerator::emitJumpIfTrue ( RegisterID *  cond,
Label &  target 
)

◆ emitJumpViaFinallyIfNeeded()

bool JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded ( int  targetLabelScopeDepth,
Label &  jumpTarget 
)

◆ emitLabel()

void JSC::BytecodeGenerator::emitLabel ( Label &  l0)

◆ emitLoad() [1/3]

RegisterID * JSC::BytecodeGenerator::emitLoad ( RegisterID *  dst,
bool  b 
)

◆ emitLoad() [2/3]

RegisterID * JSC::BytecodeGenerator::emitLoad ( RegisterID *  dst,
const Identifier &  identifier 
)

◆ emitLoad() [3/3]

RegisterID * JSC::BytecodeGenerator::emitLoad ( RegisterID *  dst,
JSValue  v,
SourceCodeRepresentation  sourceCodeRepresentation = SourceCodeRepresentation::Other 
)

◆ emitLoadArrowFunctionLexicalEnvironment()

RegisterID * JSC::BytecodeGenerator::emitLoadArrowFunctionLexicalEnvironment ( const Identifier &  identifier)

◆ emitLoadDerivedConstructorFromArrowFunctionLexicalEnvironment()

RegisterID * JSC::BytecodeGenerator::emitLoadDerivedConstructorFromArrowFunctionLexicalEnvironment ( )

◆ emitLoadGlobalObject()

RegisterID * JSC::BytecodeGenerator::emitLoadGlobalObject ( RegisterID *  dst)

◆ emitLoadNewTargetFromArrowFunctionLexicalEnvironment()

RegisterID * JSC::BytecodeGenerator::emitLoadNewTargetFromArrowFunctionLexicalEnvironment ( )

◆ emitLoadThisFromArrowFunctionLexicalEnvironment()

void JSC::BytecodeGenerator::emitLoadThisFromArrowFunctionLexicalEnvironment ( )

◆ emitLoopHint()

void JSC::BytecodeGenerator::emitLoopHint ( )

◆ emitMove()

RegisterID * JSC::BytecodeGenerator::emitMove ( RegisterID *  dst,
RegisterID *  src 
)

◆ emitMoveEmptyValue()

RegisterID * JSC::BytecodeGenerator::emitMoveEmptyValue ( RegisterID *  dst)

◆ emitMoveLinkTimeConstant()

RegisterID * JSC::BytecodeGenerator::emitMoveLinkTimeConstant ( RegisterID *  dst,
LinkTimeConstant  type 
)

◆ emitNewArray()

RegisterID * JSC::BytecodeGenerator::emitNewArray ( RegisterID *  dst,
ElementNode *  elements,
unsigned  length 
)

◆ emitNewArrayWithSize()

RegisterID * JSC::BytecodeGenerator::emitNewArrayWithSize ( RegisterID *  dst,
RegisterID *  length 
)

◆ emitNewArrayWithSpread()

RegisterID * JSC::BytecodeGenerator::emitNewArrayWithSpread ( RegisterID *  dst,
ElementNode *  elements 
)

◆ emitNewArrowFunctionExpression()

RegisterID * JSC::BytecodeGenerator::emitNewArrowFunctionExpression ( RegisterID *  dst,
ArrowFuncExprNode *  func 
)

◆ emitNewDefaultConstructor()

RegisterID * JSC::BytecodeGenerator::emitNewDefaultConstructor ( RegisterID *  dst,
ConstructorKind  constructorKind,
const Identifier &  name,
const Identifier &  ecmaName,
const SourceCode &  classSource 
)

◆ emitNewFunction()

RegisterID * JSC::BytecodeGenerator::emitNewFunction ( RegisterID *  dst,
FunctionMetadataNode *  function 
)

◆ emitNewFunctionExpression()

RegisterID * JSC::BytecodeGenerator::emitNewFunctionExpression ( RegisterID *  dst,
FuncExprNode *  func 
)

◆ emitNewMethodDefinition()

RegisterID * JSC::BytecodeGenerator::emitNewMethodDefinition ( RegisterID *  dst,
MethodDefinitionNode *  func 
)

◆ emitNewObject()

RegisterID * JSC::BytecodeGenerator::emitNewObject ( RegisterID *  dst)

◆ emitNewRegExp()

RegisterID * JSC::BytecodeGenerator::emitNewRegExp ( RegisterID *  dst,
RegExp *  regExp 
)

◆ emitNode() [1/4]

void JSC::BytecodeGenerator::emitNode ( RegisterID *  dst,
StatementNode *  n 
)
inline

◆ emitNode() [2/4]

void JSC::BytecodeGenerator::emitNode ( StatementNode *  n)
inline

◆ emitNode() [3/4]

RegisterID* JSC::BytecodeGenerator::emitNode ( RegisterID *  dst,
ExpressionNode *  n 
)
inline

◆ emitNode() [4/4]

RegisterID* JSC::BytecodeGenerator::emitNode ( ExpressionNode *  n)
inline

◆ emitNodeForLeftHandSide()

ALWAYS_INLINE RefPtr<RegisterID> JSC::BytecodeGenerator::emitNodeForLeftHandSide ( ExpressionNode *  n,
bool  rightHasAssignments,
bool  rightIsPure 
)
inline

◆ emitNodeInConditionContext()

void JSC::BytecodeGenerator::emitNodeInConditionContext ( ExpressionNode *  n,
Label &  trueTarget,
Label &  falseTarget,
FallThroughMode  fallThroughMode 
)
inline

◆ emitNodeInTailPosition() [1/4]

void JSC::BytecodeGenerator::emitNodeInTailPosition ( RegisterID *  dst,
StatementNode *  n 
)
inline

◆ emitNodeInTailPosition() [2/4]

void JSC::BytecodeGenerator::emitNodeInTailPosition ( StatementNode *  n)
inline

◆ emitNodeInTailPosition() [3/4]

RegisterID* JSC::BytecodeGenerator::emitNodeInTailPosition ( RegisterID *  dst,
ExpressionNode *  n 
)
inline

◆ emitNodeInTailPosition() [4/4]

RegisterID* JSC::BytecodeGenerator::emitNodeInTailPosition ( ExpressionNode *  n)
inline

◆ emitOverridesHasInstance()

RegisterID * JSC::BytecodeGenerator::emitOverridesHasInstance ( RegisterID *  dst,
RegisterID *  constructor,
RegisterID *  hasInstanceValue 
)

◆ emitPopCatchScope()

void JSC::BytecodeGenerator::emitPopCatchScope ( VariableEnvironment &  environment)

◆ emitPopWithScope()

void JSC::BytecodeGenerator::emitPopWithScope ( )

◆ emitProfileControlFlow()

void JSC::BytecodeGenerator::emitProfileControlFlow ( int  textOffset)

◆ emitProfileType() [1/4]

void JSC::BytecodeGenerator::emitProfileType ( RegisterID *  registerToProfile,
ProfileTypeBytecodeFlag  flag 
)

◆ emitProfileType() [2/4]

void JSC::BytecodeGenerator::emitProfileType ( RegisterID *  registerToProfile,
const Variable &  var,
const JSTextPosition &  startDivot,
const JSTextPosition &  endDivot 
)

◆ emitProfileType() [3/4]

void JSC::BytecodeGenerator::emitProfileType ( RegisterID *  registerToProfile,
ProfileTypeBytecodeFlag  flag,
const JSTextPosition &  startDivot,
const JSTextPosition &  endDivot 
)

◆ emitProfileType() [4/4]

void JSC::BytecodeGenerator::emitProfileType ( RegisterID *  registerToProfile,
const JSTextPosition &  startDivot,
const JSTextPosition &  endDivot 
)

◆ emitPushCatchScope()

void JSC::BytecodeGenerator::emitPushCatchScope ( VariableEnvironment &  environment)

◆ emitPushWithScope()

RegisterID * JSC::BytecodeGenerator::emitPushWithScope ( RegisterID *  objectScope)

◆ emitPutById() [1/2]

RegisterID * JSC::BytecodeGenerator::emitPutById ( RegisterID *  base,
const Identifier &  property,
RegisterID *  value 
)

◆ emitPutById() [2/2]

RegisterID * JSC::BytecodeGenerator::emitPutById ( RegisterID *  base,
RegisterID *  thisValue,
const Identifier &  property,
RegisterID *  value 
)

◆ emitPutByIndex()

RegisterID * JSC::BytecodeGenerator::emitPutByIndex ( RegisterID *  base,
unsigned  index,
RegisterID *  value 
)

◆ emitPutByVal() [1/2]

RegisterID * JSC::BytecodeGenerator::emitPutByVal ( RegisterID *  base,
RegisterID *  property,
RegisterID *  value 
)

◆ emitPutByVal() [2/2]

RegisterID * JSC::BytecodeGenerator::emitPutByVal ( RegisterID *  base,
RegisterID *  thisValue,
RegisterID *  property,
RegisterID *  value 
)

◆ emitPutDerivedConstructorToArrowFunctionContextScope()

void JSC::BytecodeGenerator::emitPutDerivedConstructorToArrowFunctionContextScope ( )

◆ emitPutGeneratorFields()

void JSC::BytecodeGenerator::emitPutGeneratorFields ( RegisterID *  nextFunction)

◆ emitPutGetterById()

void JSC::BytecodeGenerator::emitPutGetterById ( RegisterID *  base,
const Identifier &  property,
unsigned  propertyDescriptorOptions,
RegisterID *  getter 
)

◆ emitPutGetterByVal()

void JSC::BytecodeGenerator::emitPutGetterByVal ( RegisterID *  base,
RegisterID *  property,
unsigned  propertyDescriptorOptions,
RegisterID *  getter 
)

◆ emitPutGetterSetter()

void JSC::BytecodeGenerator::emitPutGetterSetter ( RegisterID *  base,
const Identifier &  property,
unsigned  attributes,
RegisterID *  getter,
RegisterID *  setter 
)

◆ emitPutNewTargetToArrowFunctionContextScope()

void JSC::BytecodeGenerator::emitPutNewTargetToArrowFunctionContextScope ( )

◆ emitPutSetterById()

void JSC::BytecodeGenerator::emitPutSetterById ( RegisterID *  base,
const Identifier &  property,
unsigned  propertyDescriptorOptions,
RegisterID *  setter 
)

◆ emitPutSetterByVal()

void JSC::BytecodeGenerator::emitPutSetterByVal ( RegisterID *  base,
RegisterID *  property,
unsigned  propertyDescriptorOptions,
RegisterID *  setter 
)

◆ emitPutThisToArrowFunctionContextScope()

void JSC::BytecodeGenerator::emitPutThisToArrowFunctionContextScope ( )

◆ emitPutToScope()

RegisterID * JSC::BytecodeGenerator::emitPutToScope ( RegisterID *  scope,
const Variable &  variable,
RegisterID *  value,
ResolveMode  resolveMode,
InitializationMode  initializationMode 
)

◆ emitReadOnlyExceptionIfNeeded()

bool JSC::BytecodeGenerator::emitReadOnlyExceptionIfNeeded ( const Variable &  variable)

◆ emitRequireObjectCoercible()

void JSC::BytecodeGenerator::emitRequireObjectCoercible ( RegisterID *  value,
const String &  error 
)

◆ emitResolveConstantLocal()

RegisterID* JSC::BytecodeGenerator::emitResolveConstantLocal ( RegisterID *  dst,
const Variable &   
)

◆ emitResolveScope()

RegisterID * JSC::BytecodeGenerator::emitResolveScope ( RegisterID *  dst,
const Variable &  variable 
)

◆ emitRestParameter()

RegisterID * JSC::BytecodeGenerator::emitRestParameter ( RegisterID *  result,
unsigned  numParametersToSkip 
)

◆ emitReturn()

RegisterID * JSC::BytecodeGenerator::emitReturn ( RegisterID *  src,
ReturnFrom  from = ReturnFrom::Normal 
)

◆ emitReturnViaFinallyIfNeeded()

bool JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded ( RegisterID *  returnRegister)

◆ emitSetCompletionType()

void JSC::BytecodeGenerator::emitSetCompletionType ( CompletionType  type)
inline

◆ emitSetCompletionValue()

void JSC::BytecodeGenerator::emitSetCompletionValue ( RegisterID *  reg)
inline

◆ emitSetFunctionNameIfNeeded()

void JSC::BytecodeGenerator::emitSetFunctionNameIfNeeded ( ExpressionNode *  valueNode,
RegisterID *  value,
RegisterID *  name 
)

◆ emitStrcat()

RegisterID * JSC::BytecodeGenerator::emitStrcat ( RegisterID *  dst,
RegisterID *  src,
int  count 
)

◆ emitTDZCheck()

void JSC::BytecodeGenerator::emitTDZCheck ( RegisterID *  target)

◆ emitTDZCheckIfNecessary()

void JSC::BytecodeGenerator::emitTDZCheckIfNecessary ( const Variable &  variable,
RegisterID *  target,
RegisterID *  scope 
)

◆ emitThrow()

void JSC::BytecodeGenerator::emitThrow ( RegisterID *  exc)
inline

◆ emitThrowExpressionTooDeepException()

RegisterID * JSC::BytecodeGenerator::emitThrowExpressionTooDeepException ( )

◆ emitThrowOutOfMemoryError()

void JSC::BytecodeGenerator::emitThrowOutOfMemoryError ( )

◆ emitThrowRangeError()

void JSC::BytecodeGenerator::emitThrowRangeError ( const Identifier &  message)

◆ emitThrowReferenceError()

void JSC::BytecodeGenerator::emitThrowReferenceError ( const String &  message)

◆ emitThrowStaticError() [1/2]

void JSC::BytecodeGenerator::emitThrowStaticError ( ErrorType  errorType,
RegisterID *  raw 
)

◆ emitThrowStaticError() [2/2]

void JSC::BytecodeGenerator::emitThrowStaticError ( ErrorType  errorType,
const Identifier &  message 
)

◆ emitThrowTypeError() [1/2]

void JSC::BytecodeGenerator::emitThrowTypeError ( const String &  message)

◆ emitThrowTypeError() [2/2]

void JSC::BytecodeGenerator::emitThrowTypeError ( const Identifier &  message)

◆ emitToIndexString()

RegisterID * JSC::BytecodeGenerator::emitToIndexString ( RegisterID *  dst,
RegisterID *  index 
)

◆ emitToNumber()

RegisterID* JSC::BytecodeGenerator::emitToNumber ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ emitToPrimitive()

void JSC::BytecodeGenerator::emitToPrimitive ( RegisterID *  dst,
RegisterID *  src 
)

◆ emitToString()

RegisterID* JSC::BytecodeGenerator::emitToString ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ emitTryGetById()

RegisterID * JSC::BytecodeGenerator::emitTryGetById ( RegisterID *  dst,
RegisterID *  base,
const Identifier &  property 
)

◆ emitTypeOf()

RegisterID* JSC::BytecodeGenerator::emitTypeOf ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ emitUnaryNoDstOp()

RegisterID * JSC::BytecodeGenerator::emitUnaryNoDstOp ( OpcodeID  opcodeID,
RegisterID *  src 
)

◆ emitUnaryOp() [1/2]

RegisterID * JSC::BytecodeGenerator::emitUnaryOp ( OpcodeID  opcodeID,
RegisterID *  dst,
RegisterID *  src 
)

◆ emitUnaryOp() [2/2]

RegisterID * JSC::BytecodeGenerator::emitUnaryOp ( OpcodeID  opcodeID,
RegisterID *  dst,
RegisterID *  src,
OperandTypes  types 
)

◆ emitUnaryOpProfiled()

RegisterID * JSC::BytecodeGenerator::emitUnaryOpProfiled ( OpcodeID  opcodeID,
RegisterID *  dst,
RegisterID *  src 
)

◆ emitWillLeaveCallFrameDebugHook()

void JSC::BytecodeGenerator::emitWillLeaveCallFrameDebugHook ( )

◆ emitYield()

RegisterID * JSC::BytecodeGenerator::emitYield ( RegisterID *  argument)

◆ emitYieldPoint()

void JSC::BytecodeGenerator::emitYieldPoint ( RegisterID *  argument)

◆ endSwitch()

void JSC::BytecodeGenerator::endSwitch ( uint32_t  clauseCount,
const Vector< Ref< Label >, 8 > &  labels,
ExpressionNode **  nodes,
Label &  defaultLabel,
int32_t  min,
int32_t  range 
)

◆ ensureThis()

RegisterID * JSC::BytecodeGenerator::ensureThis ( )

◆ expectedFunctionForIdentifier()

ExpectedFunction JSC::BytecodeGenerator::expectedFunctionForIdentifier ( const Identifier &  identifier)

◆ finalDestination()

RegisterID* JSC::BytecodeGenerator::finalDestination ( RegisterID *  originalDst,
RegisterID *  tempDst = 0 
)
inline

◆ generate()

template<typename... Args>
static ParserError JSC::BytecodeGenerator::generate ( VM &  vm,
Args &&...  args 
)
inlinestatic

◆ generatorFrameRegister()

RegisterID* JSC::BytecodeGenerator::generatorFrameRegister ( )
inline

◆ generatorRegister()

RegisterID* JSC::BytecodeGenerator::generatorRegister ( )
inline

◆ generatorResumeModeRegister()

RegisterID* JSC::BytecodeGenerator::generatorResumeModeRegister ( )
inline

◆ generatorStateRegister()

RegisterID* JSC::BytecodeGenerator::generatorStateRegister ( )
inline

◆ generatorValueRegister()

RegisterID* JSC::BytecodeGenerator::generatorValueRegister ( )
inline

◆ hoistSloppyModeFunctionIfNecessary()

void JSC::BytecodeGenerator::hoistSloppyModeFunctionIfNecessary ( const Identifier &  functionName)

◆ ignoredResult()

RegisterID* JSC::BytecodeGenerator::ignoredResult ( )
inline

◆ initializeVariable()

RegisterID * JSC::BytecodeGenerator::initializeVariable ( const Variable &  variable,
RegisterID *  value 
)

◆ instructions()

Vector<UnlinkedInstruction, 0, UnsafeVectorOverflow>& JSC::BytecodeGenerator::instructions ( )
inline

◆ invalidateForInContextForLocal()

void JSC::BytecodeGenerator::invalidateForInContextForLocal ( RegisterID *  local)

◆ isArgumentNumber()

bool JSC::BytecodeGenerator::isArgumentNumber ( const Identifier &  ident,
int  argumentNumber 
)

◆ isArrowFunction()

bool JSC::BytecodeGenerator::isArrowFunction ( )
inline

◆ isBuiltinFunction()

bool JSC::BytecodeGenerator::isBuiltinFunction ( ) const
inline

◆ isConstructor()

bool JSC::BytecodeGenerator::isConstructor ( ) const
inline

◆ isDerivedClassContext()

bool JSC::BytecodeGenerator::isDerivedClassContext ( )
inline

◆ isDerivedConstructorContext()

bool JSC::BytecodeGenerator::isDerivedConstructorContext ( )
inline

◆ isStrictMode()

bool JSC::BytecodeGenerator::isStrictMode ( ) const
inline

◆ isSuperCallUsedInInnerArrowFunction()

bool JSC::BytecodeGenerator::isSuperCallUsedInInnerArrowFunction ( )

◆ isSuperUsedInInnerArrowFunction()

bool JSC::BytecodeGenerator::isSuperUsedInInnerArrowFunction ( )

◆ isThisUsedInInnerArrowFunction()

bool JSC::BytecodeGenerator::isThisUsedInInnerArrowFunction ( )

◆ labelScopeDepth()

int JSC::BytecodeGenerator::labelScopeDepth ( ) const

◆ labelScopeDepthToLexicalScopeIndex()

int JSC::BytecodeGenerator::labelScopeDepthToLexicalScopeIndex ( int  labelScopeDepth)

◆ lastOpcodeID()

OpcodeID JSC::BytecodeGenerator::lastOpcodeID ( ) const
inline

◆ leftHandSideNeedsCopy()

ALWAYS_INLINE bool JSC::BytecodeGenerator::leftHandSideNeedsCopy ( bool  rightHasAssignments,
bool  rightIsPure 
)
inline

◆ liftTDZCheckIfPossible()

void JSC::BytecodeGenerator::liftTDZCheckIfPossible ( const Variable &  variable)

◆ moveToDestinationIfNeeded()

RegisterID* JSC::BytecodeGenerator::moveToDestinationIfNeeded ( RegisterID *  dst,
RegisterID *  src 
)
inline

◆ needsTDZCheck()

bool JSC::BytecodeGenerator::needsTDZCheck ( const Variable &  variable)

◆ needsToUpdateArrowFunctionContext()

bool JSC::BytecodeGenerator::needsToUpdateArrowFunctionContext ( ) const
inline

◆ newBlockScopeVariable()

RegisterID * JSC::BytecodeGenerator::newBlockScopeVariable ( )

◆ newEmittedLabel()

Ref< Label > JSC::BytecodeGenerator::newEmittedLabel ( )

◆ newLabel()

Ref< Label > JSC::BytecodeGenerator::newLabel ( )

◆ newLabelScope()

LabelScopePtr JSC::BytecodeGenerator::newLabelScope ( LabelScope::Type  type,
const Identifier *  name = 0 
)

◆ newTarget()

RegisterID* JSC::BytecodeGenerator::newTarget ( )
inline

◆ newTemporary()

RegisterID * JSC::BytecodeGenerator::newTemporary ( )

◆ newTemporaryOr()

RegisterID* JSC::BytecodeGenerator::newTemporaryOr ( RegisterID *  suggestion)
inline

◆ parseMode()

SourceParseMode JSC::BytecodeGenerator::parseMode ( ) const
inline

◆ parserArena()

ParserArena& JSC::BytecodeGenerator::parserArena ( ) const
inline

◆ popFinallyControlFlowScope()

FinallyContext JSC::BytecodeGenerator::popFinallyControlFlowScope ( )

◆ popIndexedForInScope()

void JSC::BytecodeGenerator::popIndexedForInScope ( RegisterID *  local)

◆ popLexicalScope()

void JSC::BytecodeGenerator::popLexicalScope ( VariableEnvironmentNode *  node)

◆ popStructureForInScope()

void JSC::BytecodeGenerator::popStructureForInScope ( RegisterID *  local)

◆ popTry()

void JSC::BytecodeGenerator::popTry ( TryData *  tryData,
Label &  end 
)

◆ prepareLexicalScopeForNextForLoopIteration()

void JSC::BytecodeGenerator::prepareLexicalScopeForNextForLoopIteration ( VariableEnvironmentNode *  node,
RegisterID *  loopSymbolTable 
)

◆ promiseCapabilityRegister()

RegisterID* JSC::BytecodeGenerator::promiseCapabilityRegister ( )
inline

◆ propertyNames()

const CommonIdentifiers& JSC::BytecodeGenerator::propertyNames ( ) const
inline

◆ pushFinallyControlFlowScope()

FinallyContext * JSC::BytecodeGenerator::pushFinallyControlFlowScope ( Label &  finallyLabel)

◆ pushIndexedForInScope()

void JSC::BytecodeGenerator::pushIndexedForInScope ( RegisterID *  local,
RegisterID *  index 
)

◆ pushLexicalScope()

void JSC::BytecodeGenerator::pushLexicalScope ( VariableEnvironmentNode *  node,
TDZCheckOptimization  tdzCheckOptimization,
NestedScopeType  nestedScopeType = NestedScopeType::IsNotNested,
RegisterID **  constantSymbolTableResult = nullptr,
bool  shouldInitializeBlockScopedFunctions = true 
)

◆ pushStructureForInScope()

void JSC::BytecodeGenerator::pushStructureForInScope ( RegisterID *  local,
RegisterID *  index,
RegisterID *  property,
RegisterID *  enumerator 
)

◆ pushTry()

TryData * JSC::BytecodeGenerator::pushTry ( Label &  start,
Label &  handlerLabel,
HandlerType  handlerType 
)

◆ resolveType()

ResolveType JSC::BytecodeGenerator::resolveType ( )

◆ restoreScopeRegister() [1/2]

void JSC::BytecodeGenerator::restoreScopeRegister ( )

◆ restoreScopeRegister() [2/2]

void JSC::BytecodeGenerator::restoreScopeRegister ( int  lexicalScopeIndex)

◆ scopeRegister()

RegisterID* JSC::BytecodeGenerator::scopeRegister ( )
inline

◆ scriptMode()

JSParserScriptMode JSC::BytecodeGenerator::scriptMode ( ) const
inline

◆ shouldEmitDebugHooks()

bool JSC::BytecodeGenerator::shouldEmitDebugHooks ( )
inline

◆ superBinding()

SuperBinding JSC::BytecodeGenerator::superBinding ( ) const
inline

◆ tempDestination()

RegisterID* JSC::BytecodeGenerator::tempDestination ( RegisterID *  dst)
inline

◆ thisRegister()

RegisterID* JSC::BytecodeGenerator::thisRegister ( )
inline

◆ usesArrowFunction()

bool JSC::BytecodeGenerator::usesArrowFunction ( ) const
inline

◆ usesEval()

bool JSC::BytecodeGenerator::usesEval ( ) const
inline

◆ usesThis()

bool JSC::BytecodeGenerator::usesThis ( ) const
inline

◆ variable()

Variable JSC::BytecodeGenerator::variable ( const Identifier &  property,
ThisResolutionType  thisResolutionType = ThisResolutionType::Local 
)

◆ vm()

VM* JSC::BytecodeGenerator::vm ( ) const
inline

The documentation for this class was generated from the following files: