Compare commits
2 Commits
ad3973dd9e
...
6017ac1fa3
| Author | SHA1 | Date | |
|---|---|---|---|
| 6017ac1fa3 | |||
| b8047585fb |
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 },
|
||||||
|
))
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user