Skip to content

Commit 9a1c8f7

Browse files
committed
Refactor makeRange func
1 parent 4f98e77 commit 9a1c8f7

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

vm/runtime.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -218,18 +218,13 @@ func exponent(a, b interface{}) float64 {
218218
return math.Pow(toFloat64(a), toFloat64(b))
219219
}
220220

221-
func makeRange(a, b interface{}, budget int) ([]int, int) {
222-
min := toInt(a)
223-
max := toInt(b)
221+
func makeRange(min, max int) []int {
224222
size := max - min + 1
225-
if size >= budget {
226-
panic("memory budget exceeded")
227-
}
228223
rng := make([]int, size)
229224
for i := range rng {
230225
rng[i] = min + i
231226
}
232-
return rng, size
227+
return rng
233228
}
234229

235230
func toInt(a interface{}) int {

vm/vm.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,6 @@ func (vm *VM) Run(program *Program, env interface{}) interface{} {
7171
<-vm.step
7272
}
7373

74-
if vm.memory >= vm.limit {
75-
panic("memory budget exceeded")
76-
}
77-
7874
vm.pp = vm.ip
7975
vm.ip++
8076
op := vm.bytecode[vm.pp]
@@ -209,8 +205,13 @@ func (vm *VM) Run(program *Program, env interface{}) interface{} {
209205
case OpRange:
210206
b := vm.pop()
211207
a := vm.pop()
212-
c, size := makeRange(a, b, vm.limit)
213-
vm.push(c)
208+
min := toInt(a)
209+
max := toInt(b)
210+
size := max - min + 1
211+
if vm.memory+size >= vm.limit {
212+
panic("memory budget exceeded")
213+
}
214+
vm.push(makeRange(min, max))
214215
vm.memory += size
215216

216217
case OpMatches:
@@ -308,6 +309,9 @@ func (vm *VM) Run(program *Program, env interface{}) interface{} {
308309
}
309310
vm.push(array)
310311
vm.memory += size
312+
if vm.memory >= vm.limit {
313+
panic("memory budget exceeded")
314+
}
311315

312316
case OpMap:
313317
size := vm.pop().(int)
@@ -319,6 +323,9 @@ func (vm *VM) Run(program *Program, env interface{}) interface{} {
319323
}
320324
vm.push(m)
321325
vm.memory += size
326+
if vm.memory >= vm.limit {
327+
panic("memory budget exceeded")
328+
}
322329

323330
case OpLen:
324331
vm.push(length(vm.current()))

0 commit comments

Comments
 (0)