Title: Erroneous errors for multiline statements that include BigInt literal suffix · Issue #25835 · nodejs/node · GitHub
Open Graph Title: Erroneous errors for multiline statements that include BigInt literal suffix · Issue #25835 · nodejs/node
X Title: Erroneous errors for multiline statements that include BigInt literal suffix · Issue #25835 · nodejs/node
Description: Version: v10.15.0, v10.15.1, v11.8.0 Platform: Linux 4.15.0-43-generic # 46~16.04.1-Ubuntu SMP Fri Dec 7 13:31:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux Subsystem: REPL Possibly related to the issues discussed in #24231 When attempting ...
Open Graph Description: Version: v10.15.0, v10.15.1, v11.8.0 Platform: Linux 4.15.0-43-generic # 46~16.04.1-Ubuntu SMP Fri Dec 7 13:31:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux Subsystem: REPL Possibly related to the iss...
X Description: Version: v10.15.0, v10.15.1, v11.8.0 Platform: Linux 4.15.0-43-generic # 46~16.04.1-Ubuntu SMP Fri Dec 7 13:31:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux Subsystem: REPL Possibly related to the iss...
Opengraph URL: https://github.com/nodejs/node/issues/25835
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Erroneous errors for multiline statements that include BigInt literal suffix","articleBody":"\u003c!--\r\nThank you for reporting a possible bug in Node.js.\r\n\r\nPlease fill in as much of the template below as you can.\r\n\r\nVersion: output of `node -v`\r\nPlatform: output of `uname -a` (UNIX), or version and 32 or 64-bit (Windows)\r\nSubsystem: if known, please specify the affected core module name\r\n\r\nIf possible, please provide code that demonstrates the problem, keeping it as\r\nsimple and free of external dependencies as you can.\r\n--\u003e\r\n\r\n* **Version**: v10.15.0, v10.15.1, v11.8.0\r\n* **Platform**: Linux \u003cname redacted\u003e 4.15.0-43-generic # 46~16.04.1-Ubuntu SMP Fri Dec 7 13:31:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux\r\n* **Subsystem**: REPL\r\n\r\n\u003c!-- Please provide more details below this comment. --\u003e\r\n## Possibly related to the issues discussed in #24231\r\n\r\nWhen attempting to create a multiline statement that includes the BigInt literal suffix syntax (i.e. Number followed by `n` to denote a BigInt) causes an erroneous `SyntaxError: Invalid or unexpected token` to be thrown. This behavior appears to occur only when the end of the statement is not on the same line as the BigInt. For example, the following seems to be erroneous behavior:\r\n\r\n```\r\n\u003e let a = [\r\n... 4,\r\n... 'hello',\r\n... 0xffn,\r\nThrown:\r\n0xffn,\r\n ^\r\n\r\nSyntaxError: Unexpected end of input\r\n```\r\n\r\nWhereas if the statement ends on the same line, it seems to behave as expected:\r\n\r\n```\r\n\u003e [\r\n... 4,\r\n... 'hello',\r\n... 0xffn]\r\n[ 4, 'hello', 255n ]\r\n```\r\n\r\nThe same behavior seems to extend to any multiline statements regardless of whether or not the BigNum is the last thing on the line:\r\n\r\nWith BigNum:\r\n```\r\n\u003e function fun(){\r\n... let m = 0xffn; return m;\r\nThrown:\r\nlet m = 0xffn; return m;\r\n ^\r\n\r\nSyntaxError: Unexpected end of input\r\n```\r\nWithout BigNum:\r\n```\r\nfunction fun(){\r\n... let m = 0xff; return m;\r\n... }\r\nundefined\r\n```\r\nBigNum on same line as closing bracket:\r\n```\r\n\u003e function fun(){\r\n... let m = 0xffn; return m;}\r\nundefined\r\n\u003e fun()\r\n255n\r\n```\r\n\r\n### Edit (Not sure if helpful):\r\n\r\nBigInt suffix seems to be picked up as an identifier. Given the following input into REPL:\r\n```\r\n\u003e [\r\n... 0xffn,\r\n\r\n\u003cdebugger paused on pressing return key\u003e\r\n```\r\n\r\n`pp$4.raise()` at line 2753 in `internal/deps/acorn/dist/acorn.js` is receiving `pos = 6, message = \"Identifier directly after number (2:4)`\r\n\r\nThat in turn seems to be coming from `pp$8.readRadixNumber()` at line 4981 in `internal/deps/acorn/dist/acorn.js`\r\n\r\nThe issue seems to originate at `isIdentifierStart()` (internal/deps/acorn/dist/acorn.js:71), which does in fact pick up `n` as the start of an identifier.\r\n\r\n`isIdentifierStart()` is also called by `pp$8.readNumber()` when using a normal, non-radix-prefixed number, producing the same result.\r\n\r\n`isIdentifierStart()` is bypassed when the statement is terminated on the same line as the BigInt, which explains why this scenario does not trigger the error:\r\n```\r\n\u003e [\r\n... 0xffn]\r\n[ 255n ]\r\n\u003e\r\n```","author":{"url":"https://github.com/MatteBru","@type":"Person","name":"MatteBru"},"datePublished":"2019-01-30T23:09:12.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/25835/node/issues/25835"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:6d2a5a24-23b7-d5bd-020f-5f10c202bbf9 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 9D48:A06EB:682CB1:98241C:6A4E10E3 |
| html-safe-nonce | fff85b3ce644f567c609a5f65acb9786d9cd1df34f6f0f0b0f2f6320ca654088 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5RDQ4OkEwNkVCOjY4MkNCMTo5ODI0MUM6NkE0RTEwRTMiLCJ2aXNpdG9yX2lkIjoiNDM1Nzk4NTY1MjExMDY1OTgxMSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | d5d7269c3a09e2f834b2677eca82f33f31dff65b66c55cef97097e7e06c48ab3 |
| hovercard-subject-tag | issue:405006605 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/25835/issue_layout |
| twitter:image | https://opengraph.githubassets.com/ff1973856e9da4dd1583057f64a45d522908ab7f9686b37652d4dac686007445/nodejs/node/issues/25835 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/ff1973856e9da4dd1583057f64a45d522908ab7f9686b37652d4dac686007445/nodejs/node/issues/25835 |
| og:image:alt | Version: v10.15.0, v10.15.1, v11.8.0 Platform: Linux 4.15.0-43-generic # 46~16.04.1-Ubuntu SMP Fri Dec 7 13:31:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux Subsystem: REPL Possibly related to the iss... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | MatteBru |
| hostname | github.com |
| expected-hostname | github.com |
| None | df0492960db29b4938cb72070351d6b1d0c6c0767b27ceb8394bbf4fcc0223c6 |
| turbo-cache-control | no-preview |
| go-import | github.com/nodejs/node git https://github.com/nodejs/node.git |
| octolytics-dimension-user_id | 9950313 |
| octolytics-dimension-user_login | nodejs |
| octolytics-dimension-repository_id | 27193779 |
| octolytics-dimension-repository_nwo | nodejs/node |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 27193779 |
| octolytics-dimension-repository_network_root_nwo | nodejs/node |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 51470c353b8a1f52a88d3e3cc2014b17ab8cc1ce |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width