Integer literals now support signs

This commit is contained in:
Sasha Koshka 2022-11-22 01:19:35 -05:00
parent 0ce136585b
commit 776856a6a5
3 changed files with 18 additions and 1 deletions

View File

@ -214,6 +214,8 @@ func drawOctal (xOffset, yOffset int, number uint64) {
application.SetColor(xOffset, yOffset, stone.ColorBlue)
application.SetColor(xOffset + 1, yOffset, stone.ColorBlue)
number = drawSign(xOffset, yOffset, number)
for x := 0; x < 21; x ++ {
bitOffset -= 3

View File

@ -164,7 +164,11 @@ func onPress (button stone.Button, modifiers stone.Modifiers) {
case *IntegerLiteral:
integer := selectedExpression.(*IntegerLiteral)
integer.value *= int64(integer.displayRadix)
integer.value += int64(value)
if integer.value < 0 {
integer.value -= int64(value)
} else {
integer.value += int64(value)
}
}
redraw()

11
tree.go
View File

@ -450,6 +450,13 @@ func (literal *IntegerLiteral) Previous () (previous Expression) {
func (literal *IntegerLiteral) Render (target stone.Buffer, offset int) (moved int) {
var output []rune
value := literal.value
negative := false
if value < 0 {
negative = true
value *= -1
}
for value > 0 {
digit := rune(value % int64(literal.displayRadix))
value /= int64(literal.displayRadix)
@ -479,6 +486,10 @@ func (literal *IntegerLiteral) Render (target stone.Buffer, offset int) (moved i
output = append([]rune("0?"), output...)
}
if negative {
output = append([]rune { '-' }, output...)
}
for _, character := range output {
target.SetRune(offset + moved, 0, character)
if selectedExpression == literal {