Refactored out count/filter properties

I find using the Get<T> and GetCount<T> methods better (even though the
naming convention sucks ass) in that it automatically supports any and
all future symbol types I may add in the future.
This commit is contained in:
arookas 2016-02-07 00:47:53 -05:00
parent ca7057bf02
commit 4a1f0ec855
3 changed files with 8 additions and 21 deletions

View file

@ -55,9 +55,9 @@ namespace arookas {
} }
results.DataCount = mContext.DataTable.Count; results.DataCount = mContext.DataTable.Count;
results.SymbolCount = mContext.SymbolTable.Count; results.SymbolCount = mContext.SymbolTable.Count;
results.BuiltinCount = mContext.SymbolTable.BuiltinCount; results.BuiltinCount = mContext.SymbolTable.GetCount<sunBuiltinSymbol>();
results.FunctionCount = mContext.SymbolTable.FunctionCount; results.FunctionCount = mContext.SymbolTable.GetCount<sunFunctionSymbol>();
results.VariableCount = mContext.SymbolTable.VariableCount; results.VariableCount = mContext.SymbolTable.GetCount<sunVariableSymbol>();
} }
catch (sunCompilerException ex) { catch (sunCompilerException ex) {
results.Error = ex; results.Error = ex;
@ -79,7 +79,7 @@ namespace arookas {
} }
int DoCompileFunctions() { int DoCompileFunctions() {
var count = 0; var count = 0;
foreach (var callable in mContext.SymbolTable.Callables.Where(i => i.HasRelocations && i.CompileCount == 0)) { foreach (var callable in mContext.SymbolTable.Get<sunCallableSymbol>().Where(i => i.HasRelocations && i.CompileCount == 0)) {
callable.Compile(this); callable.Compile(this);
++count; ++count;
} }

View file

@ -45,7 +45,7 @@ namespace arookas {
// callables // callables
public sunBuiltinSymbol DeclareBuiltin(sunBuiltinDeclaration node) { public sunBuiltinSymbol DeclareBuiltin(sunBuiltinDeclaration node) {
if (SymbolTable.Callables.Any(i => i.Name == node.Name.Value)) { if (SymbolTable.Get<sunCallableSymbol>().Any(i => i.Name == node.Name.Value)) {
throw new sunRedeclaredBuiltinException(node); throw new sunRedeclaredBuiltinException(node);
} }
var symbol = new sunBuiltinSymbol(node.Name.Value, node.Parameters.ParameterInfo, SymbolTable.Count); var symbol = new sunBuiltinSymbol(node.Name.Value, node.Parameters.ParameterInfo, SymbolTable.Count);
@ -58,7 +58,7 @@ namespace arookas {
if (node.Parameters.IsVariadic) { if (node.Parameters.IsVariadic) {
throw new sunVariadicFunctionException(node); throw new sunVariadicFunctionException(node);
} }
if (SymbolTable.Callables.Any(i => i.Name == name)) { if (SymbolTable.Get<sunCallableSymbol>().Any(i => i.Name == name)) {
throw new sunRedefinedFunctionException(node); throw new sunRedefinedFunctionException(node);
} }
var symbol = new sunFunctionSymbol(name, node.Parameters.ParameterInfo, node.Body); var symbol = new sunFunctionSymbol(name, node.Parameters.ParameterInfo, node.Body);
@ -69,11 +69,11 @@ namespace arookas {
public sunCallableSymbol ResolveCallable(sunFunctionCall node) { public sunCallableSymbol ResolveCallable(sunFunctionCall node) {
var global = node.Name.Value; var global = node.Name.Value;
var local = MangleSymbolName(global, node.Location.ScriptId, false, true); var local = MangleSymbolName(global, node.Location.ScriptId, false, true);
var symbol = SymbolTable.Callables.FirstOrDefault(i => i.Name == local); var symbol = SymbolTable.Get<sunCallableSymbol>().FirstOrDefault(i => i.Name == local);
if (symbol != null) { if (symbol != null) {
return symbol; return symbol;
} }
symbol = SymbolTable.Callables.FirstOrDefault(i => i.Name == global); symbol = SymbolTable.Get<sunCallableSymbol>().FirstOrDefault(i => i.Name == global);
if (symbol != null) { if (symbol != null) {
return symbol; return symbol;
} }

View file

@ -9,19 +9,6 @@ namespace arookas {
List<sunSymbol> mSymbols; List<sunSymbol> mSymbols;
public int Count { get { return mSymbols.Count; } } public int Count { get { return mSymbols.Count; } }
public int CallableCount { get { return Callables.Count(); } }
public int BuiltinCount { get { return Builtins.Count(); } }
public int FunctionCount { get { return Functions.Count(); } }
public int StorableCount { get { return Storables.Count(); } }
public int VariableCount { get { return Variables.Count(); } }
public int ConstantCount { get { return Constants.Count(); } }
public IEnumerable<sunCallableSymbol> Callables { get { return mSymbols.OfType<sunCallableSymbol>(); } }
public IEnumerable<sunBuiltinSymbol> Builtins { get { return mSymbols.OfType<sunBuiltinSymbol>(); } }
public IEnumerable<sunFunctionSymbol> Functions { get { return mSymbols.OfType<sunFunctionSymbol>(); } }
public IEnumerable<sunStorableSymbol> Storables { get { return mSymbols.OfType<sunStorableSymbol>(); } }
public IEnumerable<sunVariableSymbol> Variables { get { return mSymbols.OfType<sunVariableSymbol>(); } }
public IEnumerable<sunConstantSymbol> Constants { get { return mSymbols.OfType<sunConstantSymbol>(); } }
public sunSymbol this[int index] { public sunSymbol this[int index] {
get { return mSymbols[index]; } get { return mSymbols[index]; }