OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """code generator for GLES2 command buffers.""" | 6 """code generator for GLES2 command buffers.""" |
7 | 7 |
8 import itertools | 8 import itertools |
9 import os | 9 import os |
10 import os.path | 10 import os.path |
(...skipping 1999 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2010 'decoder_func': 'DoGetVertexAttribiv', | 2010 'decoder_func': 'DoGetVertexAttribiv', |
2011 'expectation': False, | 2011 'expectation': False, |
2012 'client_test': False, | 2012 'client_test': False, |
2013 }, | 2013 }, |
2014 'GetVertexAttribPointerv': { | 2014 'GetVertexAttribPointerv': { |
2015 'type': 'Custom', | 2015 'type': 'Custom', |
2016 'data_transfer_methods': ['shm'], | 2016 'data_transfer_methods': ['shm'], |
2017 'result': ['SizedResult<GLuint>'], | 2017 'result': ['SizedResult<GLuint>'], |
2018 'client_test': False, | 2018 'client_test': False, |
2019 }, | 2019 }, |
2020 'InvalidateFramebuffer': { | |
2021 'type': 'PUTn', | |
2022 'count': 1, | |
2023 'client_test': False, | |
2024 'unit_test': False, | |
2025 'unsafe': True, | |
2026 }, | |
2027 'InvalidateSubFramebuffer': { | |
2028 'type': 'PUTn', | |
2029 'count': 1, | |
2030 'client_test': False, | |
2031 'unit_test': False, | |
2032 'unsafe': True, | |
2033 }, | |
2020 'IsBuffer': { | 2034 'IsBuffer': { |
2021 'type': 'Is', | 2035 'type': 'Is', |
2022 'decoder_func': 'DoIsBuffer', | 2036 'decoder_func': 'DoIsBuffer', |
2023 'expectation': False, | 2037 'expectation': False, |
2024 }, | 2038 }, |
2025 'IsEnabled': { | 2039 'IsEnabled': { |
2026 'type': 'Is', | 2040 'type': 'Is', |
2027 'decoder_func': 'DoIsEnabled', | 2041 'decoder_func': 'DoIsEnabled', |
2028 'impl_func': False, | 2042 'impl_func': False, |
2029 'expectation': False, | 2043 'expectation': False, |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2126 }, | 2140 }, |
2127 'RenderbufferStorageMultisampleEXT': { | 2141 'RenderbufferStorageMultisampleEXT': { |
2128 'cmd_comment': | 2142 'cmd_comment': |
2129 '// GL_EXT_multisampled_render_to_texture\n', | 2143 '// GL_EXT_multisampled_render_to_texture\n', |
2130 'decoder_func': 'DoRenderbufferStorageMultisampleEXT', | 2144 'decoder_func': 'DoRenderbufferStorageMultisampleEXT', |
2131 'gl_test_func': 'glRenderbufferStorageMultisampleEXT', | 2145 'gl_test_func': 'glRenderbufferStorageMultisampleEXT', |
2132 'expectation': False, | 2146 'expectation': False, |
2133 'unit_test': False, | 2147 'unit_test': False, |
2134 'extension_flag': 'multisampled_render_to_texture', | 2148 'extension_flag': 'multisampled_render_to_texture', |
2135 }, | 2149 }, |
2150 'ReadBuffer': { | |
2151 'unsafe': True, | |
2152 }, | |
2136 'ReadPixels': { | 2153 'ReadPixels': { |
2137 'cmd_comment': | 2154 'cmd_comment': |
2138 '// ReadPixels has the result separated from the pixel buffer so that\n' | 2155 '// ReadPixels has the result separated from the pixel buffer so that\n' |
2139 '// it is easier to specify the result going to some specific place\n' | 2156 '// it is easier to specify the result going to some specific place\n' |
2140 '// that exactly fits the rectangle of pixels.\n', | 2157 '// that exactly fits the rectangle of pixels.\n', |
2141 'type': 'Custom', | 2158 'type': 'Custom', |
2142 'data_transfer_methods': ['shm'], | 2159 'data_transfer_methods': ['shm'], |
2143 'impl_func': False, | 2160 'impl_func': False, |
2144 'client_test': False, | 2161 'client_test': False, |
2145 'cmd_args': | 2162 'cmd_args': |
(...skipping 996 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3142 func.WriteHandlerImplementation(file) | 3159 func.WriteHandlerImplementation(file) |
3143 file.Write(" return error::kNoError;\n") | 3160 file.Write(" return error::kNoError;\n") |
3144 file.Write("}\n") | 3161 file.Write("}\n") |
3145 file.Write("\n") | 3162 file.Write("\n") |
3146 | 3163 |
3147 def WriteImmediateServiceImplementation(self, func, file): | 3164 def WriteImmediateServiceImplementation(self, func, file): |
3148 """Writes the service implementation for an immediate version of command.""" | 3165 """Writes the service implementation for an immediate version of command.""" |
3149 self.WriteServiceHandlerFunctionHeader(func, file) | 3166 self.WriteServiceHandlerFunctionHeader(func, file) |
3150 self.WriteHandlerExtensionCheck(func, file) | 3167 self.WriteHandlerExtensionCheck(func, file) |
3151 self.WriteHandlerDeferReadWrite(func, file); | 3168 self.WriteHandlerDeferReadWrite(func, file); |
3152 last_arg = func.GetLastOriginalArg() | 3169 for arg in func.GetOriginalArgs(): |
3153 all_but_last_arg = func.GetOriginalArgs()[:-1] | 3170 if arg.IsPointer(): |
3154 for arg in all_but_last_arg: | 3171 self.WriteGetDataSizeCode(func, file) |
3155 arg.WriteGetCode(file) | 3172 arg.WriteGetCode(file) |
3156 self.WriteGetDataSizeCode(func, file) | |
3157 last_arg.WriteGetCode(file) | |
3158 func.WriteHandlerValidation(file) | 3173 func.WriteHandlerValidation(file) |
3159 func.WriteHandlerImplementation(file) | 3174 func.WriteHandlerImplementation(file) |
3160 file.Write(" return error::kNoError;\n") | 3175 file.Write(" return error::kNoError;\n") |
3161 file.Write("}\n") | 3176 file.Write("}\n") |
3162 file.Write("\n") | 3177 file.Write("\n") |
3163 | 3178 |
3164 def WriteBucketServiceImplementation(self, func, file): | 3179 def WriteBucketServiceImplementation(self, func, file): |
3165 """Writes the service implementation for a bucket version of command.""" | 3180 """Writes the service implementation for a bucket version of command.""" |
3166 self.WriteServiceHandlerFunctionHeader(func, file) | 3181 self.WriteServiceHandlerFunctionHeader(func, file) |
3167 self.WriteHandlerExtensionCheck(func, file) | 3182 self.WriteHandlerExtensionCheck(func, file) |
(...skipping 2402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5570 cmds::%(name)sImmediate cmd; | 5585 cmds::%(name)sImmediate cmd; |
5571 %(type)s data[%(count_param)d][%(count)d]; | 5586 %(type)s data[%(count_param)d][%(count)d]; |
5572 }; | 5587 }; |
5573 | 5588 |
5574 Cmds expected; | 5589 Cmds expected; |
5575 for (int ii = 0; ii < %(count_param)d; ++ii) { | 5590 for (int ii = 0; ii < %(count_param)d; ++ii) { |
5576 for (int jj = 0; jj < %(count)d; ++jj) { | 5591 for (int jj = 0; jj < %(count)d; ++jj) { |
5577 data[ii][jj] = static_cast<%(type)s>(ii * %(count)d + jj); | 5592 data[ii][jj] = static_cast<%(type)s>(ii * %(count)d + jj); |
5578 } | 5593 } |
5579 } | 5594 } |
5580 expected.cmd.Init(%(cmd_args)s, &data[0][0]); | 5595 expected.cmd.Init(%(cmd_args)s); |
5581 gl_->%(name)s(%(args)s, &data[0][0]); | 5596 gl_->%(name)s(%(args)s); |
5582 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 5597 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
5583 } | 5598 } |
5584 """ | 5599 """ |
5585 cmd_arg_strings = [ | 5600 cmd_arg_strings = [] |
5586 arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs()[0:-2] | 5601 for arg in func.GetCmdArgs(): |
5587 ] | 5602 if arg.name.endswith("_shm_id"): |
5603 cmd_arg_strings.append("&data[0][0]") | |
5604 elif arg.name.endswith("_shm_offset"): | |
5605 continue | |
5606 else: | |
5607 cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func)) | |
5588 gl_arg_strings = [] | 5608 gl_arg_strings = [] |
5589 count_param = 0 | 5609 count_param = 0 |
5590 for arg in func.GetOriginalArgs()[0:-1]: | 5610 for arg in func.GetOriginalArgs(): |
5591 valid_value = arg.GetValidClientSideArg(func) | 5611 if arg.IsPointer(): |
5612 valid_value = "&data[0][0]" | |
Ken Russell (switch to Gerrit)
2014/12/04 01:42:56
These changes seem really over-specialized, and sc
| |
5613 else: | |
5614 valid_value = arg.GetValidClientSideArg(func) | |
5592 gl_arg_strings.append(valid_value) | 5615 gl_arg_strings.append(valid_value) |
5593 if arg.name == "count": | 5616 if arg.name == "count": |
5594 count_param = int(valid_value) | 5617 count_param = int(valid_value) |
5595 file.Write(code % { | 5618 file.Write(code % { |
5596 'name': func.name, | 5619 'name': func.name, |
5597 'type': self.GetArrayType(func), | 5620 'type': self.GetArrayType(func), |
5598 'count': self.GetArrayCount(func), | 5621 'count': self.GetArrayCount(func), |
5599 'args': ", ".join(gl_arg_strings), | 5622 'args': ", ".join(gl_arg_strings), |
5600 'cmd_args': ", ".join(cmd_arg_strings), | 5623 'cmd_args': ", ".join(cmd_arg_strings), |
5601 'count_param': count_param, | 5624 'count_param': count_param, |
5602 }) | 5625 }) |
5603 | 5626 |
5604 # Test constants for invalid values, as they are not tested by the | 5627 # Test constants for invalid values, as they are not tested by the |
5605 # service. | 5628 # service. |
5606 constants = [ | 5629 constants = [ |
5607 arg for arg in func.GetOriginalArgs()[0:-1] if arg.IsConstant() | 5630 arg for arg in func.GetOriginalArgs()[0:-1] if arg.IsConstant() |
5608 ] | 5631 ] |
5609 if not constants: | 5632 if not constants: |
5610 return | 5633 return |
5611 | 5634 |
5612 code = """ | 5635 code = """ |
5613 TEST_F(GLES2ImplementationTest, %(name)sInvalidConstantArg%(invalid_index)d) { | 5636 TEST_F(GLES2ImplementationTest, %(name)sInvalidConstantArg%(invalid_index)d) { |
5614 %(type)s data[%(count_param)d][%(count)d] = {{0}}; | 5637 %(type)s data[%(count_param)d][%(count)d] = {{0}}; |
5615 for (int ii = 0; ii < %(count_param)d; ++ii) { | 5638 for (int ii = 0; ii < %(count_param)d; ++ii) { |
5616 for (int jj = 0; jj < %(count)d; ++jj) { | 5639 for (int jj = 0; jj < %(count)d; ++jj) { |
5617 data[ii][jj] = static_cast<%(type)s>(ii * %(count)d + jj); | 5640 data[ii][jj] = static_cast<%(type)s>(ii * %(count)d + jj); |
5618 } | 5641 } |
5619 } | 5642 } |
5620 gl_->%(name)s(%(args)s, &data[0][0]); | 5643 gl_->%(name)s(%(args)s); |
5621 EXPECT_TRUE(NoCommandsWritten()); | 5644 EXPECT_TRUE(NoCommandsWritten()); |
5622 EXPECT_EQ(%(gl_error)s, CheckError()); | 5645 EXPECT_EQ(%(gl_error)s, CheckError()); |
5623 } | 5646 } |
5624 """ | 5647 """ |
5625 for invalid_arg in constants: | 5648 for invalid_arg in constants: |
5626 gl_arg_strings = [] | 5649 gl_arg_strings = [] |
5627 invalid = invalid_arg.GetInvalidArg(func) | 5650 invalid = invalid_arg.GetInvalidArg(func) |
5628 for arg in func.GetOriginalArgs()[0:-1]: | 5651 for arg in func.GetOriginalArgs(): |
5629 if arg is invalid_arg: | 5652 if arg is invalid_arg: |
5630 gl_arg_strings.append(invalid[0]) | 5653 gl_arg_strings.append(invalid[0]) |
5654 elif arg.IsPointer(): | |
5655 gl_arg_strings.append("&data[0][0]") | |
5631 else: | 5656 else: |
5632 valid_value = arg.GetValidClientSideArg(func) | 5657 valid_value = arg.GetValidClientSideArg(func) |
5633 gl_arg_strings.append(valid_value) | 5658 gl_arg_strings.append(valid_value) |
5634 if arg.name == "count": | 5659 if arg.name == "count": |
5635 count_param = int(valid_value) | 5660 count_param = int(valid_value) |
5636 | 5661 |
5637 file.Write(code % { | 5662 file.Write(code % { |
5638 'name': func.name, | 5663 'name': func.name, |
5639 'invalid_index': func.GetOriginalArgs().index(invalid_arg), | 5664 'invalid_index': func.GetOriginalArgs().index(invalid_arg), |
5640 'type': self.GetArrayType(func), | 5665 'type': self.GetArrayType(func), |
(...skipping 22 matching lines...) Expand all Loading... | |
5663 def WriteImmediateCmdSetHeader(self, func, file): | 5688 def WriteImmediateCmdSetHeader(self, func, file): |
5664 """Overrriden from TypeHandler.""" | 5689 """Overrriden from TypeHandler.""" |
5665 file.Write(" void SetHeader(GLsizei count) {\n") | 5690 file.Write(" void SetHeader(GLsizei count) {\n") |
5666 file.Write( | 5691 file.Write( |
5667 " header.SetCmdByTotalSize<ValueType>(ComputeSize(count));\n") | 5692 " header.SetCmdByTotalSize<ValueType>(ComputeSize(count));\n") |
5668 file.Write(" }\n") | 5693 file.Write(" }\n") |
5669 file.Write("\n") | 5694 file.Write("\n") |
5670 | 5695 |
5671 def WriteImmediateCmdInit(self, func, file): | 5696 def WriteImmediateCmdInit(self, func, file): |
5672 """Overrriden from TypeHandler.""" | 5697 """Overrriden from TypeHandler.""" |
5673 last_arg = func.GetLastOriginalArg() | 5698 file.Write(" void Init(%s) {\n" % |
5674 file.Write(" void Init(%s, %s _%s) {\n" % | 5699 func.MakeTypedInitString("_")) |
5675 (func.MakeTypedCmdArgString("_"), | |
5676 last_arg.type, last_arg.name)) | |
5677 file.Write(" SetHeader(_count);\n") | 5700 file.Write(" SetHeader(_count);\n") |
5678 args = func.GetCmdArgs() | 5701 args = func.GetCmdArgs() |
5679 for arg in args: | 5702 for arg in args: |
5680 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) | 5703 file.Write(" %s = _%s;\n" % (arg.name, arg.name)) |
5681 file.Write(" memcpy(ImmediateDataAddress(this),\n") | 5704 file.Write(" memcpy(ImmediateDataAddress(this),\n") |
5682 file.Write(" _%s, ComputeDataSize(_count));\n" % last_arg.name) | 5705 pointer_arg = None |
5706 for arg in func.GetOriginalArgs(): | |
5707 if arg.IsPointer(): | |
5708 pointer_arg = arg | |
5709 break | |
5710 file.Write(" _%s, ComputeDataSize(_count));\n" % pointer_arg.name) | |
5683 file.Write(" }\n") | 5711 file.Write(" }\n") |
5684 file.Write("\n") | 5712 file.Write("\n") |
5685 | 5713 |
5686 def WriteImmediateCmdSet(self, func, file): | 5714 def WriteImmediateCmdSet(self, func, file): |
5687 """Overrriden from TypeHandler.""" | 5715 """Overrriden from TypeHandler.""" |
5688 last_arg = func.GetLastOriginalArg() | 5716 file.Write(" void* Set(void* cmd%s) {\n" % |
5689 copy_args = func.MakeCmdArgString("_", False) | 5717 func.MakeTypedInitString("_", True)) |
5690 file.Write(" void* Set(void* cmd%s, %s _%s) {\n" % | 5718 file.Write(" static_cast<ValueType*>(cmd)->Init(%s);\n" % |
5691 (func.MakeTypedCmdArgString("_", True), | 5719 func.MakeInitString("_")) |
5692 last_arg.type, last_arg.name)) | |
5693 file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" % | |
5694 (copy_args, last_arg.name)) | |
5695 file.Write(" const uint32_t size = ComputeSize(_count);\n") | 5720 file.Write(" const uint32_t size = ComputeSize(_count);\n") |
5696 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" | 5721 file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>(" |
5697 "cmd, size);\n") | 5722 "cmd, size);\n") |
5698 file.Write(" }\n") | 5723 file.Write(" }\n") |
5699 file.Write("\n") | 5724 file.Write("\n") |
5700 | 5725 |
5701 def WriteImmediateCmdHelper(self, func, file): | 5726 def WriteImmediateCmdHelper(self, func, file): |
5702 """Overrriden from TypeHandler.""" | 5727 """Overrriden from TypeHandler.""" |
5703 code = """ void %(name)s(%(typed_args)s) { | 5728 code = """ void %(name)s(%(typed_args)s) { |
5704 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(count); | 5729 const uint32_t size = gles2::cmds::%(name)s::ComputeSize(count); |
5705 gles2::cmds::%(name)s* c = | 5730 gles2::cmds::%(name)s* c = |
5706 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); | 5731 GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size); |
5707 if (c) { | 5732 if (c) { |
5708 c->Init(%(args)s); | 5733 c->Init(%(args)s); |
5709 } | 5734 } |
5710 } | 5735 } |
5711 | 5736 |
5712 """ | 5737 """ |
5713 file.Write(code % { | 5738 file.Write(code % { |
5714 "name": func.name, | 5739 "name": func.name, |
5715 "typed_args": func.MakeTypedInitString(""), | 5740 "typed_args": func.MakeTypedInitString(""), |
5716 "args": func.MakeInitString("") | 5741 "args": func.MakeInitString("") |
5717 }) | 5742 }) |
5718 | 5743 |
5719 def WriteImmediateFormatTest(self, func, file): | 5744 def WriteImmediateFormatTest(self, func, file): |
5720 """Overrriden from TypeHandler.""" | 5745 """Overrriden from TypeHandler.""" |
5721 args = func.GetCmdArgs() | 5746 args = func.GetOriginalArgs() |
5722 count_param = 0 | 5747 count_param = 0 |
5723 for arg in args: | 5748 for arg in args: |
5724 if arg.name == "count": | 5749 if arg.name == "count": |
5725 count_param = int(arg.GetValidClientSideCmdArg(func)) | 5750 count_param = int(arg.GetValidClientSideCmdArg(func)) |
5726 file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) | 5751 file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) |
5727 file.Write(" const int kSomeBaseValueToTestWith = 51;\n") | 5752 file.Write(" const int kSomeBaseValueToTestWith = 51;\n") |
5728 file.Write(" static %s data[] = {\n" % self.GetArrayType(func)) | 5753 file.Write(" static %s data[] = {\n" % self.GetArrayType(func)) |
5729 for v in range(0, self.GetArrayCount(func) * count_param): | 5754 for v in range(0, self.GetArrayCount(func) * count_param): |
5730 file.Write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" % | 5755 file.Write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" % |
5731 (self.GetArrayType(func), v)) | 5756 (self.GetArrayType(func), v)) |
5732 file.Write(" };\n") | 5757 file.Write(" };\n") |
5733 file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % | 5758 file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % |
5734 (func.name, func.name)) | 5759 (func.name, func.name)) |
5735 file.Write(" const GLsizei kNumElements = %d;\n" % count_param) | 5760 file.Write(" const GLsizei kNumElements = %d;\n" % count_param) |
5736 file.Write(" const size_t kExpectedCmdSize =\n") | 5761 file.Write(" const size_t kExpectedCmdSize =\n") |
5737 file.Write(" sizeof(cmd) + kNumElements * sizeof(%s) * %d;\n" % | 5762 file.Write(" sizeof(cmd) + kNumElements * sizeof(%s) * %d;\n" % |
5738 (self.GetArrayType(func), self.GetArrayCount(func))) | 5763 (self.GetArrayType(func), self.GetArrayCount(func))) |
5739 file.Write(" void* next_cmd = cmd.Set(\n") | 5764 file.Write(" void* next_cmd = cmd.Set(\n") |
5740 file.Write(" &cmd") | 5765 file.Write(" &cmd") |
5741 for value, arg in enumerate(args): | 5766 for value, arg in enumerate(args): |
5742 file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 1)) | 5767 if arg.IsPointer(): |
5743 file.Write(",\n data);\n") | 5768 file.Write(",\n data") |
5769 elif arg.type == "GLboolean": | |
5770 continue | |
5771 else: | |
5772 file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 1)) | |
5773 file.Write(");\n") | |
5744 file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % | 5774 file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" % |
5745 func.name) | 5775 func.name) |
5746 file.Write(" cmd.header.command);\n") | 5776 file.Write(" cmd.header.command);\n") |
5747 file.Write(" EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);\n") | 5777 file.Write(" EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);\n") |
5748 for value, arg in enumerate(args): | 5778 for value, arg in enumerate(args): |
5779 if arg.IsPointer() or arg.type == "GLboolean": | |
5780 continue | |
5749 file.Write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % | 5781 file.Write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % |
5750 (arg.type, value + 1, arg.name)) | 5782 (arg.type, value + 1, arg.name)) |
5751 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") | 5783 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") |
5752 file.Write(" next_cmd, sizeof(cmd) +\n") | 5784 file.Write(" next_cmd, sizeof(cmd) +\n") |
5753 file.Write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") | 5785 file.Write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") |
5754 file.Write(" // TODO(gman): Check that data was inserted;\n") | 5786 file.Write(" // TODO(gman): Check that data was inserted;\n") |
5755 file.Write("}\n") | 5787 file.Write("}\n") |
5756 file.Write("\n") | 5788 file.Write("\n") |
5757 | 5789 |
5758 | 5790 |
(...skipping 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6988 self.args_for_cmds = self.original_args[:] | 7020 self.args_for_cmds = self.original_args[:] |
6989 | 7021 |
6990 self.return_type = info['return_type'] | 7022 self.return_type = info['return_type'] |
6991 if self.return_type != 'void': | 7023 if self.return_type != 'void': |
6992 self.return_arg = CreateArg(info['return_type'] + " result") | 7024 self.return_arg = CreateArg(info['return_type'] + " result") |
6993 else: | 7025 else: |
6994 self.return_arg = None | 7026 self.return_arg = None |
6995 | 7027 |
6996 self.num_pointer_args = sum( | 7028 self.num_pointer_args = sum( |
6997 [1 for arg in self.args_for_cmds if arg.IsPointer()]) | 7029 [1 for arg in self.args_for_cmds if arg.IsPointer()]) |
7030 if self.num_pointer_args > 0: | |
7031 for arg in reversed(self.original_args): | |
7032 if arg.IsPointer(): | |
7033 self.last_original_pointer_arg = arg | |
7034 break | |
7035 else: | |
7036 self.last_original_pointer_arg = None | |
6998 self.info = info | 7037 self.info = info |
6999 self.type_handler = self.type_handlers[info['type']] | 7038 self.type_handler = self.type_handlers[info['type']] |
7000 self.can_auto_generate = (self.num_pointer_args == 0 and | 7039 self.can_auto_generate = (self.num_pointer_args == 0 and |
7001 info['return_type'] == "void") | 7040 info['return_type'] == "void") |
7002 self.InitFunction() | 7041 self.InitFunction() |
7003 | 7042 |
7004 def ParseArgs(self, arg_string): | 7043 def ParseArgs(self, arg_string): |
7005 """Parses a function arg string.""" | 7044 """Parses a function arg string.""" |
7006 args = [] | 7045 args = [] |
7007 parts = arg_string.split(',') | 7046 parts = arg_string.split(',') |
(...skipping 1885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8893 Format(gen.generated_cpp_filenames) | 8932 Format(gen.generated_cpp_filenames) |
8894 | 8933 |
8895 if gen.errors > 0: | 8934 if gen.errors > 0: |
8896 print "%d errors" % gen.errors | 8935 print "%d errors" % gen.errors |
8897 return 1 | 8936 return 1 |
8898 return 0 | 8937 return 0 |
8899 | 8938 |
8900 | 8939 |
8901 if __name__ == '__main__': | 8940 if __name__ == '__main__': |
8902 sys.exit(main(sys.argv[1:])) | 8941 sys.exit(main(sys.argv[1:])) |
OLD | NEW |