Skip to content

Commit c6e68ea

Browse files
RINNE-TANChronostasys
authored andcommitted
halfdown:docs
1 parent f2d73e8 commit c6e68ea

File tree

2 files changed

+80
-1
lines changed

2 files changed

+80
-1
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ clean:
3030
@cd target && rm -f *.ll && rm -f *.bc && rm -rf *.dSYM && rm -f testout* && rm -f out* && rm -f *.o
3131

3232
bench:
33-
@cargo bench --all
33+
@cd immix && cargo bench
34+
@cd vm && cargo bench
3435

3536
bench-simple-gc:
3637
@cd vm && cargo bench --features=simple_gc --no-default-features

book/src/compiler/generic.md

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Generic
2+
```mermaid
3+
graph TD
4+
Def-->StructAddSymbol-->StructDef-->NodeEmit
5+
subgraph Def
6+
DefStruct("Struct X< T >{y:T}")
7+
end
8+
subgraph StructAddSymbol
9+
%% SetUpGenericMap
10+
subgraph SetUpGenericMap
11+
subgraph PLType::STType
12+
GenericMap
13+
Fields
14+
end
15+
subgraph PLType::Generic
16+
CurrentType
17+
end
18+
None
19+
EmptyVec("vec![]")
20+
CurrentType-->None
21+
Fields-->EmptyVec
22+
GenericMap--T-->PLType::Generic
23+
end
24+
%% GenLLVMCode
25+
subgraph GenLLVMCode
26+
Code("生成占位符,不带泛型签名,A = type {}")
27+
end
28+
AddType("ctx.add_type(X)")
29+
SetUpGenericMap-->GenLLVMCode-->AddType
30+
end
31+
32+
subgraph StructDef
33+
Move(CtxApi::MoveGenericMap 保存泛型表上下文)
34+
Reset(CtxApi::ResetGenericMap 恢复泛型表上下文)
35+
AddGeneric(将泛型T加入ctx中泛型表)
36+
GetType("ctx.get_type(X)")
37+
subgraph EmitStructDef
38+
direction TB
39+
Move-->AddGeneric-->GetType-->Reset
40+
end
41+
end
42+
43+
subgraph NodeEmit
44+
HightLight
45+
end
46+
47+
```
48+
```mermaid
49+
graph TD
50+
subgraph CtxApi
51+
subgraph Ctx
52+
GenericTypesMap("generict_types:HashMap< String,PLType >
53+
//用来存泛型类型的临时表")
54+
PLMod::types("plmod.types:HashMap< String,PLType >")
55+
end
56+
GenericTypesMap--clone-->MoveGenericMap
57+
ResetGenericMap--store-->GenericTypesMap
58+
GetType--T-->GenericTypesMap
59+
GetType--i64-->PLMod::types
60+
end
61+
```
62+
```mermaid
63+
graph TD
64+
subgraph typenameNode
65+
GenericParam
66+
subgraph exidNode
67+
ModName
68+
subgraph VarNode
69+
ID
70+
end
71+
end
72+
end
73+
```
74+
PLType::STType {
75+
field: {
76+
PLType::STType
77+
}
78+
}

0 commit comments

Comments
 (0)