public void VisitExp(ExpStatement e)
{
var ass = e.Expression as AssignExp;
if (ass != null)
{
var idDst = ass.Dst as Identifier;
if (idDst != null)
EnsureLocalVariable(idDst.Name, new CodeTypeReference(typeof(object)), false);
var dstTuple = ass.Dst as ExpList;
if (dstTuple != null)
{
var srcTuple = ass.Src as ExpList;
if (srcTuple != null)
{
EmitTupleToTupleAssignment(dstTuple.Expressions, srcTuple.Expressions);
}
else
{
var rhsTuple = ass.Src.Accept(xlat);
EmitTupleAssignment(dstTuple.Expressions, rhsTuple);
}
return;
}
var rhs = ass.Src.Accept(xlat);
var lhs = ass.Dst.Accept(xlat);
if (gen.CurrentMethod != null)
{
if (ass.op == Op.Assign)
{
gen.Assign(lhs, rhs);
}
else
{
gen.SideEffect(e.Expression.Accept(xlat));
}
}
else
{
var id = ass.Dst as Identifier;
if (id != null)
{
ClassTranslator_GenerateField(id, xlat, ass);
}
else
{
EnsureClassConstructor().Statements.Add(
new CodeAssignStatement(lhs, rhs));
}
}
return;
}
if (gen.CurrentMethod != null)
{
var ex = e.Expression.Accept(xlat);
gen.SideEffect(ex);
}
else
{
var ex = e.Expression.Accept(xlat);
EnsureClassConstructor().Statements.Add(
new CodeExpressionStatement( e.Expression.Accept(xlat)));
}
}