ssc/ast/nodes.variables.cs
2015-12-06 23:15:02 -05:00

96 lines
2.1 KiB
C#

namespace arookas
{
class sunVariableReference : sunNode
{
public sunIdentifier Variable { get { return this[0] as sunIdentifier; } }
public sunVariableReference(sunSourceLocation location)
: base(location)
{
}
public override void Compile(sunContext context)
{
sunVariableInfo variableInfo;
sunConstInfo constInfo;
context.ResolveVariableOrConstant(Variable, out variableInfo, out constInfo);
if (variableInfo != null)
{
context.Text.PushVariable(variableInfo);
}
if (constInfo != null)
{
constInfo.Expression.Compile(context);
}
}
}
class sunVariableDeclaration : sunNode
{
public sunIdentifier Variable { get { return this[0] as sunIdentifier; } }
public sunVariableDeclaration(sunSourceLocation location)
: base(location)
{
}
public override void Compile(sunContext context)
{
var variableInfo = context.DeclareVariable(Variable);
context.Text.DeclareLocal(1);
}
}
class sunVariableDefinition : sunVariableAssignment
{
public sunVariableDefinition(sunSourceLocation location)
: base(location)
{
}
public override void Compile(sunContext context)
{
var variableInfo = context.DeclareVariable(Variable);
context.Text.DeclareLocal(1);
base.Compile(context);
}
}
class sunVariableAssignment : sunVariableDeclaration
{
public sunAssign Operator { get { return this[1] as sunAssign; } }
public sunExpression Expression { get { return this[2] as sunExpression; } }
public sunVariableAssignment(sunSourceLocation location)
: base(location)
{
}
public override void Compile(sunContext context)
{
var variableInfo = context.ResolveVariable(Variable);
Operator.Compile(context, variableInfo, Expression);
}
}
class sunConstDefinition : sunNode
{
public sunIdentifier Constant { get { return this[0] as sunIdentifier; } }
public sunExpression Expression { get { return this[2] as sunExpression; } }
public sunConstDefinition(sunSourceLocation location)
: base(location)
{
}
public override void Compile(sunContext context)
{
var constInfo = context.DeclareConstant(Constant, Expression);
}
}
}