Object Getter triggers yield to incorrectly parse as YieldExpression
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 42/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- javascript, typescript
- Área
- compilers
Línea de trabajo
Empieza en parser.ts alrededor de la línea 3257 y reproduce el problema con el ejemplo proporcionado de esprima.parse. Compara el AST resultante con la salida esperada, centrándote en si analizar el getter deja context.allowYield cambiado. Está hecho cuando el yield posterior se representa como un Identifier y el getter sigue analizándose correctamente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
When any get property is encountered the context.allowYield property is set to false and not reverted after parsing the getter body. This results in any future yield to be parsed as a yield expression incorrectly.
esprima.parse(`
({get a(){}});
yield;
`)
Expected output
{
"type": "Program",
"sourceType": "script",
"body": [
{
"type": "ExpressionStatement",
"expression": {
"type": "ObjectExpression",
"properties": [
{
"type": "Property",
"key": {
"type": "Identifier",
"name": "a"
},
"computed": false,
"kind": "get",
"method": false,
"shorthand": false,
"value": {
"type": "FunctionExpression",
"id": null,
"params": [],
"body": {
"type": "BlockStatement",
"body": []
},
"generator": false,
"async": false,
"expression": false
}
}
]
}
},
{
"type": "ExpressionStatement",
"expression": {
"type": "Identifier",
"name": "yield"
}
}
]
}
Actual output
{
"type": "Program",
"body": [
{
"type": "ExpressionStatement",
"expression": {
"type": "ObjectExpression",
"properties": [
{
"type": "Property",
"key": {
"type": "Identifier",
"name": "a"
},
"computed": false,
"value": {
"type": "FunctionExpression",
"id": null,
"params": [],
"body": {
"type": "BlockStatement",
"body": []
},
"generator": false,
"expression": false,
"async": false
},
"kind": "get",
"method": false,
"shorthand": false
}
]
}
},
{
"type": "ExpressionStatement",
"expression": {
"type": "YieldExpression",
"argument": null,
"delegate": false
}
}
],
"sourceType": "script"
}
This is pulled directly from everything.js
Using this file as and example, I was surprised that removing line 84 will cause this to parse differently as they are completely unrelated.
I believe the offending code is located on line 3257 of parser.ts.
I believe the correct path in the ecma262 spec for line 200 would be
- StatementListItem
- Statement
- ExpressionStatement
- Expression
- AssignmentExpression
- ConditionalExpression
- LogicalORExpression
- LogicalANDExpression
- BitwiseORExpression
- BitwiseXORExpression
- BitwiseANDExpression
- EqualityExpression
- RelationalExpression
- ShiftExpression
- AdditiveExpression
- MultiplicativeExpression
- ExponentiationExpression
- UnaryExpression
- UpdateExpression
- LeftHandSideExpression
- NewExpression
- MemberExpression
- PrimaryExpression
- IdentifierReference
- Identifier
- Lenguaje dominante
- TypeScript
- Estrellas
- 7.1k
- Forks
- 772
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de jquery/esprima
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Tokenizer misidentifies Regex as Division after nested parentheses due to flat state trackingAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
-
Parse error in EsprimaAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Todos los issues de jquery/esprima
Issues similares
-
automated-triage type/bug type/ci
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
📦 expo-router Android contributor: external needs review sdk-58 severity: medium
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
expo/expo#53436 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Translate the READMEAbiertodocumentation good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
asasemahmed/openboard#68 ·
Los mantenedores suelen responder en 1 día
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Document PowerShell shell semantics and read-only Bash deduplication in Built-in Tools referenceAbiertodocumentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100