forked from TrueCloudLab/neoneo-go
commit
399c5781a1
1 changed files with 12 additions and 5 deletions
|
@ -382,15 +382,22 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor {
|
||||||
ast.Walk(c, n.X)
|
ast.Walk(c, n.X)
|
||||||
ast.Walk(c, n.Y)
|
ast.Walk(c, n.Y)
|
||||||
|
|
||||||
// VM has separate opcode for string concatenation
|
switch {
|
||||||
if n.Op == token.ADD {
|
case n.Op == token.ADD:
|
||||||
typ, ok := tinfo.Type.Underlying().(*types.Basic)
|
// VM has separate opcodes for number and string concatenation
|
||||||
if ok && typ.Kind() == types.String {
|
if isStringType(tinfo.Type) {
|
||||||
emitOpcode(c.prog, vm.CAT)
|
emitOpcode(c.prog, vm.CAT)
|
||||||
} else {
|
} else {
|
||||||
emitOpcode(c.prog, vm.ADD)
|
emitOpcode(c.prog, vm.ADD)
|
||||||
}
|
}
|
||||||
} else {
|
case n.Op == token.EQL:
|
||||||
|
// VM has separate opcodes for number and string equality
|
||||||
|
if isStringType(tinfo.Type) {
|
||||||
|
emitOpcode(c.prog, vm.EQUAL)
|
||||||
|
} else {
|
||||||
|
emitOpcode(c.prog, vm.NUMEQUAL)
|
||||||
|
}
|
||||||
|
default:
|
||||||
c.convertToken(n.Op)
|
c.convertToken(n.Op)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in a new issue