public void RemoveCallable(string identifier, CallableSymbol callable) { if (!_table.Contains(identifier) || !(_table[identifier] is List <CallableSymbol> callables)) { return; } foreach (var callableSymbol in callables) { if (callable.ParametersTypes.Count != callableSymbol.ParametersTypes.Count) { continue; } bool found = true; for (int i = 0; i < callable.ParametersTypes.Count; ++i) { if (!callable.ParametersTypes[i].Equals(callableSymbol.ParametersTypes[i])) { found = false; } } if (found) { callables.Remove(callableSymbol); break; } } }
public bool AddCallable(string identifier, CallableSymbol callable) { var paramTypes = new List <SymType>(from type in callable.ParametersTypes select type.Item2); foreach (var parametersType in callable.ParametersTypes) { paramTypes.Add(parametersType.Item2); } if (FindCallable(identifier, paramTypes) != null) { return(false); } if (_table.Contains(identifier)) { if (_table[identifier] is List <CallableSymbol> callableSymbols && !callableSymbols.Contains(callable)) { callableSymbols.Add(callable); } } else { _table.Add(identifier.ToLower(), new List <CallableSymbol> { callable }); } return(true); }