Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wa-lang
wa
提交
0a8fc127
wa
项目概览
wa-lang
/
wa
12 个月 前同步成功
通知
68
Star
655
Fork
45
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
wa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0a8fc127
编写于
8月 13, 2022
作者:
chai2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
loader: 重构代码
上级
c40fe862
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
47 addition
and
27 deletion
+47
-27
internal/loader/api.go
internal/loader/api.go
+2
-2
internal/loader/loader.go
internal/loader/loader.go
+28
-22
internal/loader/loader_vfs.go
internal/loader/loader_vfs.go
+17
-3
未找到文件。
internal/loader/api.go
浏览文件 @
0a8fc127
...
...
@@ -37,11 +37,11 @@ type Package struct {
// 加载程序
// 入口 appPath 是包对应目录的路径
func
LoadProgram
(
cfg
*
config
.
Config
,
appPath
string
)
(
*
Program
,
error
)
{
return
_
LoadProgram
(
cfg
,
appPath
)
return
newLoader
()
.
LoadProgram
(
cfg
,
appPath
)
}
// 从 VFS 加载程序
// 入口 pkgPath 是包的导入路径
func
LoadProgramVFS
(
cfg
*
config
.
Config
,
pkgPath
string
,
vfs
fs
.
FS
)
(
*
Program
,
error
)
{
return
LoadProgramVFS
(
cfg
,
pkgPath
,
vfs
)
return
newLoaderVFS
(
vfs
)
.
LoadProgram
(
cfg
,
pkgPath
)
}
internal/loader/loader.go
浏览文件 @
0a8fc127
...
...
@@ -19,8 +19,20 @@ import (
"github.com/wa-lang/wa/internal/waroot"
)
type
_Loader
struct
{
*
Program
}
func
newLoader
()
*
_Loader
{
return
&
_Loader
{
Program
:
&
Program
{
Pkgs
:
make
(
map
[
string
]
*
Package
),
},
}
}
// 加载程序
func
_
LoadProgram
(
cfg
*
config
.
Config
,
appPath
string
)
(
*
Program
,
error
)
{
func
(
p
*
_Loader
)
LoadProgram
(
cfg
*
config
.
Config
,
appPath
string
)
(
*
Program
,
error
)
{
logger
.
Tracef
(
&
config
.
EnableTrace_loader
,
"cfg: %+v"
,
cfg
)
logger
.
Tracef
(
&
config
.
EnableTrace_loader
,
"appPath: %s"
,
appPath
)
...
...
@@ -30,15 +42,11 @@ func _LoadProgram(cfg *config.Config, appPath string) (*Program, error) {
return
nil
,
err
}
logger
.
Tracef
(
&
config
.
EnableTrace_loader
,
"menifest: %s"
,
manifest
.
JSONString
())
p
:=
&
Program
{
Cfg
:
cfg
,
Manifest
:
manifest
,
logger
.
Tracef
(
&
config
.
EnableTrace_loader
,
"manifest: %s"
,
manifest
.
JSONString
())
Fset
:
token
.
NewFileSet
(),
Pkgs
:
make
(
map
[
string
]
*
Package
),
}
p
.
Cfg
=
cfg
p
.
Manifest
=
manifest
p
.
Fset
=
token
.
NewFileSet
()
// import "runtime"
logger
.
Trace
(
&
config
.
EnableTrace_loader
,
"import runtime"
)
...
...
@@ -62,7 +70,7 @@ func _LoadProgram(cfg *config.Config, appPath string) (*Program, error) {
logger
.
Tracef
(
&
config
.
EnableTrace_loader
,
"build SSA; pkgpath: %v"
,
pkgpath
)
if
err
:=
p
.
buildSSA
(
pkgpath
);
err
!=
nil
{
return
p
,
err
return
p
.
Program
,
err
}
if
pkgpath
==
manifest
.
MainPkg
{
...
...
@@ -71,10 +79,10 @@ func _LoadProgram(cfg *config.Config, appPath string) (*Program, error) {
}
logger
.
Tracef
(
&
config
.
EnableTrace_loader
,
"return ok"
)
return
p
,
nil
return
p
.
Program
,
nil
}
func
(
p
*
Program
)
buildSSA
(
pkgpath
string
)
error
{
func
(
p
*
_Loader
)
buildSSA
(
pkgpath
string
)
error
{
pkg
:=
p
.
Pkgs
[
pkgpath
]
if
pkg
.
SSAPkg
!=
nil
{
return
nil
...
...
@@ -94,7 +102,7 @@ func (p *Program) buildSSA(pkgpath string) error {
return
nil
}
func
(
p
*
Program
)
Import
(
pkgpath
string
)
(
*
types
.
Package
,
error
)
{
func
(
p
*
_Loader
)
Import
(
pkgpath
string
)
(
*
types
.
Package
,
error
)
{
logger
.
Tracef
(
&
config
.
EnableTrace_loader
,
"pkgpath: %v"
,
pkgpath
)
if
pkg
,
ok
:=
p
.
Pkgs
[
pkgpath
];
ok
{
...
...
@@ -126,8 +134,6 @@ func (p *Program) Import(pkgpath string) (*types.Package, error) {
}
}
//menifest.MainPkg
pkg
.
Info
=
&
types
.
Info
{
Types
:
make
(
map
[
ast
.
Expr
]
types
.
TypeAndValue
),
Defs
:
make
(
map
[
*
ast
.
Ident
]
types
.
Object
),
...
...
@@ -153,7 +159,7 @@ func (p *Program) Import(pkgpath string) (*types.Package, error) {
return
pkg
.
Pkg
,
nil
}
func
(
p
*
Program
)
ParseDir
(
pkgpath
string
)
([]
*
ast
.
File
,
error
)
{
func
(
p
*
_Loader
)
ParseDir
(
pkgpath
string
)
([]
*
ast
.
File
,
error
)
{
logger
.
Tracef
(
&
config
.
EnableTrace_loader
,
"pkgpath: %v"
,
pkgpath
)
var
(
...
...
@@ -214,7 +220,7 @@ func (p *Program) ParseDir(pkgpath string) ([]*ast.File, error) {
return
files
,
nil
}
func
(
p
*
Program
)
readDirFiles
(
fileSystem
fs
.
FS
,
path
string
)
(
filenames
[]
string
,
datas
[][]
byte
,
err
error
)
{
func
(
p
*
_Loader
)
readDirFiles
(
fileSystem
fs
.
FS
,
path
string
)
(
filenames
[]
string
,
datas
[][]
byte
,
err
error
)
{
logger
.
Tracef
(
&
config
.
EnableTrace_loader
,
"path: %v"
,
path
)
dirEntries
,
err
:=
fs
.
ReadDir
(
fileSystem
,
path
)
...
...
@@ -255,7 +261,7 @@ func (p *Program) readDirFiles(fileSystem fs.FS, path string) (filenames []strin
return
filenames
,
datas
,
nil
}
func
(
p
*
Program
)
hasExt
(
name
string
,
extensions
...
string
)
bool
{
func
(
p
*
_Loader
)
hasExt
(
name
string
,
extensions
...
string
)
bool
{
for
_
,
ext
:=
range
extensions
{
if
strings
.
HasSuffix
(
name
,
ext
)
{
return
true
...
...
@@ -264,11 +270,11 @@ func (p *Program) hasExt(name string, extensions ...string) bool {
return
false
}
func
(
p
*
Program
)
isStdPkg
(
pkgpath
string
)
bool
{
func
(
p
*
_Loader
)
isStdPkg
(
pkgpath
string
)
bool
{
return
waroot
.
IsStdPkg
(
pkgpath
)
}
func
(
p
*
Program
)
isSelfPkg
(
pkgpath
string
)
bool
{
func
(
p
*
_Loader
)
isSelfPkg
(
pkgpath
string
)
bool
{
if
pkgpath
==
p
.
Manifest
.
Pkg
.
Pkgpath
{
return
true
}
...
...
@@ -278,14 +284,14 @@ func (p *Program) isSelfPkg(pkgpath string) bool {
return
false
}
func
(
p
*
Program
)
getWaRootFS
()
fs
.
FS
{
func
(
p
*
_Loader
)
getWaRootFS
()
fs
.
FS
{
if
p
.
Cfg
.
WaRoot
!=
""
{
return
os
.
DirFS
(
p
.
Cfg
.
WaRoot
)
}
return
waroot
.
GetFS
()
}
func
(
p
*
Program
)
getSizes
()
types
.
Sizes
{
func
(
p
*
_Loader
)
getSizes
()
types
.
Sizes
{
var
zero
config
.
StdSizes
//types.StdSizes
if
p
==
nil
||
p
.
Cfg
.
WaSizes
==
zero
{
...
...
internal/loader/loader_vfs.go
浏览文件 @
0a8fc127
...
...
@@ -3,12 +3,26 @@
package
loader
import
(
"fmt"
"io/fs"
"github.com/wa-lang/wa/internal/config"
)
// 从 VFS 加载程序
func
_LoadProgramVFS
(
cfg
*
config
.
Config
,
pkgPath
string
,
vfs
fs
.
FS
)
(
*
Program
,
error
)
{
panic
(
"TODO"
)
type
_LoaderVFS
struct
{
vfs
fs
.
FS
*
Program
}
func
newLoaderVFS
(
vfs
fs
.
FS
)
*
_LoaderVFS
{
return
&
_LoaderVFS
{
vfs
:
vfs
,
Program
:
&
Program
{
Pkgs
:
make
(
map
[
string
]
*
Package
),
},
}
}
func
(
p
*
_LoaderVFS
)
LoadProgram
(
cfg
*
config
.
Config
,
pkgPath
string
)
(
*
Program
,
error
)
{
return
p
.
Program
,
fmt
.
Errorf
(
"TODO"
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录