---
generated_at: 2026-02-17 10:45:00
metrics:
  claims_total: 35
  claims_with_evidence: 34
  claims_without_evidence: 1
confidence_derived: 0.97
---

# 根拠レポート: 12-プラグマ処理

## 概要

本レポートは「機能設計書 12-プラグマ処理」の記載内容について、ソースコードとの整合性を検証し、各記述の根拠を明示する。

## 根拠一覧

### 1. 機能概要に関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| プラグマの意味解析を担当 | compiler/pragmas.nim | 10行 | 確認済み: "This module implements semantic checking for pragmas" |
| シンボルにフラグやプロパティを設定 | compiler/pragmas.nim | 900-1199行 | 確認済み: incl(sym, sfImportc)等の処理多数 |

### 2. プラグマ種別定義に関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| procPragmas定義 | compiler/pragmas.nim | 32-39行 | 確認済み: procPragmas* = declPragmas + {...} |
| typePragmas定義 | compiler/pragmas.nim | 72-77行 | 確認済み: typePragmas* = declPragmas + {...} |
| varPragmas定義 | compiler/pragmas.nim | 80-84行 | 確認済み: varPragmas* = declPragmas + {...} |
| stmtPragmas定義 | compiler/pragmas.nim | 52-60行 | 確認済み: stmtPragmas* = {...} |
| templatePragmas定義 | compiler/pragmas.nim | 42-43行 | 確認済み: templatePragmas* = {...} |
| macroPragmas定義 | compiler/pragmas.nim | 44-46行 | 確認済み: macroPragmas* = declPragmas + {...} |

### 3. 入力パラメータに関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| pragma関数シグネチャ | compiler/pragmas.nim | 107-108行 | 確認済み: proc pragma*(c: PContext, sym: PSym, n: PNode, validPragmas: TSpecialWords; isStatement: bool = false; comesFromPush = false) |
| validPragmasパラメータ | compiler/pragmas.nim | 107行 | 確認済み: validPragmas: TSpecialWords |
| isStatementパラメータ | compiler/pragmas.nim | 108行 | 確認済み: isStatement: bool = false |
| comesFromPushパラメータ | compiler/pragmas.nim | 108行 | 確認済み: comesFromPush = false |

### 4. 外部連携プラグマ処理に関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| makeExternImport関数 | compiler/pragmas.nim | 169-172行 | 確認済み: proc makeExternImport定義 |
| makeExternExport関数 | compiler/pragmas.nim | 174-176行 | 確認済み: proc makeExternExport定義 |
| processImportCpp関数 | compiler/pragmas.nim | 184-192行 | 確認済み: proc processImportCpp定義 |
| sfImportcフラグ設定 | compiler/pragmas.nim | 171行 | 確認済み: s.incl(sfImportc) |
| sfExportcフラグ設定 | compiler/pragmas.nim | 176行 | 確認済み: s.incl(sfExportc) |
| optMixedMode有効化 | compiler/pragmas.nim | 192行 | 確認済み: incl c.config.globalOptions, optMixedMode |

### 5. 動的ライブラリ処理に関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| processDynLib関数 | compiler/pragmas.nim | 348-366行 | 確認済み: proc processDynLib定義 |
| getLib関数 | compiler/pragmas.nim | 322-331行 | 確認済み: proc getLib定義 |
| cdecl呼び出し規約設定 | compiler/pragmas.nim | 366行 | 確認済み: sym.typ.callConv = ccCDecl |

### 6. 呼び出し規約処理に関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| wordToCallConv関数 | compiler/pragmas.nim | 264-267行 | 確認済み: proc wordToCallConv定義 |
| 変換計算式 | compiler/pragmas.nim | 267行 | 確認済み: TCallingConvention(ord(ccNimCall) + ord(sw) - ord(wNimcall)) |
| FirstCallConv/LastCallConv | compiler/pragmas.nim | 25-26行 | 確認済み: FirstCallConv* = wNimcall, LastCallConv* = wNoconv |

### 7. オプション処理に関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| pragmaToOptions関数 | compiler/pragmas.nim | 393行以降 | 確認済み: proc pragmaToOptions* |
| wChecksのオプション変換 | compiler/pragmas.nim | 395行 | 確認済み: of wChecks: ChecksOptions |
| push/pop処理 | compiler/pragmas.nim | 1171-1176行 | 確認済み: of wPush: processPush, of wPop: processPop |

### 8. エラー処理に関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| invalidPragma関数 | compiler/pragmas.nim | 120-121行 | 確認済み: proc invalidPragma* |
| illegalCustomPragma関数 | compiler/pragmas.nim | 123-132行 | 確認済み: proc illegalCustomPragma* |
| errStringLiteralExpected | compiler/pragmas.nim | 117行 | 確認済み: errStringLiteralExpected = "string literal expected" |
| errIntLiteralExpected | compiler/pragmas.nim | 118行 | 確認済み: errIntLiteralExpected = "integer literal expected" |

### 9. 特殊プラグマ処理に関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| processMagic関数 | compiler/pragmas.nim | 249-262行 | 確認済み: proc processMagic定義 |
| processCodegenDecl関数 | compiler/pragmas.nim | 245-247行 | 確認済み: proc processCodegenDecl定義 |
| pragmaNoForward関数 | compiler/pragmas.nim | 281-292行 | 確認済み: proc pragmaNoForward*定義 |

### 10. プラグマ引数処理に関する根拠

| 記述内容 | 根拠ファイル | 該当行 | 検証結果 |
|---------|-------------|--------|---------|
| expectStrLit関数 | compiler/pragmas.nim | 220-221行 | 確認済み: proc expectStrLit定義 |
| expectIntLit関数 | compiler/pragmas.nim | 223-231行 | 確認済み: proc expectIntLit定義 |
| getOptionalStr関数 | compiler/pragmas.nim | 233-235行 | 確認済み: proc getOptionalStr定義 |

## 根拠なし項目

| 記述内容 | 理由 |
|---------|------|
| magicプラグマのsystemモジュール制限 | コメントアウトされたコード(250-251行)が存在するが、現在は強制されていない |

## 信頼度評価

- **claims_total**: 35（総主張数）
- **claims_with_evidence**: 34（根拠あり）
- **claims_without_evidence**: 1（根拠なし）
- **confidence_derived**: 0.97（34/35）

## 検証方法

1. compiler/pragmas.nimの全1422行を読み込み、記載内容との照合を実施
2. 関数定義、型定義、処理ロジックの行番号を特定
3. プラグマセット定義（procPragmas等）の内容を確認

## 結論

本機能設計書の記載内容は、ソースコードとの整合性が97%確認された。唯一の根拠なし項目はコメントアウトされた制限機能に関するものであり、現在の実装では適用されていないことを確認した。プラグマ処理の主要機能はすべてコードで裏付けられている。
