Mercurial > repos > rhope
diff nworker.rhope @ 91:bcdc326b3d6e
Added basic support for list literals in compiler. Updated todo list.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 31 Jul 2010 17:17:23 -0400 |
parents | 5a195ee08eac |
children | e73a93fb5de1 |
line wrap: on
line diff
--- a/nworker.rhope Sat Jul 31 15:08:15 2010 -0400 +++ b/nworker.rhope Sat Jul 31 17:17:23 2010 -0400 @@ -632,6 +632,46 @@ out <- [worker]_Dependency Groups[no deps, no deps, [()]Append[no deps]] } +Const Name[val,node index,worker name:out] +{ + If[[Type Of[val]] = ["Type Instance"]] + { + //TODO: Support parametric types + datstring <- [val]Name >> + }{ + If[[Type Of[val]] = ["Machine Integer"]] + { + If[[val]Signed? >>] + { s <- "i" } + { s <- "u" } + datstring <- [[[val]Value >>]Append[s]]Append[[val]Size >>] + }{ + If[[Type Of[val]] = ["Worker Literal"]] + { + If[[[[val]Args >>]Length] > [0]] + { + datstring <- [[["Arg "]Append[node index]]Append[" "]]Append[worker name] + }{ + datstring <- [val]Name >> + } + }{ + If[[Type Of[val]] = ["List"]] + { + If[[[val]Length] > [0]] + { + datstring <- [[["Arg "]Append[node index]]Append[" "]]Append[worker name] + }{ + datstring <- "Empty" + } + }{ + datstring <- val + } + } + } + } + out <- [[Type Of[val]]Append["_"]]Append[datstring] +} + Format Input@NWorker[worker,noderef:out] { node <- [[worker]Nodes >>]Index[[noderef]Index >>] @@ -658,32 +698,7 @@ { out <- AddRef[ [[["__result_"]Append[[noderef]Index >>]]Append["_"]]Append[[noderef]IO Num >>] ] }{ - If[[Type Of[[node]Data >>]] = ["Type Instance"]] - { - //TODO: Support parametric types - datstring <- [[node]Data >>]Name >> - }{ - If[[Type Of[[node]Data >>]] = ["Machine Integer"]] - { - If[[[node]Data >>]Signed? >>] - { s <- "i" } - { s <- "u" } - datstring <- [[[[node]Data >>]Value >>]Append[s]]Append[[[node]Data >>]Size >>] - }{ - If[[Type Of[[node]Data >>]] = ["Worker Literal"]] - { - If[[[[[node]Data >>]Args >>]Length] > [0]] - { - datstring <- [[["Arg "]Append[[noderef]Index >>]]Append[" "]]Append[[worker]Name >>] - }{ - datstring <- [[node]Data >>]Name >> - } - }{ - datstring <- [node]Data >> - } - } - } - out <- Constant[[[Type Of[[node]Data >>]]Append["_"]]Append[datstring]] + out <- Constant[Const Name[[node]Data >>, [noderef]Index >>, [worker]Name >>]] } } } @@ -837,33 +852,7 @@ }{ If[[[node]Type >>] = ["const"]] { - //TODO: Handle list constants - If[[Type Of[[node]Data >>]] = ["Type Instance"]] - { - //TODO: Support parametric types - datstring <- [[node]Data >>]Name >> - }{ - If[[Type Of[[node]Data >>]] = ["Machine Integer"]] - { - If[[[node]Data >>]Signed? >>] - { s <- "i" } - { s <- "u" } - datstring <- [[[[node]Data >>]Value >>]Append[s]]Append[[[node]Data >>]Size >>] - }{ - If[[Type Of[[node]Data >>]] = ["Worker Literal"]] - { - If[[[[[node]Data >>]Args >>]Length] > [0]] - { - datstring <- [[["Arg "]Append[node index]]Append[" "]]Append[[worker]Name >>] - }{ - datstring <- [[node]Data >>]Name >> - } - }{ - datstring <- [node]Data >> - } - } - } - constname <- [[Type Of[[node]Data >>]]Append["_"]]Append[datstring] + constname <- Const Name[[node]Data >>, node index, [worker]Name >>] withconst <- [func]Register Constant[constname, [node]Data >>] [conditions]For Backend {