Spark.Emit.HLSL.EmitContextHLSL.EmitExpImpl C# (CSharp) Method

EmitExpImpl() private method

private EmitExpImpl ( MidLabelExp exp, Span span ) : EmitValHLSL
exp Spark.Mid.MidLabelExp
span Span
return EmitValHLSL
        private EmitValHLSL EmitExpImpl(MidLabelExp exp, Span span)
        {
            if (_labels.ContainsKey(exp.Label))
            {
                return EmitExp(exp.Body, span);
            }

            // Try to resolve this label with
            // loop nesting...

            var resultType = EmitType(exp.Type);
            var resultVar = resultType.CreateVal("__block_result");
            DeclareLocal(resultVar, span);

            Label newLabel = new BreakLabel(
                exp.Label,
                this,
                resultVar);

            _nestedLabels.Push(newLabel);
            try
            {
                span.WriteLine("do {");

                var innerSpan = span.IndentSpan();

                var bodyVal = EmitExp(exp.Body, innerSpan);
                if (bodyVal != null)
                {
                    Assign(resultVar, bodyVal, innerSpan);
                }

                span.WriteLine("} while(false);");
            }
            finally
            {
                _nestedLabels.Pop();
            }
            return resultVar;
        }

Same methods

EmitContextHLSL::EmitExpImpl ( MidAssignExp exp, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidAttributeFetch fetch, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidBreakExp exp, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidBuiltinApp app, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidElementCtorApp val, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidFieldRef fieldRef, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidForExp exp, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidIfExp exp, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidLetExp let, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidMethodApp app, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidSwitchExp exp, Span span ) : EmitValHLSL
EmitContextHLSL::EmitExpImpl ( MidVal val, Span span ) : EmitValHLSL