/// <include file='Doc/Nodes.xml' path='doc/method[@name="Emit"]/*'/> internal override PhpTypeCode Emit(CodeGenerator /*!*/ codeGenerator) { Statistics.AST.AddNode("FieldUse.Static"); ChainBuilder chain = codeGenerator.ChainBuilder; PhpTypeCode result = PhpTypeCode.Invalid; switch (codeGenerator.SelectAccess(access)) { case AccessType.Read: result = EmitRead(codeGenerator, false); if (chain.IsMember) { chain.Lengthen(); } break; case AccessType.ReadUnknown: result = EmitRead(codeGenerator, true); if (chain.IsMember) { chain.Lengthen(); } break; case AccessType.ReadRef: if (chain.IsMember) { chain.Lengthen(); result = EmitRead(codeGenerator, false); } else { result = EmitRead(codeGenerator, true); } break; case AccessType.Write: if (chain.IsMember) { result = EmitEnsure(codeGenerator, chain); chain.Lengthen(); } else { assignmentCallback = EmitWrite(codeGenerator, false); result = PhpTypeCode.Unknown; } break; case AccessType.WriteRef: if (chain.IsMember) { result = EmitEnsure(codeGenerator, chain); chain.Lengthen(); } else { assignmentCallback = EmitWrite(codeGenerator, true); result = PhpTypeCode.Unknown; } break; case AccessType.None: result = PhpTypeCode.Void; break; } return(result); }
/// <include file='Doc/Nodes.xml' path='doc/method[@name="Emit"]/*'/> internal override PhpTypeCode Emit(CodeGenerator/*!*/ codeGenerator) { Statistics.AST.AddNode("FieldUse.Static"); ChainBuilder chain = codeGenerator.ChainBuilder; PhpTypeCode result = PhpTypeCode.Invalid; switch (codeGenerator.SelectAccess(access)) { case AccessType.Read: result = EmitRead(codeGenerator, false); if (chain.IsMember) chain.Lengthen(); break; case AccessType.ReadUnknown: result = EmitRead(codeGenerator, true); if (chain.IsMember) chain.Lengthen(); break; case AccessType.ReadRef: if (chain.IsMember) { chain.Lengthen(); result = EmitRead(codeGenerator, false); } else { result = EmitRead(codeGenerator, true); } break; case AccessType.Write: if (chain.IsMember) { result = EmitEnsure(codeGenerator, chain); chain.Lengthen(); } else { assignmentCallback = EmitWrite(codeGenerator, false); result = PhpTypeCode.Unknown; } break; case AccessType.WriteRef: if (chain.IsMember) { result = EmitEnsure(codeGenerator, chain); chain.Lengthen(); } else { assignmentCallback = EmitWrite(codeGenerator, true); result = PhpTypeCode.Unknown; } break; case AccessType.None: result = PhpTypeCode.Void; break; } return result; }