node: implement *expr.Ternary (a hoisting pass would be better)

This commit is contained in:
mappu 2020-04-10 20:08:15 +12:00
parent ce3cd1065d
commit 92abcfe5b9
1 changed files with 19 additions and 0 deletions

19
node.go
View File

@ -1090,6 +1090,25 @@ func (this *conversionState) convertNoFreeFloating(n_ node.Node) (string, error)
return "!(" + rhs + ")", nil
case *expr.Ternary:
cond, err := this.convert(n.Condition)
if err != nil {
return "", parseErr{n, err}
}
iftrue, err := this.convert(n.IfTrue)
if err != nil {
return "", parseErr{n, err}
}
iffalse, err := this.convert(n.IfFalse)
if err != nil {
return "", parseErr{n, err}
}
// FIXME this is (A) not idiomatic, and (B) doesn't work in assignment expressions
return "(func() unknown {\nif (" + cond + ") {\nreturn (" + iftrue + ")\n} else {\nreturn (" + iffalse + ")\n } })()", nil
case *expr.ArrayDimFetch:
// Might be x[foo], might be x[] (i.e. append() call)
// In order to make the append() transformation, we need to lookahead