Pchp.CodeAnalysis.CodeGen.InstanceCacheHolder.EmitName C# (CSharp) Method

EmitName() private method

Emits name as string, uses cached variable.
private EmitName ( CodeGenerator cg, BoundExpression name ) : void
cg CodeGenerator
name Pchp.CodeAnalysis.Semantics.BoundExpression
return void
        void EmitName(CodeGenerator cg, BoundExpression name)
        {
            Contract.ThrowIfNull(cg);
            Contract.ThrowIfNull(name);

            if (_name_loc != null)
            {
                cg.Builder.EmitLocalLoad(_name_loc);
            }
            else
            {
                _cg = cg;

                // return (<loc> = <name>)
                _name_loc = cg.GetTemporaryLocal(cg.CoreTypes.String);
                cg.EmitConvert(name, cg.CoreTypes.String);
                cg.Builder.EmitOpCode(ILOpCode.Dup);
                cg.Builder.EmitLocalStore(_name_loc);
            }
        }
    }

Same methods

InstanceCacheHolder::EmitName ( InstanceCacheHolder holderOrNull, CodeGenerator cg, BoundExpression name ) : void

Usage Example

Exemplo n.º 1
0
        /// <summary>
        /// Emits name as string. Caches the result if holder is provided, or loads evaluated name if holder was initialized already.
        /// </summary>
        public static void EmitName(InstanceCacheHolder holderOrNull, CodeGenerator cg, BoundExpression name)
        {
            Contract.ThrowIfNull(cg);
            Contract.ThrowIfNull(name);

            if (holderOrNull != null)
            {
                holderOrNull.EmitName(cg, name);
            }
            else
            {
                cg.EmitConvert(name, cg.CoreTypes.String);
            }
        }