public void BindUsage(ISeq <JST.Statement> statements, CST.Usage usage, TypePhase typePhase) { foreach (var kv in usage.Assemblies) { if (kv.Value > 1) { if (!boundAssemblies.ContainsKey(kv.Key)) { var e = env.JSTHelpers.DefaultResolveAssembly(this, kv.Key); if (e != null) { if (env.DebugMode) { statements.Add(new JST.CommentStatement(kv.Key.ToString())); } var id = NameSupply.GenSym(); statements.Add(JST.Statement.Var(id, e)); boundAssemblies.Add(kv.Key, id.ToE()); } } // else: use outer binding } // else: inline expression as need it } foreach (var kv in usage.Types) { if (kv.Value > 1) { var existing = default(ExpressionAndPhase); var b = boundTypes.TryGetValue(kv.Key, out existing); if (!b || typePhase > existing.Phase) { var e = env.JSTHelpers.DefaultResolveType(this, kv.Key, typePhase); if (e != null) { if (env.DebugMode) { statements.Add(new JST.CommentStatement(kv.Key.ToString())); } var id = NameSupply.GenSym(); statements.Add(JST.Statement.Var(id, e)); var updated = new ExpressionAndPhase(id.ToE(), typePhase); if (b) { boundTypes[kv.Key] = updated; } else { boundTypes.Add(kv.Key, updated); } } } // else: use outer binding } // else: inline expression as need it } }
public void BindUsage(ISeq<JST.Statement> statements, CST.Usage usage, TypePhase typePhase) { foreach (var kv in usage.Assemblies) { if (kv.Value > 1) { if (!boundAssemblies.ContainsKey(kv.Key)) { var e = env.JSTHelpers.DefaultResolveAssembly(this, kv.Key); if (e != null) { if (env.DebugMode) statements.Add(new JST.CommentStatement(kv.Key.ToString())); var id = NameSupply.GenSym(); statements.Add(JST.Statement.Var(id, e)); boundAssemblies.Add(kv.Key, id.ToE()); } } // else: use outer binding } // else: inline expression as need it } foreach (var kv in usage.Types) { if (kv.Value > 1) { var existing = default(ExpressionAndPhase); var b = boundTypes.TryGetValue(kv.Key, out existing); if (!b || typePhase > existing.Phase) { var e = env.JSTHelpers.DefaultResolveType(this, kv.Key, typePhase); if (e != null) { if (env.DebugMode) statements.Add(new JST.CommentStatement(kv.Key.ToString())); var id = NameSupply.GenSym(); statements.Add(JST.Statement.Var(id, e)); var updated = new ExpressionAndPhase(id.ToE(), typePhase); if (b) boundTypes[kv.Key] = updated; else boundTypes.Add(kv.Key, updated); } } // else: use outer binding } // else: inline expression as need it } }