nilang 0.4.1

A scripting language interpreter for Advent of Code
Documentation
========= FILE ./src/runtime/tests/fixtures/fizzbuzz/fizzbuzz.ir.actual ========
fn1 (s_0, digit_0) {
block0:
  i_0 = 0
  next block1(i_0)

block1(i_1):
  t4 =  # s_0
  t5 = i_1 < t4
  jnt t5 block5
  next block2

block2:
  t6 = s_0[i_1]
  t7 = t6 == digit_0
  jnt t7 block4
  next block3

block3:
  t8 = true
  RETURN t8

block4:
  t9 = 1
  i_2 = i_1 + t9
  jump block1(i_2)

block5:
  t11 = false
  RETURN t11

}
fn2 (n_0) {
block0:
  str_0 = #str
  STORE_ARG n_0
  s_0 = CALL str_0
  t5 = 5
  t6 = n_0 % t5
  t7 = 0
  t8 = t6 == t7
  jit t8 block2(t8)
  next block1

block1:
  t9 = "5"
  LOAD_UPVAL contains_1
  STORE_ARG s_0
  STORE_ARG t9
  t11 = CALL contains_1
  next block2(t11)

block2(t26):
  t14 = 7
  t15 = n_0 % t14
  t17 = t15 == t7
  jit t17 block4(t17)
  next block3

block3:
  t18 = "7"
  LOAD_UPVAL contains_0
  STORE_ARG s_0
  STORE_ARG t18
  t19 = CALL contains_0
  next block4(t19)

block4(t27):
  jnt t26 block6(t26)
  next block5

block5:
  next block6(t27)

block6(t28):
  jnt t28 block8
  next block7

block7:
  t22 = "fizzbuzz"
  RETURN t22

block8:
  jnt t26 block10
  next block9

block9:
  t23 = "fizz"
  RETURN t23

block10:
  jnt t27 block12
  next block11

block11:
  t24 = "buzz"
  RETURN t24

block12:
  t25 = null
  RETURN t25

}
MAIN () {
block0:
  contains_0 = fn1
  fizzbuzz_0 = fn2
  STORE_UPVAL fizzbuzz_0, contains_0
  t2 = 51
  STORE_ARG t2
  t3 = CALL fizzbuzz_0
  PRINT t3
  t6 = 10
  STORE_ARG t6
  t7 = CALL fizzbuzz_0
  PRINT t7
  t10 = 17
  STORE_ARG t10
  t11 = CALL fizzbuzz_0
  PRINT t11
  t14 = 14
  STORE_ARG t14
  t15 = CALL fizzbuzz_0
  PRINT t15
  t18 = 70
  STORE_ARG t18
  t19 = CALL fizzbuzz_0
  PRINT t19
  t22 = 35
  STORE_ARG t22
  t23 = CALL fizzbuzz_0
  PRINT t23
  t26 = 57
  STORE_ARG t26
  t27 = CALL fizzbuzz_0
  PRINT t27
  t29 = null
  RETURN t29

}