context.h

context.h

  • GearsOSの中心的なヘッダファイル
  • 実行されるすべてのCodeGear, 利用されるすべてのDataGearが定義されている

# 内容

# 定義されているもの

  • GearsOSで利用するマクロ
  • GearsOSのContext
  • DataGearの集合
    • union Data

# includeしているもの

  • 各種enum
    • DataGear
    • CodeGear
  • c/extern.h

# 生成方法

# 従来の方法 (~2019/12)

  • 秘伝のタレ的に手で追加していく
    • interfaceやImplを手でDataGearにマッピングして追加する

# 現在の方法

generate_context.pl で自動的に生成される

# generate_context.pl内での生成について

  • ALLOCATEなどのマクロや、__codeでの引数で利用している構造体がピックアップされる
  • 構造体の名前に対応するヘッダファイルが検索される
    • struct Stackの場合はStack.h
  • ヘッダファイルの名前が衝突する場合、 .dg のファイルが優先的に利用される
  • 中身がスキャンされた後、 辞書順で「Interface -> Impl」の順で union Data として出力される

# テンプレートファイル

  • gearstools/lib/Gears/Context/Template.pmもしくは、 Template/XV6.pmがテンプレート
    • 直接メソッドにヒアドキュメントで記述されている

# おかしいな?と思ったら

  • 生成された context.h を確認してください
    • XV6の場合は CMakeFiles/kernel.dir/context.h が対応します

# context.hに含めたくないCodeGearの引数

  • //\s*Skip:\s*generate_context の正規表現にマッチされた場合、次の行を飛ばす仕組みが実装されています
1
2
//Skip: generate_context
__code sample_codegear(Impl* nanka, struct hoge* fooo,__code next(...)){
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy