ECMAScript | Вывод Имени Функции

Оглавление

8.3.1 SS: HasName
8.3.2 SS: IsFunctionDefinition
8.3.3 SS: IsAnonymousFunctionDefinition ( expr )
8.3.4 SS: IsIdentifierRef
8.3.5 RS: NamedEvaluation

 

8.3.1 Статическая семантика: HasName

Операция HasName (Имеет Имя?), управляемая синтаксисом, не принимает аргументов. Она определяется кусочно по следующим производствами:

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList

1. Пусть expr будет ParenthesizedExpression, которое покрывается CoverParenthesizedExpressionAndArrowParameterList.
2. Если IsFunctionDefinition выражения expr имеет значение false, вернуть false.
3. Вернуть HasName выражения expr.

FunctionExpression :

function ( FormalParameters ) { FunctionBody }

GeneratorExpression :

function * ( FormalParameters ) { GeneratorBody }

AsyncGeneratorExpression :

async function * ( FormalParameters ) { AsyncGeneratorBody }

AsyncFunctionExpression :

async function ( FormalParameters ) { AsyncFunctionBody }

ArrowFunction :

ArrowParameters => ConciseBody

AsyncArrowFunction :

async AsyncArrowBindingIdentifier => AsyncConciseBody

CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

ClassExpression : class ClassTail

1. Вернуть false.

FunctionExpression :

function BindingIdentifier ( FormalParameters ) { FunctionBody }

GeneratorExpression :

function * BindingIdentifier ( FormalParameters ) { GeneratorBody }

AsyncGeneratorExpression :

async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody }

AsyncFunctionExpression :

async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody }

ClassExpression : class BindingIdentifier ClassTail

1. Вернуть true.

 

 

8.3.2 Статическая семантика: IsFunctionDefinition

Операция IsFunctionDefinition (Является ли Определением Функции), управляемая синтаксисом, не принимает аргументов. Оно определяется кусочно по следующим производствами:

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList

1. Пусть expr будет ParenthesizedExpression, которое покрывается CoverParenthesizedExpressionAndArrowParameterList.
2. Вернуть IsFunctionDefinition выражения expr.

PrimaryExpression :thisIdentifierReferenceLiteralArrayLiteralObjectLiteralRegularExpressionLiteralTemplateLiteralMemberExpression :MemberExpression [ Expression ]MemberExpression . IdentifierNameMemberExpression TemplateLiteralSuperPropertyMetaPropertynew MemberExpression ArgumentsMemberExpression . PrivateIdentifierNewExpression :new NewExpressionLeftHandSideExpression :CallExpressionOptionalExpressionUpdateExpression :LeftHandSideExpression ++LeftHandSideExpression —++ UnaryExpression— UnaryExpressionUnaryExpression :delete UnaryExpressionvoid UnaryExpressiontypeof UnaryExpressionUnaryExpression— UnaryExpressionUnaryExpressionUnaryExpressionAwaitExpressionExponentiationExpression :UpdateExpression ** ExponentiationExpressionMultiplicativeExpression :MultiplicativeExpression MultiplicativeOperator ExponentiationExpressionAdditiveExpression :AdditiveExpression + MultiplicativeExpressionAdditiveExpression — MultiplicativeExpressionShiftExpression :ShiftExpression << AdditiveExpressionShiftExpression >> AdditiveExpressionShiftExpression >>> AdditiveExpressionRelationalExpression :RelationalExpression < ShiftExpressionRelationalExpression > ShiftExpressionRelationalExpression <= ShiftExpressionRelationalExpression >= ShiftExpressionRelationalExpression instanceof ShiftExpressionRelationalExpression in ShiftExpressionPrivateIdentifier in ShiftExpressionEqualityExpression :EqualityExpression == RelationalExpressionEqualityExpression != RelationalExpressionEqualityExpression === RelationalExpressionEqualityExpression !== RelationalExpressionBitwiseANDExpression :BitwiseANDExpression & EqualityExpressionBitwiseXORExpression :BitwiseXORExpression ^ BitwiseANDExpressionBitwiseORExpression :BitwiseORExpression | BitwiseXORExpressionLogicalANDExpression :LogicalANDExpression && BitwiseORExpressionLogicalORExpression :LogicalORExpression || LogicalANDExpressionCoalesceExpression :CoalesceExpressionHead ?? BitwiseORExpressionConditionalExpression :ShortCircuitExpression ? AssignmentExpression : AssignmentExpressionAssignmentExpression :YieldExpressionLeftHandSideExpression = AssignmentExpressionLeftHandSideExpression AssignmentOperator AssignmentExpressionLeftHandSideExpression &&= AssignmentExpressionLeftHandSideExpression ||= AssignmentExpressionLeftHandSideExpression ??= AssignmentExpressionExpression :Expression , AssignmentExpression

