2 Commits

Author SHA1 Message Date
6017ac1fa3 generate: Encode SI properly 2025-07-21 14:11:40 -04:00
b8047585fb generate: Test integer encoding 2025-07-21 14:10:34 -04:00
2 changed files with 32 additions and 3 deletions

View File

@@ -412,7 +412,9 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri
// SI: (none) // SI: (none)
// LI: <value: IntN> // LI: <value: IntN>
if typ.Bits <= 5 { if typ.Bits <= 5 {
// SI stores the value in the tag, so we write nothing here // SI stores the value in the tag
nn, err := this.iprintf("*%s = uint8(%s.CN())\n", valueSource, tagSource)
n += nn; if err != nil { return n, err }
break break
} }
prefix := "ReadUint" prefix := "ReadUint"
@@ -580,7 +582,7 @@ func (this *Generator) generateTag(typ Type, source string) (n int, err error) {
switch typ := typ.(type) { switch typ := typ.(type) {
case TypeInt: case TypeInt:
if typ.Bits <= 5 { if typ.Bits <= 5 {
nn, err := this.printf("tape.SI") nn, err := this.printf("tape.SI.WithCN(int(%s))", source)
n += nn; if err != nil { return n, err } n += nn; if err != nil { return n, err }
} else { } else {
nn, err := this.printf("tape.LI.WithCN(%d)", bitsToCN(typ.Bits)) nn, err := this.printf("tape.LI.WithCN(%d)", bitsToCN(typ.Bits))
@@ -664,6 +666,11 @@ func (this *Generator) generateType(typ Type) (n int, err error) {
if err := this.validateIntBitSize(typ.Bits); err != nil { if err := this.validateIntBitSize(typ.Bits); err != nil {
return n, err return n, err
} }
if typ.Bits <= 5 {
nn, err := this.printf("uint8")
n += nn; if err != nil { return n, err }
break
}
if typ.Signed { if typ.Signed {
nn, err := this.printf("int%d", typ.Bits) nn, err := this.printf("int%d", typ.Bits)
n += nn; if err != nil { return n, err } n += nn; if err != nil { return n, err }
@@ -729,7 +736,7 @@ func (this *Generator) generateTypeTableDefined(typ TypeTableDefined) (n int, er
func (this *Generator) validateIntBitSize(size int) error { func (this *Generator) validateIntBitSize(size int) error {
switch size { switch size {
case 8, 16, 32, 64: return nil case 5, 8, 16, 32, 64: return nil
default: return fmt.Errorf("integers of size %d are unsupported on this platform", size) default: return fmt.Errorf("integers of size %d are unsupported on this platform", size)
} }
} }

View File

@@ -214,6 +214,15 @@ func TestGenerateRun(test *testing.T) {
}, },
}, },
} }
protocol.Messages[0x0002] = Message {
Name: "Pulse",
Type: TypeTableDefined {
Fields: map[uint16] Field {
0x0000: Field { Name: "Index", Type: TypeInt { Bits: 5 } },
0x0001: Field { Name: "Offset", Type: TypeInt { Bits: 16, Signed: true }},
},
},
}
protocol.Types["User"] = TypeTableDefined { protocol.Types["User"] = TypeTableDefined {
Fields: map[uint16] Field { Fields: map[uint16] Field {
0x0000: Field { Name: "Name", Type: TypeString { } }, 0x0000: Field { Name: "Name", Type: TypeString { } },
@@ -225,6 +234,7 @@ func TestGenerateRun(test *testing.T) {
// imports // imports
`, ` `, `
// test case // test case
log.Println("MessageConnect")
messageConnect := MessageConnect { messageConnect := MessageConnect {
Name: "rarity", Name: "rarity",
Password: "gems", Password: "gems",
@@ -235,6 +245,7 @@ func TestGenerateRun(test *testing.T) {
[]byte { 0x00, 0x00, 0x66, 'r', 'a', 'r', 'i', 't', 'y' }, []byte { 0x00, 0x00, 0x66, 'r', 'a', 'r', 'i', 't', 'y' },
[]byte { 0x00, 0x01, 0x64, 'g', 'e', 'm', 's' }, []byte { 0x00, 0x01, 0x64, 'g', 'e', 'm', 's' },
)) ))
log.Println("MessageUserList")
messageUserList := MessageUserList { messageUserList := MessageUserList {
Users: []User { Users: []User {
User { User {
@@ -271,5 +282,16 @@ func TestGenerateRun(test *testing.T) {
0x00, 0x01, 0x6C, 'i', 'm', ' ', 'c', 'r', 'e', 'e', 'k', 'f', 'l', 'o', 'w', 0x00, 0x01, 0x6C, 'i', 'm', ' ', 'c', 'r', 'e', 'e', 'k', 'f', 'l', 'o', 'w',
0x00, 0x02, 0x23, 0x00, 0x00, 0x38, 0x94, 0x00, 0x02, 0x23, 0x00, 0x00, 0x38, 0x94,
)) ))
log.Println("MessagePulse")
messagePulse := MessagePulse {
Index: 9,
Offset: -0x3521,
}
testEncode(
&messagePulse,
tu.S(0xC1, 0x02).AddVar(
[]byte { 0x00, 0x00, 0x09 },
[]byte { 0x00, 0x01, 0x21, 0xCA, 0xDF },
))
`) `)
} }