Merge pull request #567 from nspcc-dev/feature/codegen_add_mod

compiler: Add Mod token, closes #563
This commit is contained in:
Roman Khimov 2019-12-19 15:32:18 +03:00 committed by GitHub
commit 79323cc10b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 148 additions and 1 deletions

View file

@ -236,7 +236,7 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor {
switch t := n.Lhs[i].(type) {
case *ast.Ident:
switch n.Tok {
case token.ADD_ASSIGN, token.SUB_ASSIGN, token.MUL_ASSIGN, token.QUO_ASSIGN:
case token.ADD_ASSIGN, token.SUB_ASSIGN, token.MUL_ASSIGN, token.QUO_ASSIGN, token.REM_ASSIGN:
c.emitLoadLocal(t.Name)
ast.Walk(c, n.Rhs[0]) // can only add assign to 1 expr on the RHS
c.convertToken(n.Tok)
@ -751,6 +751,8 @@ func (c *codegen) convertToken(tok token.Token) {
emitOpcode(c.prog.BinWriter, opcode.MUL)
case token.QUO_ASSIGN:
emitOpcode(c.prog.BinWriter, opcode.DIV)
case token.REM_ASSIGN:
emitOpcode(c.prog.BinWriter, opcode.MOD)
case token.ADD:
emitOpcode(c.prog.BinWriter, opcode.ADD)
case token.SUB:
@ -759,6 +761,8 @@ func (c *codegen) convertToken(tok token.Token) {
emitOpcode(c.prog.BinWriter, opcode.MUL)
case token.QUO:
emitOpcode(c.prog.BinWriter, opcode.DIV)
case token.REM:
emitOpcode(c.prog.BinWriter, opcode.MOD)
case token.LSS:
emitOpcode(c.prog.BinWriter, opcode.LT)
case token.LEQ: