From 1ea0b4e57922e5cb69193b5118b91a2a3da33d95 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Mon, 26 Jan 2015 02:42:30 -0800 Subject: 627 --- mu.arc.t | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'mu.arc.t') diff --git a/mu.arc.t b/mu.arc.t index 0bb64788..cc5be550 100644 --- a/mu.arc.t +++ b/mu.arc.t @@ -1902,6 +1902,31 @@ (when (~is rep.routine!alloc-max 50) (prn "F - 'new' updates upper bound for routine memory @rep.routine!alloc-max"))) +(reset) +(new-trace "new-skip") +(add-code + '((function main [ + (1:integer-boolean-pair-address <- new integer-boolean-pair:literal) + ]))) +; start allocating from address 30, in chunks of 10 locations each +(= Memory-allocated-until 30 + Allocation-chunk 10) +(let routine make-routine!main + (assert:is rep.routine!alloc 30) + (assert:is rep.routine!alloc-max 40) + ; pretend the current chunk has just one location left + (= rep.routine!alloc 39) + (enq routine running-routines*) + ; request 2 locations + (run) + (each routine completed-routines* + (aif rep.routine!error (prn "error - " it))) + (when (or (~is memory*.1 40) + (~is rep.routine!alloc 42) + (~is rep.routine!alloc-max 50) + (~is Memory-allocated-until 50)) + (prn "F - 'new' skips past current chunk if insufficient space"))) + ; Even though our memory locations can now have names, the names are all ; globals, accessible from any function. To isolate functions from their ; callers we need local variables, and mu provides them using a special -- cgit 1.4.1-2-gfad0