IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

JavaScript で 1_000_000_000 とか書けるようにする。

以下のブクマを見て、

はてなブックマーク - HINのブックマーク / 2007年10月11日
たしかに、Perl とか Ruby は 1_000_000 とか書けるなあ。
JS も出来たら便利だなあと思いました。

ということで SpiderMonkey で _ に対応してみる。

こんな感じで書き換えてみた。

Index: jsscan.c
===================================================================
RCS file: /cvsroot/mozilla/js/src/jsscan.c,v
retrieving revision 3.138
diff -r3.138 jsscan.c
1334,1335c1334,1338
<             } else if (JS7_ISDEC(c)) {
<                 radix = 8;
---
>             } else {
>                 if (c == '_') c = GetChar(ts);
>                 if (JS7_ISDEC(c)) {
>                     radix = 8;
>                 }
1339c1342,1343
<         while (JS7_ISHEX(c)) {
---
>         while (JS7_ISHEX(c) || c == '_') {
>             if (c == '_') c = GetChar(ts);
1367,1369c1371,1376
<                     ADD_TO_TOKENBUF(c);
<                     c = GetChar(ts);
<                 } while (JS7_ISDEC(c));
---
>                     if (c == '_') c = GetChar(ts);
>                     else {
>                         ADD_TO_TOKENBUF(c);
>                         c = GetChar(ts);
>                     }
>                 } while (JS7_ISDEC(c) || c =='_');
1385,1387c1392,1397
<                     ADD_TO_TOKENBUF(c);
<                     c = GetChar(ts);
<                 } while (JS7_ISDEC(c));
---
>                     if (c == '_') c = GetChar(ts);
>                     else {
>                         ADD_TO_TOKENBUF(c);
>                         c = GetChar(ts);
>                     }
>                 } while (JS7_ISDEC(c) || c == '_');

実行はこんな感じ

$ js
js> 1_000_000
1000000
js> 1_000_000.000_000_1
1000000.0000001

できたー

実は、 3, 4 年振りに C を書きました。
とりあえず gdb の使い方を覚えたい今日この頃。