public IEnumerable <Operation> VisitExpression(Expression expression) { return(expression switch { BinaryExpression binaryExpression => VisitBinaryExpression(binaryExpression), MagicExpression magicExpression => VisitMagicExpression(magicExpression), NameExpression nameExpression => VisitNameExpression(nameExpression), UnaryExpression unaryExpression => VisitUnaryExpression(unaryExpression), GetFieldExpression getFieldExpression => VisitGetFieldExpression(getFieldExpression), _ => throw new ArgumentOutOfRangeException(nameof(expression) + $"was {expression}"), });
public string VisitMagicExpression(MagicExpression magicExpression) => $"{magicExpression.Name}";
public IEnumerable <Operation> VisitMagicExpression(MagicExpression magicExpression) => new[] { Operation.Mov(NewRegister(8), new NameOperand(magicExpression.Name)) };