aboutsummaryrefslogtreecommitdiff
path: root/eval.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-06-03 20:25:53 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-06-03 20:25:53 +0200
commite5580c6bd2cee66c2bf8e10f6ebc4301e8d0f86b (patch)
tree26b2a0bcca9dcf1e935ed57fe9c890500cd3f51c /eval.go
parentf03df4c2d32b34a2f1ed65ce554995cb35f5b9ef (diff)
LoadBytes
Diffstat (limited to 'eval.go')
-rw-r--r--eval.go26
1 files changed, 12 insertions, 14 deletions
diff --git a/eval.go b/eval.go
index dea1094..50eb4be 100644
--- a/eval.go
+++ b/eval.go
@@ -1,10 +1,10 @@
package j1
import (
+ "bytes"
"encoding/binary"
"fmt"
- "io"
- "os"
+ "io/ioutil"
)
type J1 struct {
@@ -24,22 +24,20 @@ func (vm *J1) String() string {
return s
}
-func (vm *J1) LoadFile(fname string) error {
- fd, err := os.Open(fname)
- if err != nil {
- return err
+func (vm *J1) LoadBytes(data []byte) error {
+ size := len(data) >> 1
+ if size > len(vm.memory) {
+ return fmt.Errorf("too big")
}
- defer fd.Close()
- stat, err := fd.Stat()
+ return binary.Read(bytes.NewReader(data), binary.BigEndian, vm.memory[:size])
+}
+
+func (vm *J1) LoadFile(fname string) error {
+ data, err := ioutil.ReadFile(fname)
if err != nil {
return err
}
- size := stat.Size() >> 1
- err = binary.Read(fd, binary.BigEndian, vm.memory[:size])
- if err != io.ErrUnexpectedEOF {
- return err
- }
- return nil
+ return vm.LoadBytes(data)
}
func (vm *J1) Eval() {