(l *State, r io.Reader, name, chunkMode string)
| 671 | } |
| 672 | |
| 673 | func protectedParser(l *State, r io.Reader, name, chunkMode string) error { |
| 674 | l.nonYieldableCallCount++ |
| 675 | err := l.protectedCall(func() { |
| 676 | var closure *luaClosure |
| 677 | b := bufio.NewReader(r) |
| 678 | if c, err := b.ReadByte(); err != nil { |
| 679 | l.checkMode(chunkMode, "text") |
| 680 | closure = l.parse(b, name) |
| 681 | } else if c == Signature[0] { |
| 682 | l.checkMode(chunkMode, "binary") |
| 683 | b.UnreadByte() |
| 684 | closure, _ = l.undump(b, name) // TODO handle err |
| 685 | } else { |
| 686 | l.checkMode(chunkMode, "text") |
| 687 | b.UnreadByte() |
| 688 | closure = l.parse(b, name) |
| 689 | } |
| 690 | l.assert(closure.upValueCount() == len(closure.prototype.upValues)) |
| 691 | for i := range closure.upValues { |
| 692 | closure.upValues[i] = l.newUpValue() |
| 693 | } |
| 694 | }, l.top, l.errorFunction) |
| 695 | l.nonYieldableCallCount-- |
| 696 | return err |
| 697 | } |
no test coverage detected