Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wa-lang
wa
提交
312838ad
wa
项目概览
wa-lang
/
wa
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
312838ad
编写于
11月 26, 2022
作者:
chai2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
支持多平台区分源文件
上级
c4a210a3
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
116 addition
and
38 deletion
+116
-38
hello.wa
hello.wa
+2
-1
internal/app/app.wa.go
internal/app/app.wa.go
+6
-6
internal/config/config.go
internal/config/config.go
+2
-3
internal/config/waos.go
internal/config/waos.go
+17
-0
internal/loader/loader.go
internal/loader/loader.go
+37
-4
internal/waroot/_waroot/src/runtime/runtime_arduino.wa
internal/waroot/_waroot/src/runtime/runtime_arduino.wa
+3
-0
internal/waroot/_waroot/src/runtime/runtime_chrome.wa
internal/waroot/_waroot/src/runtime/runtime_chrome.wa
+3
-0
internal/waroot/_waroot/src/runtime/runtime_walang.wa
internal/waroot/_waroot/src/runtime/runtime_walang.wa
+3
-0
internal/waroot/_waroot/src/runtime/runtime_wasi.wa
internal/waroot/_waroot/src/runtime/runtime_wasi.wa
+3
-0
main.go
main.go
+40
-24
未找到文件。
hello.wa
浏览文件 @
312838ad
# 版权 @2019 凹语言 作者。保留所有权利。
import "fmt"
import "runtime"
fn main {
println("你好,凹语言!")
println("你好,凹语言!"
, runtime.WAOS
)
println(add(40, 2))
fmt.Println(1+1)
...
...
internal/app/app.wa.go
浏览文件 @
312838ad
...
...
@@ -69,10 +69,10 @@ func NewApp(opt *Option) *App {
}
}
if
p
.
opt
.
TargetOS
==
""
{
p
.
opt
.
TargetOS
=
runtime
.
GOOS
p
.
opt
.
TargetOS
=
config
.
WaOS_Walang
}
if
p
.
opt
.
TargetArch
==
""
{
p
.
opt
.
TargetArch
=
runtime
.
GOARCH
p
.
opt
.
TargetArch
=
config
.
WaArch_Wasm
}
return
p
...
...
@@ -238,7 +238,7 @@ func (p *App) AST(filename string) error {
}
func
(
p
*
App
)
SSA
(
filename
string
)
error
{
cfg
:=
config
.
Default
Config
()
cfg
:=
p
.
opt
.
Config
()
prog
,
err
:=
loader
.
LoadProgram
(
cfg
,
filename
)
if
err
!=
nil
{
return
err
...
...
@@ -261,7 +261,7 @@ func (p *App) SSA(filename string) error {
}
func
(
p
*
App
)
CIR
(
filename
string
)
error
{
cfg
:=
config
.
Default
Config
()
cfg
:=
p
.
opt
.
Config
()
prog
,
err
:=
loader
.
LoadProgram
(
cfg
,
filename
)
if
err
!=
nil
{
return
err
...
...
@@ -276,7 +276,7 @@ func (p *App) CIR(filename string) error {
}
func
(
p
*
App
)
LLVM
(
infile
string
,
outfile
string
,
target
string
,
debug
bool
)
error
{
cfg
:=
config
.
Default
Config
()
cfg
:=
p
.
opt
.
Config
()
instat
,
err
:=
os
.
Stat
(
infile
)
if
err
!=
nil
{
...
...
@@ -393,7 +393,7 @@ func (p *App) LLVM(infile string, outfile string, target string, debug bool) err
}
func
(
p
*
App
)
WASM
(
filename
string
)
([]
byte
,
error
)
{
cfg
:=
config
.
Default
Config
()
cfg
:=
p
.
opt
.
Config
()
prog
,
err
:=
loader
.
LoadProgram
(
cfg
,
filename
)
if
err
!=
nil
{
return
nil
,
err
...
...
internal/config/config.go
浏览文件 @
312838ad
...
...
@@ -5,7 +5,6 @@ package config
import
(
"io/fs"
"os"
"runtime"
)
// 字长和指针大小
...
...
@@ -50,14 +49,14 @@ func DefaultConfig() *Config {
if
s
:=
os
.
Getenv
(
"WAARCH"
);
s
!=
""
{
p
.
WaArch
=
s
}
else
{
p
.
WaArch
=
runtime
.
GOARCH
p
.
WaArch
=
WaArch_Wasm
}
}
if
p
.
WaOS
==
""
{
if
s
:=
os
.
Getenv
(
"WAOS"
);
s
!=
""
{
p
.
WaOS
=
s
}
else
{
p
.
WaOS
=
runtime
.
GOOS
p
.
WaOS
=
WaOS_Walang
}
}
if
p
.
WaRoot
==
""
{
...
...
internal/config/waos.go
0 → 100644
浏览文件 @
312838ad
// 版权 @2022 凹语言 作者。保留所有权利。
package
config
// 目标平台类型, 可管理后缀名
const
(
WaOS_Walang
=
"walang"
// 默认
WaOS_Arduino
=
"arduino"
// Arduino 平台
WaOS_Chrome
=
"chrome"
// Chrome 浏览器
WaOS_Wasi
=
"wasi"
// WASI 接口
)
// 体系结构类型
const
(
WaArch_Wasm
=
"wasm"
// wasm 平台
)
internal/loader/loader.go
浏览文件 @
312838ad
...
...
@@ -292,10 +292,8 @@ func (p *_Loader) readDirFiles(fileSystem fs.FS, path string) (filenames []strin
if
entry
.
IsDir
()
{
continue
}
if
strings
.
HasPrefix
(
entry
.
Name
(),
"_"
)
{
continue
}
if
!
p
.
hasExt
(
entry
.
Name
(),
".go"
,
".ugo"
,
".wa"
)
{
if
p
.
isSkipedSouceFile
(
entry
.
Name
())
{
continue
}
...
...
@@ -362,3 +360,38 @@ func (p *_Loader) getSizes() types.Sizes {
}
}
}
func
(
p
*
_Loader
)
isSkipedSouceFile
(
filename
string
)
bool
{
if
strings
.
HasPrefix
(
filename
,
"_"
)
{
return
true
}
if
!
p
.
hasExt
(
filename
,
".wa"
,
".wa.go"
,
".ugo"
)
{
return
true
}
if
p
.
cfg
.
WaOS
!=
""
{
var
isTargetFile
bool
for
_
,
ext
:=
range
[]
string
{
".wa"
,
".wa.go"
,
".ugo"
}
{
for
_
,
os
:=
range
[]
string
{
"walang"
,
"wasi"
,
"arduino"
,
"chrome"
}
{
if
strings
.
HasSuffix
(
filename
,
"_"
+
os
+
ext
)
{
isTargetFile
=
true
break
}
}
}
if
isTargetFile
{
var
shouildSkip
=
true
for
_
,
ext
:=
range
[]
string
{
".wa"
,
".wa.go"
,
".ugo"
}
{
if
strings
.
HasSuffix
(
filename
,
"_"
+
p
.
cfg
.
WaOS
+
ext
)
{
shouildSkip
=
false
break
}
}
if
shouildSkip
{
return
true
}
}
}
return
false
}
internal/waroot/_waroot/src/runtime/runtime_arduino.wa
0 → 100644
浏览文件 @
312838ad
# 版权 @2022 凹语言 作者。保留所有权利。
var WAOS = "arduino"
internal/waroot/_waroot/src/runtime/runtime_chrome.wa
0 → 100644
浏览文件 @
312838ad
# 版权 @2022 凹语言 作者。保留所有权利。
var WAOS = "chrome"
internal/waroot/_waroot/src/runtime/runtime_walang.wa
0 → 100644
浏览文件 @
312838ad
# 版权 @2022 凹语言 作者。保留所有权利。
var WAOS = "walang"
internal/waroot/_waroot/src/runtime/runtime_wasi.wa
0 → 100644
浏览文件 @
312838ad
# 版权 @2022 凹语言 作者。保留所有权利。
var WAOS = "wasi"
main.go
浏览文件 @
312838ad
...
...
@@ -34,6 +34,11 @@ func main() {
}()
cliApp
.
Flags
=
[]
cli
.
Flag
{
&
cli
.
StringFlag
{
Name
:
"target"
,
Usage
:
"set target os (walang|wasi|arduino|chrome)"
,
Value
:
config
.
WaOS_Walang
,
},
&
cli
.
BoolFlag
{
Name
:
"debug"
,
Aliases
:
[]
string
{
"d"
},
...
...
@@ -47,6 +52,13 @@ func main() {
}
cliApp
.
Before
=
func
(
c
*
cli
.
Context
)
error
{
switch
c
.
String
(
"target"
)
{
case
"wa"
,
"walang"
,
"wasi"
,
"arduino"
,
"chrome"
:
// OK
default
:
fmt
.
Printf
(
"unknown target: %s
\n
"
,
c
.
String
(
"target"
))
os
.
Exit
(
1
)
}
if
c
.
Bool
(
"debug"
)
{
config
.
SetDebugMode
()
}
...
...
@@ -153,9 +165,10 @@ func main() {
Name
:
"run"
,
Usage
:
"compile and run Wa program"
,
Flags
:
[]
cli
.
Flag
{
&
cli
.
BoolFlag
{
Name
:
"html"
,
Usage
:
"output html"
,
&
cli
.
StringFlag
{
Name
:
"target"
,
Usage
:
"set target os (walang|wasi|arduino|chrome)"
,
Value
:
config
.
WaOS_Walang
,
},
},
Action
:
func
(
c
*
cli
.
Context
)
error
{
...
...
@@ -210,13 +223,10 @@ func main() {
Usage
:
"set output file"
,
Value
:
"a.out"
,
},
&
cli
.
BoolFlag
{
Name
:
"html"
,
Usage
:
"output html"
,
},
&
cli
.
StringFlag
{
Name
:
"target"
,
Usage
:
"set target (*wa|wasi|arduino)"
,
Usage
:
"set target os (walang|wasi|arduino|chrome)"
,
Value
:
config
.
WaOS_Walang
,
},
&
cli
.
IntFlag
{
Name
:
"ld-stack-size"
,
...
...
@@ -384,8 +394,9 @@ func main() {
},
},
{
Name
:
"test"
,
Usage
:
"test packages"
,
Hidden
:
true
,
Name
:
"test"
,
Usage
:
"test packages"
,
Action
:
func
(
c
*
cli
.
Context
)
error
{
fmt
.
Println
(
"TODO"
)
return
nil
...
...
@@ -405,8 +416,9 @@ func main() {
},
},
{
Name
:
"doc"
,
Usage
:
"show documentation for package or symbol"
,
Hidden
:
true
,
Name
:
"doc"
,
Usage
:
"show documentation for package or symbol"
,
Action
:
func
(
c
*
cli
.
Context
)
error
{
fmt
.
Println
(
"TODO"
)
return
nil
...
...
@@ -452,7 +464,7 @@ func main() {
cliApp
.
Run
(
os
.
Args
)
}
func
build_Options
(
c
*
cli
.
Context
)
*
app
.
Option
{
func
build_Options
(
c
*
cli
.
Context
,
isLLVMBackend
...
bool
)
*
app
.
Option
{
opt
:=
&
app
.
Option
{
Debug
:
c
.
Bool
(
"debug"
),
Clang
:
c
.
String
(
"clang"
),
...
...
@@ -460,19 +472,23 @@ func build_Options(c *cli.Context) *app.Option {
LD_StackSize
:
c
.
Int
(
"ld-stack-size"
),
LD_MaxMemory
:
c
.
Int
(
"ld-max-memory"
),
}
opt
.
TargetArch
=
"wasm"
if
len
(
isLLVMBackend
)
>
0
&&
isLLVMBackend
[
0
]
{
opt
.
TargetArch
=
"native"
}
switch
c
.
String
(
"target"
)
{
case
""
,
"wa"
:
opt
.
TargetArch
=
"wasm"
opt
.
TargetOS
=
"wa"
case
"wasi"
:
opt
.
TargetArch
=
"wasm"
opt
.
TargetOS
=
"wasi"
case
"arduino"
:
opt
.
TargetArch
=
"wasm"
opt
.
TargetOS
=
"arduino"
case
"wa"
,
config
.
WaOS_Walang
:
opt
.
TargetOS
=
config
.
WaOS_Walang
case
config
.
WaOS_Wasi
:
opt
.
TargetOS
=
config
.
WaOS_Wasi
case
config
.
WaOS_Arduino
:
opt
.
TargetOS
=
config
.
WaOS_Arduino
case
config
.
WaOS_Chrome
:
opt
.
TargetOS
=
config
.
WaOS_Chrome
default
:
opt
.
TargetArch
=
"wasm"
o
pt
.
TargetOS
=
"unknown"
fmt
.
Printf
(
"unknown target: %s
\n
"
,
c
.
String
(
"target"
))
o
s
.
Exit
(
1
)
}
return
opt
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录