連想配列の追加(再) by FineArchs · Pull Request #738 · aiscript-dev/aiscript

手違いにより #693 が閉じられてしまったので再作成します。

概要

let sampledic = dic {
  [1]: null
  ['hoge']: 'fuga'
  [[1, 2, 4]]: [4, 5, 6]
  [Core:add]: @(){ print(1) }
}

let key = [1, 2, 4]
<: sampledic[key] // [4, 5, 6]

名前空間記法との兼ね合いから、キーは全て[ ]で囲うようになっています。
キーの等価性はdeep-equalになっています(関数のみ参照比較)。

実装

トライ木の構造を採用しています。
その都合上、キーを直列化する仕組みを導入しています。

Why

#225

備考

  • 循環参照対策はまだしていません
  • 同時書き込み対策はまだしていません
  • console.jsが書き換わっているのはついでです。変数が保持されるようになっています
  • 別PRで組み込みプロパティの追加もしたいです