Download
24 lines 775 BMoonScriptModified 2022-10-03 raw
123456789101112131415161718192021222324
-- Custom implementations of list methods
import FnType, OptionalType, NilType, Num, Percent from require 'types'
import log, viz, node_assert, node_error, each_tag, context_err from require 'util'

types = {
    of: => FnType({@,Num}, Num, nil)
    clamped: => FnType({@,@,@}, @, nil)
}

methods = {
    of: (code)=>
        pct_reg, num_reg = code\add_values(@fn.value, @[1])
        ret = code\fresh_locals "result"
        code\add "#{ret} =d mul #{pct_reg}, #{num_reg}\n"
        return ret

    clamped: (code)=>
        pct_reg, low_reg, high_reg = code\add_values(@fn.value, @[1], @[2])
        result = @fresh_locals "result"
        code\add "#{result} =d call $d_mid(d #{pct_reg}, d #{low_reg}, d #{high_reg})\n"
        return result
}

return {:methods, :types}