Files
nixjit/docs/resolve/resolve.mmd
2025-09-14 17:39:57 +08:00

93 lines
3.1 KiB
Plaintext

flowchart TD
Start([ResolveCtx::resolve_root]) --> Resolve[ResolveContext::resolve]
Resolve --> CheckType{检查表达式类型}
CheckType -->|AttrSet| A_ResolveKeys[解析所有键]
A_ResolveKeys --> A_ResolveValues[解析所有值]
A_ResolveValues --> End
A_ResolveKeys -.->|resolve| Resolve
A_ResolveValues -.->|resolve| Resolve
CheckType -->|List| L_ResolveElements[解析所有元素]
L_ResolveElements --> End
L_ResolveElements -.->|resolve| Resolve
CheckType -->|HasAttr| HA_ResolveAttrSet[解析 AttrSet]
HA_ResolveAttrSet --> HA_ResolveAttrPath[解析 AttrPath]
HA_ResolveAttrPath --> End
HA_ResolveAttrSet -.->|resolve| Resolve
HA_ResolveAttrPath -.->|resolve| Resolve
CheckType -->|BinOp| B_ResolveLeft[解析左操作数]
B_ResolveLeft --> B_ResolveRight[解析右操作数]
B_ResolveRight --> End
B_ResolveLeft -.->|resolve| Resolve
B_ResolveRight -.->|resolve| Resolve
CheckType -->|UnOp| U_ResolveOperand[解析操作数]
U_ResolveOperand --> End
U_ResolveOperand -.->|resolve| Resolve
CheckType -->|Select| S_ResolveAttrSet[解析 AttrSet]
S_ResolveAttrSet --> S_ResolveAttrPath[解析 AttrPath]
S_ResolveAttrPath --> End
S_ResolveAttrSet -.->|resolve| Resolve
S_ResolveAttrPath -.->|resolve| Resolve
CheckType -->|If| I_ResolveCond[解析条件]
I_ResolveCond --> I_ResolveConsq[解析 then 分支]
I_ResolveConsq --> I_ResolveAlter[解析 else 分支]
I_ResolveAlter --> End
I_ResolveCond -.->|resolve| Resolve
I_ResolveConsq -.->|resolve| Resolve
I_ResolveAlter -.->|resolve| Resolve
CheckType -->|Call| C_ResolveFunc[解析函数]
C_ResolveFunc --> C_ResolveArg[解析参数]
C_ResolveArg --> End
C_ResolveFunc -.->|resolve| Resolve
C_ResolveArg -.->|resolve| Resolve
CheckType -->|Let| Le_EnterLet[进入 Let 环境]
Le_EnterLet --> Le_ResolveValues[解析所有键]
Le_ResolveValues --> Le_ResolveBody[解析表达式]
Le_ResolveBody --> Le_ExitLet[退出 Let 环境]
Le_ExitLet --> End
Le_ResolveValues -.->|resolve| Resolve
Le_ResolveBody -.->|resolve| Resolve
CheckType -->|With| W_ResolveNameSpace[解析命名空间]
W_ResolveNameSpace --> W_EnterWith[进入命名空间]
W_EnterWith --> W_ResolveBody[解析表达式]
W_ResolveBody --> W_ExitWith[退出命名空间]
W_ExitWith --> End
W_ResolveNameSpace -.->|resolve| Resolve
W_ResolveBody -.->|resolve| Resolve
CheckType -->|Assert| As_ResolveCond[解析断言]
As_ResolveCond --> As_ResolveBody[解析表达式]
As_ResolveBody --> End
As_ResolveCond -.->|resolve| Resolve
As_ResolveBody -.->|resolve| Resolve
CheckType -->|ConcatStrings| CS_ResolveParts[解析所有字符串片段]
CS_ResolveParts --> End
CS_ResolveParts -.->|resolve| Resolve
CheckType -->|Const| End
CheckType -->|Str| End
CheckType -->|Var| V_Lookup[查找变量]
V_Lookup --> End
CheckType -->|Arg| Ar_Lookup[查找参数]
Ar_Lookup --> End
CheckType -->|Func| F_EnterEnv[进入函数环境]
F_EnterEnv --> F_ResolveBody[解析函数体]
F_ResolveBody --> F_ExitEnv[退出函数环境]
F_ExitEnv --> End
End([返回结果])