From b613977c767d8a740bf9b43bd35f570c247fc10f Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sun, 14 Dec 2014 08:06:32 -0800 Subject: 419 - layer 11 now passing --- mu.arc | 6 ++--- mu.arc.t | 76 +++++++++++++++++++++++++++++++++++++++------------------------- 2 files changed, 49 insertions(+), 33 deletions(-) diff --git a/mu.arc b/mu.arc index ad060f5f..cdadc9f9 100644 --- a/mu.arc +++ b/mu.arc @@ -907,7 +907,7 @@ (when (maybe-add arg location idx) (trace "cn0" "location for arg " arg ": " idx) ; todo: can't allocate arrays on the stack - (++ idx (sizeof ty.arg))))))))) + (++ idx (sizeof ty.arg.0))))))))) (trace "cn1" "update names " canon.location " " canon.isa-field) (each instr instrs (when (acons instr) @@ -923,11 +923,11 @@ (def maybe-add (arg location idx) (trace "maybe-add" arg) (when (and nondummy.arg - (~in ty.arg 'literal 'offset 'fn) + (~in ty.arg.0 'literal 'offset 'fn) (~location v.arg) (isa v.arg 'sym) (~in v.arg 'nil 'default-scope) - (~pos 'global metadata.arg)) + (~assoc 'global metadata.arg)) (= (location v.arg) idx))) ;; literate tangling system for reordering code diff --git a/mu.arc.t b/mu.arc.t index c41125a5..2f10cc7e 100644 --- a/mu.arc.t +++ b/mu.arc.t @@ -1585,7 +1585,7 @@ (((3 integer)) <- copy ((0 literal))) (jump ((-3 offset))))) (prn "F - 'loop' can take an extra arg with number of nested blocks to exit")) -(quit) +;? (quit) ;; Variables ; @@ -1596,10 +1596,11 @@ (reset) (new-trace "convert-names") (= traces* (queue)) +;? (set dump-trace*) (if (~iso (convert-names - '(((x integer) <- copy ((4 literal))) - ((y integer) <- copy ((2 literal))) - ((z integer) <- add (x integer) (y integer)))) + '((((x integer)) <- copy ((4 literal))) + (((y integer)) <- copy ((2 literal))) + (((z integer)) <- add ((x integer)) ((y integer))))) '((((1 integer)) <- copy ((4 literal))) (((2 integer)) <- copy ((2 literal))) (((3 integer)) <- add ((1 integer)) ((2 integer))))) @@ -1609,8 +1610,8 @@ (new-trace "convert-names-compound") (= traces* (queue)) (if (~iso (convert-names - '(((x integer-boolean-pair) <- copy ((4 literal))) - ((y integer) <- copy ((2 literal))))) + '((((x integer-boolean-pair)) <- copy ((4 literal))) + (((y integer)) <- copy ((2 literal))))) '((((1 integer-boolean-pair)) <- copy ((4 literal))) (((3 integer)) <- copy ((2 literal))))) (prn "F - convert-names increments integer locations by the size of the type of the previous var")) @@ -1618,45 +1619,56 @@ (reset) (new-trace "convert-names-nil") (= traces* (queue)) +;? (set dump-trace*) (if (~iso (convert-names - '(((x integer) <- copy ((4 literal))) - ((y integer) <- copy ((2 literal))) - ((nil integer) <- add (x integer) (y integer)))) + '((((x integer)) <- copy ((4 literal))) + (((y integer)) <- copy ((2 literal))) + ; nil location is meaningless; just for testing + (((nil integer)) <- add ((x integer)) ((y integer))))) '((((1 integer)) <- copy ((4 literal))) (((2 integer)) <- copy ((2 literal))) - ((nil integer) <- add ((1 integer)) ((2 integer))))) + (((nil integer)) <- add ((1 integer)) ((2 integer))))) (prn "F - convert-names never renames nil")) (reset) (new-trace "convert-names-global") (= traces* (queue)) (if (~iso (convert-names - '(((x integer) <- copy ((4 literal))) - ((y integer global) <- copy ((2 literal))) - ((default-scope integer) <- add (x integer) (y integer global)))) + '((((x integer)) <- copy ((4 literal))) + (((y integer) (global)) <- copy ((2 literal))) + (((default-scope integer)) <- add ((x integer)) ((y integer) (global))))) '((((1 integer)) <- copy ((4 literal))) - ((y integer global) <- copy ((2 literal))) - ((default-scope integer) <- add ((1 integer)) (y integer global)))) + (((y integer) (global)) <- copy ((2 literal))) + (((default-scope integer)) <- add ((1 integer)) ((y integer) (global))))) (prn "F - convert-names never renames global operands")) +(reset) +(new-trace "convert-names-literal") +(= traces* (queue)) +(if (~iso (convert-names + ; meaningless; just for testing + '((((x literal)) <- copy ((0 literal))))) + '((((x literal)) <- copy ((0 literal))))) + (prn "F - convert-names never renames literals")) + ; kludgy support for 'fork' below (reset) (new-trace "convert-names-functions") (= traces* (queue)) (if (~iso (convert-names - '(((x integer) <- copy ((4 literal))) - ((y integer) <- copy ((2 literal))) - ((z fn) <- add (x integer) (y integer)))) + '((((x integer)) <- copy ((4 literal))) + (((y integer)) <- copy ((2 literal))) + (((z fn)) <- add ((x integer)) ((y integer))))) '((((1 integer)) <- copy ((4 literal))) (((2 integer)) <- copy ((2 literal))) - ((z fn) <- add ((1 integer)) ((2 integer))))) - (prn "F - convert-names never renames nil")) + (((z fn)) <- add ((1 integer)) ((2 integer))))) + (prn "F - convert-names never renames fns")) (reset) (new-trace "convert-names-record-fields") (= traces* (queue)) (if (~iso (convert-names - '(((x integer) <- get ((34 integer-boolean-pair)) (bool offset)))) + '((((x integer)) <- get ((34 integer-boolean-pair)) ((bool offset))))) '((((1 integer)) <- get ((34 integer-boolean-pair)) ((1 offset))))) (prn "F - convert-names replaces record field offsets")) @@ -1664,32 +1676,32 @@ (new-trace "convert-names-record-fields-ambiguous") (= traces* (queue)) (if (errsafe (convert-names - '(((bool boolean) <- copy (t literal)) - ((x integer) <- get ((34 integer-boolean-pair)) (bool offset))))) + '((((bool boolean)) <- copy ((t literal))) + (((x integer)) <- get ((34 integer-boolean-pair)) ((bool offset)))))) (prn "F - convert-names doesn't allow offsets and variables with the same name in a function")) (reset) (new-trace "convert-names-record-fields-ambiguous-2") (= traces* (queue)) (if (errsafe (convert-names - '(((x integer) <- get ((34 integer-boolean-pair)) (bool offset)) - ((bool boolean) <- copy (t literal))))) + '((((x integer)) <- get ((34 integer-boolean-pair)) ((bool offset))) + (((bool boolean)) <- copy ((t literal)))))) (prn "F - convert-names doesn't allow offsets and variables with the same name in a function - 2")) (reset) (new-trace "convert-names-record-fields-indirect") (= traces* (queue)) (if (~iso (convert-names - '(((x integer) <- get (34 integer-boolean-pair-address deref) (bool offset)))) - '((((1 integer)) <- get (34 integer-boolean-pair-address deref) ((1 offset))))) + '((((x integer)) <- get ((34 integer-boolean-pair-address) (deref)) ((bool offset))))) + '((((1 integer)) <- get ((34 integer-boolean-pair-address) (deref)) ((1 offset))))) (prn "F - convert-names replaces field offsets for record addresses")) (reset) (new-trace "convert-names-record-fields-multiple") (= traces* (queue)) (if (~iso (convert-names - '((((2 boolean)) <- get ((1 integer-boolean-pair)) (bool offset)) - (((3 boolean)) <- get ((1 integer-boolean-pair)) (bool offset)))) + '((((2 boolean)) <- get ((1 integer-boolean-pair)) ((bool offset))) + (((3 boolean)) <- get ((1 integer-boolean-pair)) ((bool offset))))) '((((2 boolean)) <- get ((1 integer-boolean-pair)) ((1 offset))) (((3 boolean)) <- get ((1 integer-boolean-pair)) ((1 offset))))) (prn "F - convert-names replaces field offsets with multiple mentions")) @@ -1706,6 +1718,10 @@ (prn "F - convert-names skips past labels")) ;? (quit) +) ; section 11 + +(section 20 + ; A rudimentary memory allocator. Eventually we want to write this in mu. ; ; No deallocation yet; let's see how much code we can build in mu before we @@ -1938,7 +1954,7 @@ (prn "F - 'len' accesses length of array address")) ;? (quit) -) ; section 11 +) ; section 20 (section 100 -- cgit 1.4.1-2-gfad0