• Kirill Smelkov's avatar
    Make all opcode constants to have type byte · f6ba06e8
    Kirill Smelkov authored
    It was probably a thinko in d00e99e7 (Add more opcodes so we can read
    Graphite's Carbon stream) which changed opcodes from string ("X") to
    character ('X') constants and marked the first opcode with byte type,
    probably with the idea that following opcodes will have the same type.
    
    Unfortunately it is not so as the following program demonstrates:
    
    	package main
    
    	const (
    	        opAAA byte = 'a'
    	        opBBB      = 'b'
    	)
    
    	func main() {
    	        op := opBBB
    	        if true {
    	                op = opAAA	// <-- line 11
    	        }
    	        println(op)
    	}
    
    	--> ./bc.go:11:6: cannot use opAAA (type byte) as type rune in assignment
    
    Similarly if we try comparing opcodes, it also results in compile error:
    
    	func main() {
    	        op := opBBB
    	        if op == opAAA {	// <-- line 10
    	                panic(0)
    	        }
    	        println(op)
    	}
    
    	--> ./bc.go:10:8: invalid operation: op == opAAA (mismatched types rune and byte)
    
    Since in the following patches it will be handy for encoder to e.g. set default
    opcode first, and then change it under some conditions to another opcode,
    exactly the same compile error(s) will pop up.
    
    So let's fix all opcode constants to have their type as byte to avoid such
    unexpected errors.
    f6ba06e8
ogorek.go 25.4 KB