Mercurial > repos > tabletprog
comparison cbackend.js @ 289:befaefdfcd8a
Make sure that true and false modules are initialized before anything else and that the list module is initialized before any modules besides true and false
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 22 Jul 2014 23:32:49 -0700 |
parents | a4c2b31acba7 |
children | d1dc2d70bdfd |
comparison
equal
deleted
inserted
replaced
288:a4c2b31acba7 | 289:befaefdfcd8a |
---|---|
1119 return this.ast.toCModuleInstance(); | 1119 return this.ast.toCModuleInstance(); |
1120 }; | 1120 }; |
1121 | 1121 |
1122 function processUsedToplevel(toplevel) | 1122 function processUsedToplevel(toplevel) |
1123 { | 1123 { |
1124 var alwaysused = ['true', 'false', 'list']; | 1124 var alwaysused = ['list', 'true', 'false']; |
1125 var ret = ''; | 1125 var ret = ''; |
1126 var modulenum = 0; | 1126 var modulenum = 0; |
1127 var visited = {}; | 1127 var visited = {}; |
1128 var newused = []; | |
1128 for (var i in alwaysused) { | 1129 for (var i in alwaysused) { |
1129 toplevel.used[alwaysused[i]] = true; | 1130 delete toplevel.used[alwaysused[i]]; |
1130 } | 1131 visited[alwaysused[i]] = true; |
1132 } | |
1133 var addedAlways = false; | |
1131 var newused = Object.keys(toplevel.used); | 1134 var newused = Object.keys(toplevel.used); |
1132 var allused = newused; | 1135 var allused = newused; |
1133 while (newused.length) { | 1136 while (newused.length) { |
1134 for (var i in newused) { | 1137 for (var i in newused) { |
1135 debugprint('//---module', newused[i], '--- populate symbols'); | 1138 debugprint('//---module', newused[i], '--- populate symbols'); |
1141 for (var symbol in toplevel.used) { | 1144 for (var symbol in toplevel.used) { |
1142 if (!(symbol in visited)) { | 1145 if (!(symbol in visited)) { |
1143 debugprint('//found new usage of module', symbol); | 1146 debugprint('//found new usage of module', symbol); |
1144 newused.push(symbol); | 1147 newused.push(symbol); |
1145 allused.push(symbol); | 1148 allused.push(symbol); |
1149 } | |
1150 } | |
1151 if (!newused.length && !addedAlways) { | |
1152 addedAlways = true; | |
1153 for (var i in alwaysused) { | |
1154 toplevel.used[alwaysused[i]] = true; | |
1155 newused.push(alwaysused[i]); | |
1156 allused.push(alwaysused[i]); | |
1146 } | 1157 } |
1147 } | 1158 } |
1148 } | 1159 } |
1149 | 1160 |
1150 for (var i = allused.length-1; i >= 0; i--) { | 1161 for (var i = allused.length-1; i >= 0; i--) { |