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--) {