mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
shader: Add stmtBlock
This commit is contained in:
parent
73255f4663
commit
a39376ad47
@ -80,12 +80,14 @@ type stmtType int
|
|||||||
const (
|
const (
|
||||||
stmtNone stmtType = iota
|
stmtNone stmtType = iota
|
||||||
stmtAssign
|
stmtAssign
|
||||||
|
stmtBlock
|
||||||
stmtReturn
|
stmtReturn
|
||||||
)
|
)
|
||||||
|
|
||||||
type stmt struct {
|
type stmt struct {
|
||||||
stmtType stmtType
|
stmtType stmtType
|
||||||
exprs []ast.Expr
|
exprs []ast.Expr
|
||||||
|
block *block
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stmt) dump(indent int) []string {
|
func (s *stmt) dump(indent int) []string {
|
||||||
@ -97,6 +99,10 @@ func (s *stmt) dump(indent int) []string {
|
|||||||
lines = append(lines, "%s(none)", idt)
|
lines = append(lines, "%s(none)", idt)
|
||||||
case stmtAssign:
|
case stmtAssign:
|
||||||
lines = append(lines, fmt.Sprintf("%s%s = %s", idt, dumpExpr(s.exprs[0]), dumpExpr(s.exprs[1])))
|
lines = append(lines, fmt.Sprintf("%s%s = %s", idt, dumpExpr(s.exprs[0]), dumpExpr(s.exprs[1])))
|
||||||
|
case stmtBlock:
|
||||||
|
lines = append(lines, fmt.Sprintf("%s{", idt))
|
||||||
|
lines = append(lines, s.block.dump(indent+1)...)
|
||||||
|
lines = append(lines, fmt.Sprintf("%s}", idt))
|
||||||
case stmtReturn:
|
case stmtReturn:
|
||||||
var expr string
|
var expr string
|
||||||
if len(s.exprs) > 0 {
|
if len(s.exprs) > 0 {
|
||||||
|
@ -330,11 +330,11 @@ func (sh *Shader) parseFunc(d *ast.FuncDecl, block *block) function {
|
|||||||
name: d.Name.Name,
|
name: d.Name.Name,
|
||||||
args: args,
|
args: args,
|
||||||
rets: rets,
|
rets: rets,
|
||||||
body: sh.parseBlock(d.Body, block),
|
body: sh.parseBlock(block, d.Body),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sh *Shader) parseBlock(b *ast.BlockStmt, outer *block) *block {
|
func (sh *Shader) parseBlock(outer *block, b *ast.BlockStmt) *block {
|
||||||
block := &block{
|
block := &block{
|
||||||
outer: outer,
|
outer: outer,
|
||||||
}
|
}
|
||||||
@ -368,6 +368,11 @@ func (sh *Shader) parseBlock(b *ast.BlockStmt, outer *block) *block {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case *ast.BlockStmt:
|
||||||
|
block.stmts = append(block.stmts, stmt{
|
||||||
|
stmtType: stmtBlock,
|
||||||
|
block: sh.parseBlock(block, l),
|
||||||
|
})
|
||||||
case *ast.DeclStmt:
|
case *ast.DeclStmt:
|
||||||
sh.parseDecl(block, l.Decl)
|
sh.parseDecl(block, l.Decl)
|
||||||
case *ast.ReturnStmt:
|
case *ast.ReturnStmt:
|
||||||
@ -379,7 +384,6 @@ func (sh *Shader) parseBlock(b *ast.BlockStmt, outer *block) *block {
|
|||||||
stmtType: stmtReturn,
|
stmtType: stmtReturn,
|
||||||
exprs: exprs,
|
exprs: exprs,
|
||||||
})
|
})
|
||||||
default:
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,18 +77,57 @@ func F1(a vec2, b vec2) (_ vec4) {
|
|||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "Type",
|
Name: "AutoType",
|
||||||
Src: `package main
|
Src: `package main
|
||||||
|
|
||||||
var c0 = 0.0
|
var v0 = 0.0
|
||||||
func F() {
|
func F() {
|
||||||
c1 := c0
|
v1 := v0
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
Dump: `var c0 float = 0.0
|
Dump: `var v0 float = 0.0
|
||||||
func F() {
|
func F() {
|
||||||
var c1 float
|
var v1 float
|
||||||
c1 = c0
|
v1 = v0
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "AutoType",
|
||||||
|
Src: `package main
|
||||||
|
|
||||||
|
var v0 = 0.0
|
||||||
|
func F() {
|
||||||
|
v1 := v0
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
Dump: `var v0 float = 0.0
|
||||||
|
func F() {
|
||||||
|
var v1 float
|
||||||
|
v1 = v0
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "AutoType2",
|
||||||
|
Src: `package main
|
||||||
|
|
||||||
|
var v0 = 0.0
|
||||||
|
func F() {
|
||||||
|
v1 := v0
|
||||||
|
{
|
||||||
|
v2 := v1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
Dump: `var v0 float = 0.0
|
||||||
|
func F() {
|
||||||
|
var v1 float
|
||||||
|
v1 = v0
|
||||||
|
{
|
||||||
|
var v2 float
|
||||||
|
v2 = v1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user