96 lines
2.1 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|