brainfunc 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '08151903e89f79497698dbbc770c16dd1914a855004bcd1062864573f586df02'
4
- data.tar.gz: 24e27debd03d41327e03ddca31923c1810d9f8137d4913dc4b0fb37c38ffba88
3
+ metadata.gz: c784469b95c49294df075cbca65c7ab5d7a8b1446875db4d38d8651bec03ff0e
4
+ data.tar.gz: 53b30cb343431284f937ac58d5c6f73d623f80206512231f24a93c237691a24f
5
5
  SHA512:
6
- metadata.gz: c352e0c9014adb1c60bff8312fcb1d8d9cfc5dd79b21329482844bf9d3189f1e4870348553bdd4ac4214ff11a513e991e9e513246425abf4b1e5c97a8163bcc3
7
- data.tar.gz: 739c515d4a24a4db0e379af6f7bf3152f93f5316fa6d52b2d8a884d0fb5dabb3e1fa0682fd6435464d60a70c6f35956362ac8eda2a66c6f73b2af23a31f4a4de
6
+ metadata.gz: aabb5c602132b0ad62269becb82e94f0cc9b7183a2dfb253a2303873f606c5fe5dd1b3b9c678083df141af534110f5f143ca2b26193c3e730f847e60b31a97b5
7
+ data.tar.gz: 0d069072535b5cc0a43a3ac7181ac2baaf652a0c3223117f462bbcced1c8edb7c993a17e816af580f31a3932b6cc1d40e4357e9307716a8e24ddcbdf3f28b8d6
data/bin/ibrainfunc ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require_relative "../lib/brainfunc.rb"
4
+ Brainfunc::Repl.new.run
data/lib/brainfunc/vm.rb CHANGED
@@ -30,11 +30,22 @@ module Brainfunc
30
30
  end
31
31
 
32
32
  def exec(source)
33
- run({ memory: Hash.new { 0 }, inst_p: 0, data_p: 0, stack: [], program: source.strip.chars })
33
+ vm_state = { memory: Hash.new { 0 }, inst_p: 0, data_p: 0, stack: [], program: source.strip.chars }
34
+ loop { (vm_state=ops[vm_state[:program][vm_state[:inst_p]]].(vm_state)) && (vm_state[:inst_p] >= vm_state[:program].length && break) }
35
+ vm_state
34
36
  end
35
37
 
36
- def run(machine)
37
- loop { (machine=ops[machine[:program][machine[:inst_p]]].(machine)) && (machine[:inst_p] >= machine[:program].length && break) }
38
+ def eval(source, vm_state = {})
39
+ vm_state = { memory: Hash.new { 0 }, inst_p: 0, data_p: 0, stack: [], program: (vm_state[:program] || []) + source.strip.chars }
40
+ .merge(vm_state) { |k, defval, setval| k == :program ? defval : setval }
41
+
42
+ loop do
43
+ vm_state = ops[vm_state[:program][vm_state[:inst_p]]].(vm_state)
44
+
45
+ break if vm_state[:inst_p] >= vm_state[:program].length
46
+ end
47
+
48
+ vm_state
38
49
  end
39
50
 
40
51
  def debug(machine)
data/lib/brainfunc.rb CHANGED
@@ -2,4 +2,5 @@
2
2
 
3
3
  module Brainfunc
4
4
  require_relative "brainfunc/vm"
5
+ require_relative "brainfunc/repl"
5
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brainfunc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sreedev Kodichath
@@ -13,11 +13,13 @@ dependencies: []
13
13
  description: Tiny, Performant, Functional Brainfuck interpreter
14
14
  email: sreedevpadmakumar@gmail.com
15
15
  executables:
16
+ - ibrainfunc
16
17
  - brainfunc
17
18
  extensions: []
18
19
  extra_rdoc_files: []
19
20
  files:
20
21
  - bin/brainfunc
22
+ - bin/ibrainfunc
21
23
  - lib/brainfunc.rb
22
24
  - lib/brainfunc/vm.rb
23
25
  homepage: https://www.sree.dev