public void PreEmitExpImpl(
     MidForExp exp,
     Span span)
 {
     PreEmitExp(exp.Seq, span);
     PreEmitExp(exp.Body, span);
 }
        private EmitValHLSL EmitExpImpl(MidForExp exp, Span span)
        {
            var seq = EmitExp(exp.Seq, span);

            var counterType = new ScalarTypeHLSL("int");
            var counterName = _shared.GenerateName("ii");
            var counter = counterType.CreateVal(counterName);

            _varVals[exp.Var] = counter;
            span.WriteLine("for(int {0} = ({1}).lower; ({0}) < ({1}).upper; ++({0}))", counterName, seq);
            span.WriteLine("{");
            var ignored = EmitExp(exp.Body, span.IndentSpan());
            span.WriteLine("}");
            return VoidVal;
        }
 private void TransformChildrenImpl(
     MidForExp exp)
 {
     exp.Seq = Transform(exp.Seq);
     exp.Body = Transform(exp.Body);
 }