[JS/TS] Negating a -0.0 literal emits --0 and fails with SyntaxError

オープン 初心者向け
#5,280 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
77/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
javascript, typescript
領域
compilers

調査の方向性

まず、issueに記載された単項マイナスの括弧付けチェックを見つけてください。このチェックは現在、値が0.0未満かどうかを判定しています。-0.0 リテラルをどのように処理するか追跡してください。再現例を使って、生成されたJavaScriptまたはTypeScriptに無効な --0 が含まれなくなったことを確認し、次に出力が有効であり、評価結果が0.000000になることを検証してください。

索引モデルが issue の本文から書いたものです。

説明

Description

Negating a -0.0 float literal (directly or after inlining) emits --0 in JavaScript and TypeScript output, which fails at parse time as a prefix decrement on a literal because the unary-minus parenthesization check only tests value < 0.0 (which is false for -0.0).

Repro code
let x = -(-0.0)
printfn "%f" x
Expected and actual results

Expected result:

Compiles to valid JavaScript/TypeScript (e.g. const x = -(-0); or 0), and outputs 0.000000 like .NET F#.

Actual result:

Fable compiles the binding to const x = --0;, which Node.js rejects at parse time with:

SyntaxError: Invalid left-hand side expression in prefix operation
Related information
  • Fable version: 5.27.0
  • Operating system: macOS / Linux

Credit: https://ucsbplse.github.io/

主要言語
F#
スター
3.2k
フォーク
335
平均マージ
18時間 57分
マージ済み PR(30日)
154

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートなし
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

fable-compiler/Fable のほかの issue

fable-compiler/Fable の issue をすべて見る

似ている issue

Compilers の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。