$apply/optimized

arg-count fun


Warning

This function is declared internal, so there are no guarantees whatsoever regarding its existence or functionality.

Have fun playing around with the internals but please try not to use any of these in any library or application.

Summary

arguments -> (result) --- Read arg-count arguments from the stack, apply the to fun and push the result on the stack

Bytecode

Probably only interesting to you if you want to understand more about the Nujel VM or care very much about performance.

(    0 ($let))
(    1 ($get/val 'arg-count))
(    3 ($det/val 'ΓεnΣym-2))
(    5 ($drop))
(    6 ($get/val 'ΓεnΣym-2))
(    8 ($push/int/byte 1))
(   10 ($=))
(   11 ($jf* 83))
(   14 ($let))
(   15 ($get/val 'fun))
(   17 ($det/val 'ΓεnΣym-3))
(   19 ($drop))
(   20 ($get/val 'ΓεnΣym-3))
(   22 ($get/val 'car))
(   24 ($=))
(   25 ($jf* 8))
(   28 ($push/val (#$11)))
(   30 ($jmp* 60))
(   33 ($get/val 'ΓεnΣym-3))
(   35 ($get/val 'cdr))
(   37 ($=))
(   38 ($jf* 8))
(   41 ($push/val (#$12)))
(   43 ($jmp* 47))
(   46 ($get/val 'ΓεnΣym-3))
(   48 ($get/val 'zero?))
(   50 ($=))
(   51 ($jf* 8))
(   54 ($push/val (#$2A)))
(   56 ($jmp* 34))
(   59 ($get/val 'ΓεnΣym-3))
(   61 ($get/val 'inc/int))
(   63 ($=))
(   64 ($jf* 8))
(   67 ($push/val (#$23)))
(   69 ($jmp* 21))
(   72 ($get/val 'throw))
(   74 ($get/val 'list))
(   76 ($push/val :arity-error))
(   78 ($push/val Wrong number of arguments for that function))
(   80 ($get/val 'fun))
(   82 ($get/val 'current-lambda))
(   84 ($apply 0))
(   86 ($apply 4))
(   88 ($apply 1))
(   90 ($closure/pop))
(   91 ($jmp* 226))
(   94 ($get/val 'ΓεnΣym-2))
(   96 ($push/int/byte 2))
(   98 ($=))
(   99 ($jf* 200))
(  102 ($let))
(  103 ($get/val 'fun))
(  105 ($det/val 'ΓεnΣym-4))
(  107 ($drop))
(  108 ($get/val 'ΓεnΣym-4))
(  110 ($get/val 'add/int))
(  112 ($=))
(  113 ($jf* 8))
(  116 ($push/val (#$3)))
(  118 ($jmp* 177))
(  121 ($get/val 'ΓεnΣym-4))
(  123 ($get/val '+))
(  125 ($=))
(  126 ($jf* 8))
(  129 ($push/val (#$25)))
(  131 ($jmp* 164))
(  134 ($get/val 'ΓεnΣym-4))
(  136 ($get/val '-))
(  138 ($=))
(  139 ($jf* 8))
(  142 ($push/val (#$26)))
(  144 ($jmp* 151))
(  147 ($get/val 'ΓεnΣym-4))
(  149 ($get/val '*))
(  151 ($=))
(  152 ($jf* 8))
(  155 ($push/val (#$27)))
(  157 ($jmp* 138))
(  160 ($get/val 'ΓεnΣym-4))
(  162 ($get/val '/))
(  164 ($=))
(  165 ($jf* 8))
(  168 ($push/val (#$28)))
(  170 ($jmp* 125))
(  173 ($get/val 'ΓεnΣym-4))
(  175 ($get/val 'rem))
(  177 ($=))
(  178 ($jf* 8))
(  181 ($push/val (#$29)))
(  183 ($jmp* 112))
(  186 ($get/val 'ΓεnΣym-4))
(  188 ($get/val 'cons))
(  190 ($=))
(  191 ($jf* 8))
(  194 ($push/val (#$14)))
(  196 ($jmp* 99))
(  199 ($get/val 'ΓεnΣym-4))
(  201 ($get/val '<))
(  203 ($=))
(  204 ($jf* 8))
(  207 ($push/val (#$1E)))
(  209 ($jmp* 86))
(  212 ($get/val 'ΓεnΣym-4))
(  214 ($get/val '<=))
(  216 ($=))
(  217 ($jf* 8))
(  220 ($push/val (#$1F)))
(  222 ($jmp* 73))
(  225 ($get/val 'ΓεnΣym-4))
(  227 ($get/val '=))
(  229 ($=))
(  230 ($jf* 8))
(  233 ($push/val (#$20)))
(  235 ($jmp* 60))
(  238 ($get/val 'ΓεnΣym-4))
(  240 ($get/val '>=))
(  242 ($=))
(  243 ($jf* 8))
(  246 ($push/val (#$21)))
(  248 ($jmp* 47))
(  251 ($get/val 'ΓεnΣym-4))
(  253 ($get/val '>))
(  255 ($=))
(  256 ($jf* 8))
(  259 ($push/val (#$22)))
(  261 ($jmp* 34))
(  264 ($get/val 'ΓεnΣym-4))
(  266 ($get/val 'bytecode-eval*))
(  268 ($=))
(  269 ($jf* 8))
(  272 ($push/val (#$1D)))
(  274 ($jmp* 21))
(  277 ($get/val 'throw))
(  279 ($get/val 'list))
(  281 ($push/val :arity-error))
(  283 ($push/val Wrong number of arguments for that function))
(  285 ($get/val 'fun))
(  287 ($get/val 'current-lambda))
(  289 ($apply 0))
(  291 ($apply 4))
(  293 ($apply 1))
(  295 ($closure/pop))
(  296 ($jmp* 21))
(  299 ($get/val 'throw))
(  301 ($get/val 'list))
(  303 ($push/val :arity-error))
(  305 ($push/val Wrong number of arguments for that function))
(  307 ($get/val 'fun))
(  309 ($get/val 'current-lambda))
(  311 ($apply 0))
(  313 ($apply 4))
(  315 ($apply 1))
(  317 ($closure/pop))
(  318 ($ret))