1. Вернуть false.

AssignmentExpression :ArrowFunctionAsyncArrowFunctionFunctionExpression :function BindingIdentifieropt ( FormalParameters ) { FunctionBody }GeneratorExpression :function * BindingIdentifieropt ( FormalParameters ) { GeneratorBody }AsyncGeneratorExpression :async function * BindingIdentifieropt ( FormalParameters ) { AsyncGeneratorBody }AsyncFunctionExpression :async function BindingIdentifieropt ( FormalParameters ) { AsyncFunctionBody }ClassExpression : class BindingIdentifieropt ClassTail

1. Вернуть true.

 

8.3.3 Статическая семантика: IsAnonymousFunctionDefinition (expr)

Абстрактная операция IsAnonymousFunctionDefinition (Является ли Анонимным Определением Функций) принимает аргумент expr (Узел Синтаксического Анализа AssignmentExpression или Узел Синтаксического Анализа Initializer). Он определяет, является ли его аргумент определением функции, которая не связывает имя. При вызове он выполняет следующие шаги:

1. Если IsFunctionDefinition выражения expr имеет значение false, вернуть false.
2. Пусть hasName будет HasName выражения expr.
3. Если hasName является true, вернуть false.
4. Верните true.

 

8.3.4 Статическая семантика: IsIdentifierRef

Операция IsIdentifierRef (Является Идентификатором Ссылки), управляемая синтаксисом, не принимает аргументов. Она определяется кусочно по следующим производствам:

PrimaryExpression : IdentifierReference

1. Верните true.

PrimaryExpression :thisLiteralArrayLiteralObjectLiteralFunctionExpressionClassExpressionGeneratorExpressionAsyncFunctionExpressionAsyncGeneratorExpressionRegularExpressionLiteralTemplateLiteralCoverParenthesizedExpressionAndArrowParameterListMemberExpression :MemberExpression [ Expression ]MemberExpression . IdentifierNameMemberExpression TemplateLiteralSuperPropertyMetaPropertynew MemberExpression ArgumentsMemberExpression . PrivateIdentifierNewExpression :new NewExpressionLeftHandSideExpression :CallExpressionOptionalExpression

1. Вернуть false.

 

8.3.5 Семантика времени выполнения: NamedEvaluation

Операция NamedEvaluation (Именованная оценка), управляемая синтаксисом, принимает аргумент name. Она определяется кусочно по следующим производствам:

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList

1. Пусть expr будет ParenthesizedExpression, которое покрывается CoverParenthesizedExpressionAndArrowParameterList.
2. Вернуть результат выполнения NamedEvaluation для expr с именем аргумента.

ParenthesizedExpression : ( Expression )

1. Утверждение: IsAnonymousFunctionDefinition (Expression) истинно.
2. Вернуть результат выполнения NamedEvaluation для выражения с именем аргумента.

FunctionExpression : function ( FormalParameters ) { FunctionBody }

1. Верните InstantiateOrdinaryFunctionExpression из FunctionExpression с именем аргумента.

GeneratorExpression : function * ( FormalParameters ) { GeneratorBody }

1. Верните InstantiateGeneratorFunctionExpression из GeneratorExpression с именем аргумента.

AsyncGeneratorExpression : async function * ( FormalParameters ) { AsyncGeneratorBody }

1. Верните InstantiateAsyncGeneratorFunctionExpression из AsyncGeneratorExpression с именем аргумента.

AsyncFunctionExpression : async function ( FormalParameters ) { AsyncFunctionBody }

1. Верните InstantiateAsyncFunctionExpression из AsyncFunctionExpression с именем аргумента.

ArrowFunction : ArrowParameters => ConciseBody

1. Верните InstantiateArrowFunctionExpression из ArrowFunction с именем аргумента.

AsyncArrowFunction :async AsyncArrowBindingIdentifier => AsyncConciseBodyCoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

1. Верните InstantiateAsyncArrowFunctionExpression из AsyncArrowFunction с именем аргумента.

ClassExpression : class ClassTail

1. Пусть значение будет результатом ClassDefinitionEvaluation для ClassTail с неопределенными аргументами и именем.
2. ReturnIfAbrupt (значение).
3. Задайте значение. [[SourceText]] исходному тексту, соответствующему ClassExpression.
4. Возвращаемое значение.

 

Информационные ссылки

Стандарт ECMAScript — Раздел «8.3 Function Name Inference» — https://tc39.es/ecma262/#sec-syntax-directed-operations-function-name-inference

Поделись записью