Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
fsharp
提交
dfbfeecf
F
fsharp
项目概览
dotNET Platform
/
fsharp
11 个月 前同步成功
通知
0
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
fsharp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
dfbfeecf
编写于
9月 27, 2019
作者:
E
Eugene Auduchinok
提交者:
Kevin Ransom (msft)
9月 27, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make ILPreTypeDef interface (#7649)
上级
f4c38f01
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
38 addition
and
27 deletion
+38
-27
src/absil/il.fs
src/absil/il.fs
+26
-19
src/absil/il.fsi
src/absil/il.fsi
+9
-5
src/fsharp/import.fs
src/fsharp/import.fs
+3
-3
未找到文件。
src/absil/il.fs
浏览文件 @
dfbfeecf
...
...
@@ -2133,26 +2133,33 @@ and [<Sealed>] ILTypeDefs(f : unit -> ILPreTypeDef[]) =
let
ns
,
n
=
splitILTypeName
nm
dict
.
Value
.[(
ns
,
n
)].
GetTypeDef
()
and
[<
NoEquality
;
NoComparison
>]
ILPreTypeDef
=
abstract
Namespace
:
string
list
abstract
Name
:
string
abstract
GetTypeDef
:
unit
->
ILTypeDef
/// This is a memory-critical class. Very many of these objects get allocated and held to represent the contents of .NET assemblies.
and
[<
Sealed
>]
ILPreTypeDef
(
nameSpace
:
string
list
,
name
:
string
,
metadataIndex
:
int32
,
storage
:
ILTypeDefStored
)
=
and
[<
Sealed
>]
ILPreTypeDef
Impl
(
nameSpace
:
string
list
,
name
:
string
,
metadataIndex
:
int32
,
storage
:
ILTypeDefStored
)
=
let
mutable
store
:
ILTypeDef
=
Unchecked
.
defaultof
<_>
member
__.
Namespace
=
nameSpace
member
__.
Name
=
nam
e
member
__.
MetadataIndex
=
metadataIndex
interface
ILPreTypeDef
with
member
__.
Namespace
=
nameSpac
e
member
__.
Name
=
name
member
x
.
GetTypeDef
()
=
match
box
store
with
|
null
->
match
storage
with
|
ILTypeDefStored
.
Given
td
->
store
<-
td
td
|
ILTypeDefStored
.
Computed
f
->
LazyInitializer
.
EnsureInitialized
<
ILTypeDef
>(&
store
,
Func
<_>(
fun
()
->
f
()
))
|
ILTypeDefStored
.
Reader
f
->
LazyInitializer
.
EnsureInitialized
<
ILTypeDef
>(&
store
,
Func
<_>(
fun
()
->
f
x
.
M
etadataIndex
))
|
_
->
store
member
x
.
GetTypeDef
()
=
match
box
store
with
|
null
->
match
storage
with
|
ILTypeDefStored
.
Given
td
->
store
<-
td
td
|
ILTypeDefStored
.
Computed
f
->
LazyInitializer
.
EnsureInitialized
<
ILTypeDef
>(&
store
,
Func
<_>(
fun
()
->
f
()
))
|
ILTypeDefStored
.
Reader
f
->
LazyInitializer
.
EnsureInitialized
<
ILTypeDef
>(&
store
,
Func
<_>(
fun
()
->
f
m
etadataIndex
))
|
_
->
store
and
ILTypeDefStored
=
|
Given
of
ILTypeDef
...
...
@@ -2491,11 +2498,11 @@ let mkRefForNestedILTypeDef scope (enc: ILTypeDef list, td: ILTypeDef) =
let
mkILPreTypeDef
(
td
:
ILTypeDef
)
=
let
ns
,
n
=
splitILTypeName
td
.
Name
ILPreTypeDef
(
ns
,
n
,
NoMetadataIdx
,
ILTypeDefStored
.
Given
td
)
ILPreTypeDef
Impl
(
ns
,
n
,
NoMetadataIdx
,
ILTypeDefStored
.
Given
td
)
:>
ILPreTypeDef
let
mkILPreTypeDefComputed
(
ns
,
n
,
f
)
=
ILPreTypeDef
(
ns
,
n
,
NoMetadataIdx
,
ILTypeDefStored
.
Computed
f
)
ILPreTypeDef
Impl
(
ns
,
n
,
NoMetadataIdx
,
ILTypeDefStored
.
Computed
f
)
:>
ILPreTypeDef
let
mkILPreTypeDefRead
(
ns
,
n
,
idx
,
f
)
=
ILPreTypeDef
(
ns
,
n
,
idx
,
f
)
ILPreTypeDef
Impl
(
ns
,
n
,
idx
,
f
)
:>
ILPreTypeDef
let
addILTypeDef
td
(
tdefs
:
ILTypeDefs
)
=
ILTypeDefs
(
fun
()
->
[|
yield
mkILPreTypeDef
td
;
yield
!
tdefs
.
AsArrayOfPreTypeDefs
|])
...
...
src/absil/il.fsi
浏览文件 @
dfbfeecf
...
...
@@ -1322,12 +1322,16 @@ and [<NoComparison; NoEquality>]
/// The information is enough to perform name resolution for the F# compiler, probe attributes
/// for ExtensionAttribute etc. This is key to the on-demand exploration of .NET metadata.
/// This information has to be "Goldilocks" - not too much, not too little, just right.
and
[<
NoEquality
;
NoComparison
;
Sealed
>]
ILPreTypeDef
=
member
Namespace
:
string
list
member
Name
:
string
member
MetadataIndex
:
int32
and
[<
NoEquality
;
NoComparison
>]
ILPreTypeDef
=
abstract
Namespace
:
string
list
abstract
Name
:
string
/// Realise the actual full typedef
member
GetTypeDef
:
unit
->
ILTypeDef
abstract
GetTypeDef
:
unit
->
ILTypeDef
and
[<
NoEquality
;
NoComparison
;
Sealed
>]
ILPreTypeDefImpl
=
interface
ILPreTypeDef
and
[<
Sealed
>]
ILTypeDefStored
...
...
src/fsharp/import.fs
浏览文件 @
dfbfeecf
...
...
@@ -478,7 +478,7 @@ and ImportILTypeDefList amap m (cpath: CompilationPath) enc items =
let
modty
=
lazy
(
ImportILTypeDefList
amap
m
(
cpath
.
NestedCompPath
n
Namespace
)
enc
tgs
)
NewModuleOrNamespace
(
Some
cpath
)
taccessPublic
(
mkSynId
m
n
)
XmlDoc
.
Empty
[]
(
MaybeLazy
.
Lazy
modty
))
(
fun
(
n
,
info
:
Lazy
<_>)
->
let
(
scoref2
,
_,
lazyTypeDef
:
ILPreTypeDef
)
=
info
.
Force
()
let
(
scoref2
,
lazyTypeDef
:
ILPreTypeDef
)
=
info
.
Force
()
ImportILTypeDef
amap
m
scoref2
cpath
enc
n
(
lazyTypeDef
.
GetTypeDef
()
))
let
kind
=
match
enc
with
[]
->
Namespace
|
_
->
ModuleOrType
...
...
@@ -489,7 +489,7 @@ and ImportILTypeDefList amap m (cpath: CompilationPath) enc items =
and
ImportILTypeDefs
amap
m
scoref
cpath
enc
(
tdefs
:
ILTypeDefs
)
=
// We be very careful not to force a read of the type defs here
tdefs
.
AsArrayOfPreTypeDefs
|>
Array
.
map
(
fun
pre
->
(
pre
.
Namespace
,
(
pre
.
Name
,
notlazy
(
scoref
,
pre
.
MetadataIndex
,
pre
))))
|>
Array
.
map
(
fun
pre
->
(
pre
.
Namespace
,
(
pre
.
Name
,
notlazy
(
scoref
,
pre
))))
|>
Array
.
toList
|>
ImportILTypeDefList
amap
m
cpath
enc
...
...
@@ -519,7 +519,7 @@ let ImportILAssemblyExportedType amap m auxModLoader (scoref: ILScopeRef) (expor
|
None
->
error
(
Error
(
FSComp
.
SR
.
impReferenceToDllRequiredByAssembly
(
exportedType
.
ScopeRef
.
QualifiedName
,
scoref
.
QualifiedName
,
exportedType
.
Name
),
m
))
|
Some
preTypeDef
->
scoref
,
-
1
,
preTypeDef
)
scoref
,
preTypeDef
)
[
ImportILTypeDefList
amap
m
(
CompPath
(
scoref
,
[]
))
[]
[(
ns
,
(
n
,
info
))]
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录