Renamed symbol table classes.
This commit is contained in:
parent
5accab46db
commit
9ace3833cb
8 changed files with 58 additions and 63 deletions
|
@ -175,7 +175,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public abstract void Compile(sunContext context, sunVariableInfo variable);
|
||||
public abstract void Compile(sunContext context, sunVariableSymbol variable);
|
||||
}
|
||||
|
||||
class sunIncrement : sunAugment
|
||||
|
@ -186,7 +186,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variable)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variable)
|
||||
{
|
||||
context.Text.IncVariable(variable);
|
||||
}
|
||||
|
@ -200,7 +200,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variable)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variable)
|
||||
{
|
||||
context.Text.DecVariable(variable);
|
||||
}
|
||||
|
|
|
@ -291,7 +291,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public virtual void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public virtual void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
expression.Compile(context);
|
||||
context.Text.StoreVariable(variableInfo);
|
||||
|
@ -306,7 +306,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
context.Text.PushVariable(variableInfo);
|
||||
expression.Compile(context);
|
||||
|
@ -323,7 +323,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
context.Text.PushVariable(variableInfo);
|
||||
expression.Compile(context);
|
||||
|
@ -340,7 +340,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
context.Text.PushVariable(variableInfo);
|
||||
expression.Compile(context);
|
||||
|
@ -357,7 +357,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
context.Text.PushVariable(variableInfo);
|
||||
expression.Compile(context);
|
||||
|
@ -374,7 +374,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
context.Text.PushVariable(variableInfo);
|
||||
expression.Compile(context);
|
||||
|
@ -391,7 +391,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
context.Text.PushVariable(variableInfo);
|
||||
expression.Compile(context);
|
||||
|
@ -408,7 +408,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
context.Text.PushVariable(variableInfo);
|
||||
expression.Compile(context);
|
||||
|
@ -425,7 +425,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
context.Text.PushVariable(variableInfo);
|
||||
expression.Compile(context);
|
||||
|
@ -442,7 +442,7 @@ namespace arookas
|
|||
|
||||
}
|
||||
|
||||
public override void Compile(sunContext context, sunVariableInfo variableInfo, sunExpression expression)
|
||||
public override void Compile(sunContext context, sunVariableSymbol variableInfo, sunExpression expression)
|
||||
{
|
||||
context.Text.PushVariable(variableInfo);
|
||||
expression.Compile(context);
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
public override void Compile(sunContext context)
|
||||
{
|
||||
sunVariableInfo variableInfo;
|
||||
sunVariableSymbol variableInfo;
|
||||
sunConstInfo constInfo;
|
||||
context.ResolveVariableOrConstant(Variable, out variableInfo, out constInfo);
|
||||
if (variableInfo != null)
|
||||
|
|
|
@ -105,34 +105,34 @@ namespace arookas
|
|||
}
|
||||
|
||||
// builtins
|
||||
public sunBuiltinInfo DeclareBuiltin(sunBuiltinDeclaration node)
|
||||
public sunBuiltinSymbol DeclareBuiltin(sunBuiltinDeclaration node)
|
||||
{
|
||||
var symbolInfo = SymbolTable.Callables.FirstOrDefault(f => f.Name == node.Builtin.Value);
|
||||
if (symbolInfo != null)
|
||||
{
|
||||
throw new sunRedeclaredBuiltinException(node);
|
||||
}
|
||||
var builtinInfo = new sunBuiltinInfo(node.Builtin.Value, node.Parameters.ParameterInfo, SymbolTable.Count);
|
||||
var builtinInfo = new sunBuiltinSymbol(node.Builtin.Value, node.Parameters.ParameterInfo, SymbolTable.Count);
|
||||
SymbolTable.Add(builtinInfo);
|
||||
return builtinInfo;
|
||||
}
|
||||
public sunBuiltinInfo DeclareSystemBuiltin(string name, bool variadic, params string[] parameters)
|
||||
public sunBuiltinSymbol DeclareSystemBuiltin(string name, bool variadic, params string[] parameters)
|
||||
{
|
||||
var builtinInfo = SymbolTable.Builtins.FirstOrDefault(f => f.Name == name);
|
||||
if (builtinInfo == null)
|
||||
{
|
||||
builtinInfo = new sunBuiltinInfo(name, new sunParameterInfo(parameters, variadic), SymbolTable.Count);
|
||||
builtinInfo = new sunBuiltinSymbol(name, new sunParameterInfo(parameters, variadic), SymbolTable.Count);
|
||||
SymbolTable.Add(builtinInfo);
|
||||
}
|
||||
return builtinInfo;
|
||||
}
|
||||
public sunBuiltinInfo ResolveSystemBuiltin(string name)
|
||||
public sunBuiltinSymbol ResolveSystemBuiltin(string name)
|
||||
{
|
||||
return SymbolTable.Builtins.FirstOrDefault(f => f.Name == name);
|
||||
}
|
||||
|
||||
// functions
|
||||
public sunFunctionInfo DefineFunction(sunFunctionDefinition node)
|
||||
public sunFunctionSymbol DefineFunction(sunFunctionDefinition node)
|
||||
{
|
||||
if (node.Parameters.IsVariadic)
|
||||
{
|
||||
|
@ -143,11 +143,11 @@ namespace arookas
|
|||
{
|
||||
throw new sunRedefinedFunctionException(node);
|
||||
}
|
||||
var functionInfo = new sunFunctionInfo(node.Function.Value, node.Parameters.ParameterInfo, node.Body);
|
||||
var functionInfo = new sunFunctionSymbol(node.Function.Value, node.Parameters.ParameterInfo, node.Body);
|
||||
SymbolTable.Add(functionInfo);
|
||||
return functionInfo;
|
||||
}
|
||||
public sunCallableSymbolInfo ResolveCallable(sunFunctionCall node)
|
||||
public sunCallableSymbol ResolveCallable(sunFunctionCall node)
|
||||
{
|
||||
var symbolInfo = SymbolTable.Callables.FirstOrDefault(f => f.Name == node.Function.Value);
|
||||
if (symbolInfo == null)
|
||||
|
@ -158,7 +158,7 @@ namespace arookas
|
|||
}
|
||||
|
||||
// variables
|
||||
public sunVariableInfo DeclareVariable(sunIdentifier node)
|
||||
public sunVariableSymbol DeclareVariable(sunIdentifier node)
|
||||
{
|
||||
// assert variable is not already declared in current scope
|
||||
if (Scopes.Top.GetIsVariableDeclared(node.Value))
|
||||
|
@ -166,14 +166,9 @@ namespace arookas
|
|||
throw new sunRedeclaredVariableException(node);
|
||||
}
|
||||
var variableInfo = Scopes.DeclareVariable(node.Value);
|
||||
if (Scopes.Top.Type == sunScopeType.Script)
|
||||
{
|
||||
// script variables are added to the symbol table
|
||||
SymbolTable.Add(variableInfo);
|
||||
}
|
||||
return variableInfo;
|
||||
}
|
||||
public sunVariableInfo ResolveVariable(sunIdentifier node)
|
||||
public sunVariableSymbol ResolveVariable(sunIdentifier node)
|
||||
{
|
||||
// walk the stack backwards to resolve to the variable's latest declaration
|
||||
for (int i = Scopes.Count - 1; i >= 0; --i)
|
||||
|
@ -187,7 +182,7 @@ namespace arookas
|
|||
throw new sunUndeclaredVariableException(node);
|
||||
}
|
||||
|
||||
public sunVariableInfo DeclareParameter(string name) { return Scopes.DeclareVariable(name); }
|
||||
public sunVariableSymbol DeclareParameter(string name) { return Scopes.DeclareVariable(name); }
|
||||
|
||||
// constants
|
||||
public sunConstInfo DeclareConstant(sunIdentifier node, sunExpression expression)
|
||||
|
@ -201,7 +196,7 @@ namespace arookas
|
|||
}
|
||||
public sunConstInfo ResolveConstant(sunIdentifier node)
|
||||
{
|
||||
// walk the stack backwards to resolve to the variable's latest declaration
|
||||
// walk the stack backwards to resolve to the constant's latest declaration
|
||||
for (int i = Scopes.Count - 1; i >= 0; --i)
|
||||
{
|
||||
var constInfo = Scopes[i].ResolveConstant(node.Value);
|
||||
|
@ -213,7 +208,7 @@ namespace arookas
|
|||
throw new sunUndeclaredVariableException(node);
|
||||
}
|
||||
|
||||
public void ResolveVariableOrConstant(sunIdentifier node, out sunVariableInfo variableInfo, out sunConstInfo constInfo)
|
||||
public void ResolveVariableOrConstant(sunIdentifier node, out sunVariableSymbol variableInfo, out sunConstInfo constInfo)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
|
@ -201,7 +201,7 @@ namespace arookas
|
|||
}
|
||||
class sunArgumentCountException : sunNodeException<sunFunctionCall>
|
||||
{
|
||||
public sunCallableSymbolInfo CalledSymbol { get; private set; }
|
||||
public sunCallableSymbol CalledSymbol { get; private set; }
|
||||
public int ArgumentMinimum { get { return CalledSymbol.Parameters.Minimum; } }
|
||||
public int ArgumentCount { get { return Node.Arguments.Count; } }
|
||||
|
||||
|
@ -227,7 +227,7 @@ namespace arookas
|
|||
}
|
||||
}
|
||||
|
||||
public sunArgumentCountException(sunFunctionCall node, sunCallableSymbolInfo calledSymbol)
|
||||
public sunArgumentCountException(sunFunctionCall node, sunCallableSymbol calledSymbol)
|
||||
: base(node)
|
||||
{
|
||||
if (calledSymbol == null)
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace arookas
|
|||
Push(sunScopeType.Script); // add global scope
|
||||
}
|
||||
|
||||
public sunVariableInfo DeclareVariable(string name)
|
||||
public sunVariableSymbol DeclareVariable(string name)
|
||||
{
|
||||
switch (Top.Type)
|
||||
{
|
||||
|
@ -48,7 +48,7 @@ namespace arookas
|
|||
}
|
||||
return null;
|
||||
}
|
||||
sunVariableInfo DeclareGlobal(string name)
|
||||
sunVariableSymbol DeclareGlobal(string name)
|
||||
{
|
||||
var variableInfo = Top.DeclareVariable(name, 0, GlobalCount);
|
||||
if (variableInfo == null)
|
||||
|
@ -57,7 +57,7 @@ namespace arookas
|
|||
}
|
||||
return variableInfo;
|
||||
}
|
||||
sunVariableInfo DeclareLocal(string name)
|
||||
sunVariableSymbol DeclareLocal(string name)
|
||||
{
|
||||
var variableInfo = Top.DeclareVariable(name, 1, LocalCount);
|
||||
if (variableInfo == null)
|
||||
|
@ -73,7 +73,7 @@ namespace arookas
|
|||
|
||||
class sunScope
|
||||
{
|
||||
List<sunVariableInfo> variables = new List<sunVariableInfo>(10);
|
||||
List<sunVariableSymbol> variables = new List<sunVariableSymbol>(10);
|
||||
List<sunConstInfo> constants = new List<sunConstInfo>(10);
|
||||
public sunScopeType Type { get; private set; }
|
||||
|
||||
|
@ -86,17 +86,17 @@ namespace arookas
|
|||
public int ConstantCount { get { return constants.Count; } }
|
||||
|
||||
public bool GetIsVariableDeclared(string name) { return variables.Any(v => v.Name == name); }
|
||||
public sunVariableInfo DeclareVariable(string name, int display, int index)
|
||||
public sunVariableSymbol DeclareVariable(string name, int display, int index)
|
||||
{
|
||||
if (GetIsVariableDeclared(name) || GetIsConstantDeclared(name))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var variableInfo = new sunVariableInfo(name, display, index);
|
||||
var variableInfo = new sunVariableSymbol(name, display, index);
|
||||
variables.Add(variableInfo);
|
||||
return variableInfo;
|
||||
}
|
||||
public sunVariableInfo ResolveVariable(string name) { return variables.FirstOrDefault(v => v.Name == name); }
|
||||
public sunVariableSymbol ResolveVariable(string name) { return variables.FirstOrDefault(v => v.Name == name); }
|
||||
|
||||
public bool GetIsConstantDeclared(string name) { return constants.Any(c => c.Name == name); }
|
||||
public sunConstInfo DeclareConstant(string name, sunExpression expression)
|
||||
|
|
|
@ -7,21 +7,21 @@ using System.Linq;
|
|||
|
||||
namespace arookas
|
||||
{
|
||||
class sunSymbolTable : IEnumerable<sunSymbolInfo>
|
||||
class sunSymbolTable : IEnumerable<sunSymbol>
|
||||
{
|
||||
List<sunSymbolInfo> symbols = new List<sunSymbolInfo>(10);
|
||||
List<sunSymbol> symbols = new List<sunSymbol>(10);
|
||||
|
||||
public int Count { get { return symbols.Count; } }
|
||||
public int BuiltinCount { get { return symbols.Count(sym => sym.Type == sunSymbolType.Builtin); } }
|
||||
public int FunctionCount { get { return symbols.Count(sym => sym.Type == sunSymbolType.Function); } }
|
||||
public int VariableCount { get { return symbols.Count(sym => sym.Type == sunSymbolType.Variable); } }
|
||||
|
||||
public IEnumerable<sunCallableSymbolInfo> Callables { get { return symbols.OfType<sunCallableSymbolInfo>(); } }
|
||||
public IEnumerable<sunBuiltinInfo> Builtins { get { return symbols.Where(sym => sym.Type == sunSymbolType.Builtin).Cast<sunBuiltinInfo>(); } }
|
||||
public IEnumerable<sunFunctionInfo> Functions { get { return symbols.Where(sym => sym.Type == sunSymbolType.Function).Cast<sunFunctionInfo>(); } }
|
||||
public IEnumerable<sunVariableInfo> Variables { get { return symbols.Where(sym => sym.Type == sunSymbolType.Variable).Cast<sunVariableInfo>(); } }
|
||||
public IEnumerable<sunCallableSymbol> Callables { get { return symbols.OfType<sunCallableSymbol>(); } }
|
||||
public IEnumerable<sunBuiltinSymbol> Builtins { get { return symbols.Where(sym => sym.Type == sunSymbolType.Builtin).Cast<sunBuiltinSymbol>(); } }
|
||||
public IEnumerable<sunFunctionSymbol> Functions { get { return symbols.Where(sym => sym.Type == sunSymbolType.Function).Cast<sunFunctionSymbol>(); } }
|
||||
public IEnumerable<sunVariableSymbol> Variables { get { return symbols.Where(sym => sym.Type == sunSymbolType.Variable).Cast<sunVariableSymbol>(); } }
|
||||
|
||||
public void Add(sunSymbolInfo symbol) { symbols.Add(symbol); }
|
||||
public void Add(sunSymbol symbol) { symbols.Add(symbol); }
|
||||
public void Clear() { symbols.Clear(); }
|
||||
|
||||
public void Write(aBinaryWriter writer)
|
||||
|
@ -45,11 +45,11 @@ namespace arookas
|
|||
}
|
||||
}
|
||||
|
||||
public IEnumerator<sunSymbolInfo> GetEnumerator() { return symbols.GetEnumerator(); }
|
||||
public IEnumerator<sunSymbol> GetEnumerator() { return symbols.GetEnumerator(); }
|
||||
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
|
||||
}
|
||||
|
||||
abstract class sunSymbolInfo
|
||||
abstract class sunSymbol
|
||||
{
|
||||
public string Name { get; private set; }
|
||||
|
||||
|
@ -57,20 +57,20 @@ namespace arookas
|
|||
public abstract sunSymbolType Type { get; }
|
||||
public abstract uint Data { get; }
|
||||
|
||||
protected sunSymbolInfo(string name)
|
||||
protected sunSymbol(string name)
|
||||
{
|
||||
Name = name;
|
||||
}
|
||||
}
|
||||
|
||||
abstract class sunCallableSymbolInfo : sunSymbolInfo
|
||||
abstract class sunCallableSymbol : sunSymbol
|
||||
{
|
||||
public sunParameterInfo Parameters { get; private set; }
|
||||
protected List<sunPoint> CallSites { get; private set; }
|
||||
|
||||
public bool HasCallSites { get { return CallSites.Count > 0; } }
|
||||
|
||||
protected sunCallableSymbolInfo(string name, sunParameterInfo parameterInfo)
|
||||
protected sunCallableSymbol(string name, sunParameterInfo parameterInfo)
|
||||
: base(name)
|
||||
{
|
||||
Parameters = parameterInfo;
|
||||
|
@ -83,7 +83,7 @@ namespace arookas
|
|||
public abstract void Compile(sunContext context);
|
||||
}
|
||||
|
||||
class sunBuiltinInfo : sunCallableSymbolInfo
|
||||
class sunBuiltinSymbol : sunCallableSymbol
|
||||
{
|
||||
public int Index { get; private set; }
|
||||
|
||||
|
@ -91,7 +91,7 @@ namespace arookas
|
|||
public override sunSymbolType Type { get { return sunSymbolType.Builtin; } }
|
||||
public override uint Data { get { return (uint)Index; } }
|
||||
|
||||
public sunBuiltinInfo(string name, sunParameterInfo parameters, int index)
|
||||
public sunBuiltinSymbol(string name, sunParameterInfo parameters, int index)
|
||||
: base(name, parameters)
|
||||
{
|
||||
Index = index;
|
||||
|
@ -111,7 +111,7 @@ namespace arookas
|
|||
}
|
||||
}
|
||||
|
||||
class sunFunctionInfo : sunCallableSymbolInfo
|
||||
class sunFunctionSymbol : sunCallableSymbol
|
||||
{
|
||||
sunNode Body { get; set; }
|
||||
public uint Offset { get; private set; }
|
||||
|
@ -120,7 +120,7 @@ namespace arookas
|
|||
public override sunSymbolType Type { get { return sunSymbolType.Function; } }
|
||||
public override uint Data { get { return (uint)Offset; } }
|
||||
|
||||
public sunFunctionInfo(string name, sunParameterInfo parameters, sunNode body)
|
||||
public sunFunctionSymbol(string name, sunParameterInfo parameters, sunNode body)
|
||||
: base(name, parameters)
|
||||
{
|
||||
Body = body;
|
||||
|
@ -213,7 +213,7 @@ namespace arookas
|
|||
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
|
||||
}
|
||||
|
||||
class sunVariableInfo : sunSymbolInfo
|
||||
class sunVariableSymbol : sunSymbol
|
||||
{
|
||||
public int Display { get; private set; }
|
||||
public int Index { get; private set; }
|
||||
|
@ -222,7 +222,7 @@ namespace arookas
|
|||
public override sunSymbolType Type { get { return sunSymbolType.Variable; } }
|
||||
public override uint Data { get { return (uint)Index; } }
|
||||
|
||||
public sunVariableInfo(string name, int display, int index)
|
||||
public sunVariableSymbol(string name, int display, int index)
|
||||
: base(name)
|
||||
{
|
||||
Display = display;
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace arookas
|
|||
writer.Write8(0x03);
|
||||
writer.WriteS32(value);
|
||||
}
|
||||
public void PushVariable(sunVariableInfo variableInfo)
|
||||
public void PushVariable(sunVariableSymbol variableInfo)
|
||||
{
|
||||
PushVariable(variableInfo.Display, variableInfo.Index);
|
||||
}
|
||||
|
@ -67,11 +67,11 @@ namespace arookas
|
|||
writer.Write8(0x05);
|
||||
}
|
||||
|
||||
public void IncVariable(sunVariableInfo variableInfo)
|
||||
public void IncVariable(sunVariableSymbol variableInfo)
|
||||
{
|
||||
IncVariable(variableInfo.Display, variableInfo.Index);
|
||||
}
|
||||
public void DecVariable(sunVariableInfo variableInfo)
|
||||
public void DecVariable(sunVariableSymbol variableInfo)
|
||||
{
|
||||
DecVariable(variableInfo.Display, variableInfo.Index);
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ namespace arookas
|
|||
public void Div() { writer.Write8(0x0B); }
|
||||
public void Mod() { writer.Write8(0x0C); }
|
||||
|
||||
public void StoreVariable(sunVariableInfo variableInfo)
|
||||
public void StoreVariable(sunVariableSymbol variableInfo)
|
||||
{
|
||||
StoreVariable(variableInfo.Display, variableInfo.Index);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue