asmrb 0.0.2.4 → 0.0.2.5

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/asmrb.rb +17 -12
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65959eb6a15a1ae6dfc55cf8d3b66e6d1a1135fc
4
- data.tar.gz: c6cba8bc4473c3673d3f3d07fb6e9cf3e3a6470d
3
+ metadata.gz: 74225be18e6ad9f8003585d23373d487c9dd99b4
4
+ data.tar.gz: f48368b4eea421396a0efab10d52ab49140e5c23
5
5
  SHA512:
6
- metadata.gz: d20a11f724628741c96756ae0ff8239bec0a4d5102a7ba9cc28d4016cee113bb09c6ff169bbeee707a3f3d81ae16980b5a287179d70655f1e2c1ee46288375ab
7
- data.tar.gz: 5eb31088ebe69adf432e4293276932a24fa98d5239bc89f2ea1e13392f74e1cc354cf6cc813e2210f94a5c7bddfe69796404813fa40f70414d355e6e47ccb696
6
+ metadata.gz: fc11d9c607e77bc977264d6c5f9c78699d790441fbde902f3305693a727126bf6d4d8cf81602a9f660edbccc180f74c99d2f2050a7c8b92b5863f5d4bfba55aa
7
+ data.tar.gz: f8e4e0b9145ebd6c208f68de766149b97ff8cb47eba73e72462ac58cb889020892adde0667105e31a2f4349d49638640762f55ae784da74923b9a0b993e48f5c
data/lib/asmrb.rb CHANGED
@@ -80,23 +80,24 @@ class Asm
80
80
 
81
81
  "rdu" => lambda { | ops |
82
82
  e = eval "@stack.reduce(:#{ops})"
83
+ @stack.clear
83
84
  @stack.push e
84
85
  },
85
86
 
86
- "add" => lambda { | a |
87
- @stack.push(@stack.pop + refvar(a))
87
+ "add" => lambda { | a, b |
88
+ @variables[b] = @variables[b] + refvar(a)
88
89
  },
89
90
 
90
- "sub" => lambda { | a |
91
- @stack.push(@stack.pop - refvar(a))
91
+ "sub" => lambda { | a, b |
92
+ @variables[b] = @variables[b] - refvar(a)
92
93
  },
93
94
 
94
- "mul" => lambda { | a |
95
- @stack.push(@stack.pop * refvar(a))
95
+ "mul" => lambda { | a, b |
96
+ @variables[b] = @variables[b] * refvar(a)
96
97
  },
97
98
 
98
- "div" => lambda { | a |
99
- @stack.push(@stack.pop / refvar(a))
99
+ "div" => lambda { | a, b |
100
+ @variables[b] = @variables[b] / refvar(a)
100
101
  },
101
102
 
102
103
  "incr" => lambda { |dest, incval = 1|
@@ -111,7 +112,11 @@ class Asm
111
112
  @variables[dest] =
112
113
  src.is_a?(Symbol) ?
113
114
  @variables[src] : src
114
- #new_var dest
115
+ },
116
+
117
+ "jnz" => lambda { | name |
118
+ req_args "jnz", 1
119
+ @pc = @labels[name] if @stack.pop != 0
115
120
  },
116
121
 
117
122
  "jge" => lambda { |name|
@@ -139,7 +144,7 @@ class Asm
139
144
 
140
145
  "jmp" => lambda { |name|
141
146
  @pc = @labels[name]
142
- new_title "[#{name}]" #if @pc != @program.length-1
147
+ new_title "[#{name}]"
143
148
  },
144
149
 
145
150
  "pop" => lambda {|val|
@@ -379,10 +384,10 @@ Asm.new do
379
384
  jmp :exit
380
385
 
381
386
  label :recursion
387
+ mul n, acc
388
+ sub 1, n
382
389
  push acc
383
- mul n
384
390
  push n
385
- sub 1
386
391
  jmp :factorial
387
392
  label :exit
388
393
  push acc
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asmrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.4
4
+ version: 0.0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Trung
@@ -10,7 +10,7 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-02-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: create assembly-like DSL in ruby, use LLVM to speed up.
13
+ description: create a toy assembly-like DSL in ruby
14
14
  email: deulamco@gmail.com
15
15
  executables: []
16
16
  extensions: []