private CodegenMethod GetCodegen( CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope) { return codegenMethodScope.MakeChild(typeof(object), GetType(), codegenClassScope) .AddParam(typeof(GenericRecord), "record") .Block .DeclareVar<GenericRecord>( "inner", CodegenExpressionBuilder.Cast( typeof(GenericRecord), CodegenExpressionBuilder.StaticMethod( typeof(GenericRecordExtensions), "Get", CodegenExpressionBuilder.Ref("record"), CodegenExpressionBuilder.Constant(_fieldTop)))) .MethodReturn( CodegenExpressionBuilder.Conditional( CodegenExpressionBuilder.EqualsNull(CodegenExpressionBuilder.Ref("inner")), CodegenExpressionBuilder.ConstantNull(), _getter.UnderlyingGetCodegen( CodegenExpressionBuilder.Ref("inner"), codegenMethodScope, codegenClassScope))); }
private CodegenMethod GetCodegen( CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope) { return codegenMethodScope.MakeChild(typeof(object), GetType(), codegenClassScope) .AddParam(typeof(GenericRecord), "record") .Block .DeclareVar<GenericRecord>( "inner", StaticMethod( GetType(), "GetAtIndex", Ref("record"), Constant(_posTop.Name), Constant(_index))) .IfRefNullReturnNull("inner") .MethodReturn( _nested.UnderlyingGetCodegen( Ref("inner"), codegenMethodScope, codegenClassScope)); }