Skip to content
This repository was archived by the owner on Apr 20, 2022. It is now read-only.

Commit 32adf69

Browse files
authored
Include decoder (#4)
1 parent 7fabc81 commit 32adf69

File tree

2 files changed

+19
-19
lines changed

2 files changed

+19
-19
lines changed

kaitai.go

+19-18
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ type Type struct {
176176
func (k *Type) InitElem(attr Attribute, dataType string, init bool) (goCode string) {
177177
var buffer LineBuffer
178178

179-
// defer func() { buffer.WriteLine("decoder.SetErr(err)"); goCode = buffer.String() }()
179+
// defer func() { buffer.WriteLine("k.decoder.SetErr(err)"); goCode = buffer.String() }()
180180
defer func() { goCode = buffer.String() }()
181181

182182
// init and parse element
@@ -196,7 +196,7 @@ func (k *Type) InitElem(attr Attribute, dataType string, init bool) (goCode stri
196196

197197
if resetPos {
198198
// save position
199-
buffer.WriteLine("pos, _ := decoder.Seek(0, io.SeekCurrent)")
199+
buffer.WriteLine("pos, _ := k.decoder.Seek(0, io.SeekCurrent)")
200200
}
201201

202202
// read data
@@ -205,15 +205,15 @@ func (k *Type) InitElem(attr Attribute, dataType string, init bool) (goCode stri
205205
endian = "binary.BigEndian"
206206
}
207207
if attr.SizeEos != "" {
208-
buffer.WriteLine("elem, err = ioutil.ReadAll(decoder)")
208+
buffer.WriteLine("elem, err = ioutil.ReadAll(k.decoder)")
209209
} else if terminated {
210210

211211
if attr.Size == "" {
212-
buffer.WriteLine("elem, err = bufio.NewReader(decoder).ReadBytes(" + term + ")")
212+
buffer.WriteLine("elem, err = bufio.NewReader(k.decoder).ReadBytes(" + term + ")")
213213
buffer.WriteLine("if err != nil && err == io.EOF { err = nil }")
214214
} else {
215215
// term & size
216-
buffer.WriteLine("_, err = decoder.Read(elem)")
216+
buffer.WriteLine("_, err = k.decoder.Read(elem)")
217217
}
218218

219219
// eos
@@ -226,10 +226,10 @@ func (k *Type) InitElem(attr Attribute, dataType string, init bool) (goCode stri
226226
buffer.WriteLine("err = nil")
227227

228228
} else {
229-
buffer.WriteLine("err = binary.Read(decoder, " + endian + ", &elem)")
229+
buffer.WriteLine("err = binary.Read(k.decoder, " + endian + ", &elem)")
230230
}
231231
} else {
232-
buffer.WriteLine("err = elem.Decode(nil, k, k.Root())")
232+
buffer.WriteLine("err = elem.Decode(k.decoder, k, k.Root())")
233233
}
234234

235235
// pad
@@ -255,7 +255,7 @@ func (k *Type) InitElem(attr Attribute, dataType string, init bool) (goCode stri
255255
}
256256

257257
// include
258-
// buffer.WriteLine("pos, _ := decoder.Seek(0, io.SeekCurrent)")
258+
// buffer.WriteLine("pos, _ := k.decoder.Seek(0, io.SeekCurrent)")
259259
// buffer.WriteLine("fmt.Println(pos, elem)")
260260
if (terminated) && attr.Include == "" { // && attr.Size == "" {
261261
buffer.WriteLine("elem = elem[:len(elem)-1]")
@@ -269,7 +269,7 @@ func (k *Type) InitElem(attr Attribute, dataType string, init bool) (goCode stri
269269
buffer.WriteLine("pos -= 1")
270270
buffer.WriteLine("}")
271271
}
272-
buffer.WriteLine("_, err = decoder.Seek(pos, io.SeekStart)")
272+
buffer.WriteLine("_, err = k.decoder.Seek(pos, io.SeekStart)")
273273
}
274274

275275
return
@@ -302,7 +302,7 @@ func (k *Type) InitAttr(attr Attribute) (goCode string) {
302302

303303
if attr.Pos != "" {
304304
// save position
305-
buffer.WriteLine("pos" + attr.Name() + ", _ := decoder.Seek(0, io.SeekCurrent) // Cannot fail")
305+
buffer.WriteLine("pos" + attr.Name() + ", _ := k.decoder.Seek(0, io.SeekCurrent) // Cannot fail")
306306
whence := "io.SeekCurrent"
307307
whenceMap := map[string]string{
308308
"seek_set": "io.SeekStart",
@@ -313,12 +313,12 @@ func (k *Type) InitAttr(attr Attribute) (goCode string) {
313313
whence = val
314314
}
315315
if whence == "io.SeekCurrent" {
316-
buffer.WriteLine("decoder.Seek(0, io.SeekStart)")
316+
buffer.WriteLine("k.decoder.Seek(0, io.SeekStart)")
317317
}
318-
buffer.WriteLine("_, err = decoder.Seek(" + goExpr(attr.Pos, "int64") + ", " + whence + ")")
318+
buffer.WriteLine("_, err = k.decoder.Seek(" + goExpr(attr.Pos, "int64") + ", " + whence + ")")
319319
buffer.WriteLine("if err != nil { return }")
320320
// restore position
321-
defer buffer.WriteLine("decoder.Seek(pos" + attr.Name() + ", io.SeekStart)")
321+
defer buffer.WriteLine("k.decoder.Seek(pos" + attr.Name() + ", io.SeekStart)")
322322
}
323323

324324
switch {
@@ -377,8 +377,8 @@ func (k *Type) InitAttr(attr Attribute) (goCode string) {
377377
// custom struct
378378
// init variable
379379
// if attr.Size != "" {
380-
// buffer.WriteLine(attr.Name() + "pos, _ := decoder.Seek(0, io.SeekCurrent) // Cannot fail")
381-
// defer buffer.WriteLine("decoder.Seek(" + attr.Name() + "pos + " + goExpr(attr.Size, "int64") + ", io.SeekStart)")
380+
// buffer.WriteLine(attr.Name() + "pos, _ := k.decoder.Seek(0, io.SeekCurrent) // Cannot fail")
381+
// defer buffer.WriteLine("k.decoder.Seek(" + attr.Name() + "pos + " + goExpr(attr.Size, "int64") + ", io.SeekStart)")
382382
// }
383383
// buffer.WriteLine("k." + attr.Name() + " = &" + attr.DataType()[1:] + "{}")
384384
case attr.Type.TypeSwitch.SwitchOn != "":
@@ -449,6 +449,7 @@ func (k *Type) String(typeName string, parent string, root string) string {
449449

450450
// print type start
451451
buffer.WriteLine("type " + typeName + " struct{")
452+
buffer.WriteLine("decoder io.ReadSeeker")
452453
buffer.WriteLine("parent interface{}")
453454
buffer.WriteLine("root interface{}")
454455

@@ -480,11 +481,11 @@ func (k *Type) String(typeName string, parent string, root string) string {
480481

481482
// decode function
482483
buffer.WriteLine("func (k *" + typeName + ") Decode(reader io.ReadSeeker, ancestors ...interface{}) (err error) {")
483-
buffer.WriteLine("if decoder == nil {")
484+
buffer.WriteLine("if k.decoder == nil {")
484485
buffer.WriteLine("if reader == nil {")
485-
buffer.WriteLine("panic(\"Neither decoder nor reader are set.\")")
486+
buffer.WriteLine("panic(\"Neither k.decoder nor reader are set.\")")
486487
buffer.WriteLine("}")
487-
buffer.WriteLine("decoder = reader ")
488+
buffer.WriteLine("k.decoder = reader ")
488489
buffer.WriteLine("}")
489490

490491
buffer.WriteLine("if len(ancestors) == 2 {")

main.go

-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ func createGofile(ksyPath, pkg string, debug bool) error {
8686
buffer.WriteLine("// file generated at " + time.Now().UTC().Format(time.RFC3339) + "\n")
8787
buffer.WriteLine("package " + pkg)
8888
buffer.WriteLine("import (\"dfir.software/kaitaigo/runtime\")")
89-
buffer.WriteLine("var decoder io.ReadSeeker")
9089
buffer.WriteLine(kaitai.String(baseStruct, baseStruct, baseStruct))
9190

9291
// format and add imports

0 commit comments

Comments
 (0)