asmrb 0.0.2.5 → 0.0.2.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/asmrb.rb +32 -27
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74225be18e6ad9f8003585d23373d487c9dd99b4
4
- data.tar.gz: f48368b4eea421396a0efab10d52ab49140e5c23
3
+ metadata.gz: 771ddde246ce924141e25cc6c4f8d6a95342f74c
4
+ data.tar.gz: 8dd350e2b9e6d536a019c553c4d229d1e9325e2b
5
5
  SHA512:
6
- metadata.gz: fc11d9c607e77bc977264d6c5f9c78699d790441fbde902f3305693a727126bf6d4d8cf81602a9f660edbccc180f74c99d2f2050a7c8b92b5863f5d4bfba55aa
7
- data.tar.gz: f8e4e0b9145ebd6c208f68de766149b97ff8cb47eba73e72462ac58cb889020892adde0667105e31a2f4349d49638640762f55ae784da74923b9a0b993e48f5c
6
+ metadata.gz: 06a741a3c1589f1b6ffc4afc70f5596e462e0a5c3abaa84ef46ef56f814a9a3f2dd690092a38ac66ebbb4a482e426840d4e4885b5ae2b4dc4d79c81f8a4bc766
7
+ data.tar.gz: c0729a4f76c4ab2835e019f59493dabce3e4080eaad0749d4ae1b802b41ca648173e81857df8a55deeff770b6db2145926df467aaf7a7cd9d2712cbd17bf2997
data/lib/asmrb.rb CHANGED
@@ -84,20 +84,24 @@ class Asm
84
84
  @stack.push e
85
85
  },
86
86
 
87
- "add" => lambda { | a, b |
88
- @variables[b] = @variables[b] + refvar(a)
87
+ "dupl" => lambda {
88
+ @stack.push @stack.last
89
89
  },
90
90
 
91
- "sub" => lambda { | a, b |
92
- @variables[b] = @variables[b] - refvar(a)
91
+ "add" => lambda {
92
+ @stack.push @stack.pop + @stack.pop
93
93
  },
94
94
 
95
- "mul" => lambda { | a, b |
96
- @variables[b] = @variables[b] * refvar(a)
95
+ "sub" => lambda {
96
+ @stack.push @stack.pop - @stack.pop
97
97
  },
98
98
 
99
- "div" => lambda { | a, b |
100
- @variables[b] = @variables[b] / refvar(a)
99
+ "mul" => lambda {
100
+ @stack.push @stack.pop * @stack.pop
101
+ },
102
+
103
+ "div" => lambda {
104
+ @stack.push @stack.pop / @stack.pop
101
105
  },
102
106
 
103
107
  "incr" => lambda { |dest, incval = 1|
@@ -114,6 +118,12 @@ class Asm
114
118
  @variables[src] : src
115
119
  },
116
120
 
121
+
122
+ "jz" => lambda { | name |
123
+ req_args "jz", 1
124
+ @pc = @labels[name] if @stack.pop == 0
125
+ },
126
+
117
127
  "jnz" => lambda { | name |
118
128
  req_args "jnz", 1
119
129
  @pc = @labels[name] if @stack.pop != 0
@@ -134,11 +144,12 @@ class Asm
134
144
  @pc = @labels[name] if @stack.pop == :eq
135
145
  },
136
146
 
137
- "cmp" => lambda { |a, b|
138
- a = refvar(a)
139
- b = refvar(b)
140
- @stack.push ( a > b ? :gt
141
- : a == b ? :eq : :lt )
147
+ "cmp" => lambda {
148
+ a = @stack.pop
149
+ b = @stack.pop
150
+ @stack.push(
151
+ a > b ? :gt
152
+ : a == b ? :eq : :lt )
142
153
  },
143
154
 
144
155
 
@@ -167,7 +178,7 @@ class Asm
167
178
  },
168
179
 
169
180
  "req" => lambda {|amount|
170
- raise Exception.new "require #{amount} #{ pluralize(amount, "argument") }." if @stack.length != amount
181
+ raise Exception.new "require #{amount} arg." if @stack.length < amount
171
182
  },
172
183
 
173
184
  "dbg" => lambda {
@@ -183,16 +194,6 @@ class Asm
183
194
  end
184
195
  eval "$#{name}.is_debug = true" if @is_debug
185
196
  o = eval "$#{name}.invoke #{args.join(',')}"
186
- # for some reasons, this pointer is increased,
187
- # after invoking the outside function.
188
- # @@pc is belong to class, sync with all objects
189
- # made with this class.
190
- # while @pc is stick to instance that created
191
- # by this class.
192
- # which is why invoking other Asm, cause @@pc
193
- # to increase, while @pc don't.
194
- # to test this problem, uncomment below and rake test:
195
- #@pc += 1
196
197
  @stack.push o if !o.nil?
197
198
  #binding.pry
198
199
  },
@@ -379,15 +380,19 @@ end
379
380
  Asm.new do
380
381
  defn :factorial
381
382
  arg acc, n
382
- cmp n, 1
383
+ push 1
384
+ push n
385
+ cmp
383
386
  jge :recursion
384
387
  jmp :exit
385
388
 
386
389
  label :recursion
387
- mul n, acc
388
- sub 1, n
389
390
  push acc
390
391
  push n
392
+ mul
393
+ push 1
394
+ push n
395
+ sub
391
396
  jmp :factorial
392
397
  label :exit
393
398
  push acc
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asmrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.5
4
+ version: 0.0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Trung
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-04 00:00:00.000000000 Z
11
+ date: 2015-02-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: create a toy assembly-like DSL in ruby
14
14
  email: deulamco@gmail.com