예제 #1
0
파일: Method.cs 프로젝트: knuxbbs/gapi
        public void GenerateBody(GenerationInfo generationInfo, ClassBase implementor, string indent)
        {
            var streamWriter = generationInfo.Writer;

            streamWriter.WriteLine(" {");

            if (!IsStatic)
            {
                implementor?.Prepare(streamWriter, $"{indent}\t\t\t");
            }

            if (IsAccessor)
            {
                Body.InitAccessor(streamWriter, Signature, indent);
            }

            Body.Initialize(generationInfo, IsGetter, IsSetter, indent);

            streamWriter.Write($"{indent}\t\t\t");

            if (_returnValue.IsVoid)
            {
                streamWriter.WriteLine($"{CName}{_call};");
            }
            else
            {
                streamWriter.WriteLine($"{_returnValue.MarshalType} raw_ret = {CName}{_call};");
                streamWriter.WriteLine(
                    $"{indent}\t\t\t{_returnValue.CsType} ret = {_returnValue.FromNative("raw_ret")};");
            }

            if (!IsStatic)
            {
                implementor?.Finish(streamWriter, $"{indent}\t\t\t");
            }

            Body.Finish(streamWriter, indent);
            Body.HandleException(streamWriter, indent);

            if (IsGetter && Parameters.Count > 0)
            {
                streamWriter.WriteLine($"{indent}\t\t\treturn {Parameters.AccessorName};");
            }
            else if (!_returnValue.IsVoid)
            {
                streamWriter.WriteLine($"{indent}\t\t\treturn ret;");
            }
            else if (IsAccessor)
            {
                Body.FinishAccessor(streamWriter, Signature, indent);
            }

            streamWriter.Write($"{indent}\t\t}}");
        }