mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
shader: Parse arguments and returns
This commit is contained in:
parent
7ba434ad6d
commit
e848eacedf
@ -41,6 +41,8 @@ type variable struct {
|
|||||||
|
|
||||||
type function struct {
|
type function struct {
|
||||||
name string
|
name string
|
||||||
|
args []variable
|
||||||
|
rets []variable
|
||||||
}
|
}
|
||||||
|
|
||||||
type Shader struct {
|
type Shader struct {
|
||||||
@ -259,8 +261,47 @@ func (sh *Shader) parseFunc(d *ast.FuncDecl) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var args []variable
|
||||||
|
for _, f := range d.Type.Params.List {
|
||||||
|
t, err := parseType(f.Type)
|
||||||
|
if err != nil {
|
||||||
|
sh.addError(f.Type.Pos(), err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for _, n := range f.Names {
|
||||||
|
args = append(args, variable{
|
||||||
|
name: n.Name,
|
||||||
|
typ: t,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var rets []variable
|
||||||
|
for _, f := range d.Type.Results.List {
|
||||||
|
t, err := parseType(f.Type)
|
||||||
|
if err != nil {
|
||||||
|
sh.addError(f.Type.Pos(), err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if len(f.Names) == 0 {
|
||||||
|
rets = append(rets, variable{
|
||||||
|
name: "",
|
||||||
|
typ: t,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
for _, n := range f.Names {
|
||||||
|
rets = append(rets, variable{
|
||||||
|
name: n.Name,
|
||||||
|
typ: t,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
f := function{
|
f := function{
|
||||||
name: d.Name.Name,
|
name: d.Name.Name,
|
||||||
|
args: args,
|
||||||
|
rets: rets,
|
||||||
}
|
}
|
||||||
sh.funcs = append(sh.funcs, f)
|
sh.funcs = append(sh.funcs, f)
|
||||||
}
|
}
|
||||||
@ -291,7 +332,23 @@ func (s *Shader) Dump() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, f := range s.funcs {
|
for _, f := range s.funcs {
|
||||||
lines = append(lines, fmt.Sprintf("func %s", f.name))
|
var args []string
|
||||||
|
for _, a := range f.args {
|
||||||
|
args = append(args, fmt.Sprintf("%s %s", a.name, a.typ))
|
||||||
|
}
|
||||||
|
var rets []string
|
||||||
|
for _, r := range f.rets {
|
||||||
|
name := r.name
|
||||||
|
if name == "" {
|
||||||
|
name = "_"
|
||||||
|
}
|
||||||
|
rets = append(rets, fmt.Sprintf("%s %s", name, r.typ))
|
||||||
|
}
|
||||||
|
l := fmt.Sprintf("func %s(%s)", f.name, strings.Join(args, ", "))
|
||||||
|
if len(rets) > 0 {
|
||||||
|
l += " (" + strings.Join(rets, ", ") + ")"
|
||||||
|
}
|
||||||
|
lines = append(lines, l)
|
||||||
}
|
}
|
||||||
|
|
||||||
return strings.Join(lines, "\n") + "\n"
|
return strings.Join(lines, "\n") + "\n"
|
||||||
|
@ -44,7 +44,7 @@ var (
|
|||||||
const C1 float = 1
|
const C1 float = 1
|
||||||
const C2, C3 float = 2, 3
|
const C2, C3 float = 2, 3
|
||||||
|
|
||||||
func foo() {
|
func foo(a, b vec2) vec4 {
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
Dump: `var Position varying vec4 // position
|
Dump: `var Position varying vec4 // position
|
||||||
@ -58,7 +58,7 @@ const C1 float = 1
|
|||||||
const C2 float = 2
|
const C2 float = 2
|
||||||
const C3 float = 3
|
const C3 float = 3
|
||||||
var qux vec4
|
var qux vec4
|
||||||
func foo
|
func foo(a vec2, b vec2) (_ vec4)
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user