Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1013)

Side by Side Diff: ppapi/generators/idl_gen_wrapper.py

Issue 17153012: Pepper: Don't emit structs with no wrapping. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Base class for generating wrapper functions for PPAPI methods. 5 """Base class for generating wrapper functions for PPAPI methods.
6 """ 6 """
7 7
8 from datetime import datetime 8 from datetime import datetime
9 import os 9 import os
10 import sys 10 import sys
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 while (*next != NULL) { 150 while (*next != NULL) {
151 if (mystrcmp(name, (*next)->iface_macro) == 0) return *next; 151 if (mystrcmp(name, (*next)->iface_macro) == 0) return *next;
152 ++next; 152 ++next;
153 } 153 }
154 return NULL; 154 return NULL;
155 } 155 }
156 156
157 const void *__%(wrapper_prefix)s_PPBGetInterface(const char *name) { 157 const void *__%(wrapper_prefix)s_PPBGetInterface(const char *name) {
158 struct %(wrapper_struct)s *wrapper = %(wrapper_prefix)sPPBShimIface(name); 158 struct %(wrapper_struct)s *wrapper = %(wrapper_prefix)sPPBShimIface(name);
159 if (wrapper == NULL) { 159 if (wrapper == NULL) {
160 /* We don't have an IDL for this, for some reason. Take our chances. */ 160 /* We did not generate a wrapper for this, so return the real interface. */
161 return (*__real_PPBGetInterface)(name); 161 return (*__real_PPBGetInterface)(name);
162 } 162 }
163 163
164 /* Initialize the real_iface if it hasn't been. The wrapper depends on it. */ 164 /* Initialize the real_iface if it hasn't been. The wrapper depends on it. */
165 if (wrapper->real_iface == NULL) { 165 if (wrapper->real_iface == NULL) {
166 const void *iface = (*__real_PPBGetInterface)(name); 166 const void *iface = (*__real_PPBGetInterface)(name);
167 if (NULL == iface) return NULL; 167 if (NULL == iface) return NULL;
168 wrapper->real_iface = iface; 168 wrapper->real_iface = iface;
169 } 169 }
170 170
171 if (wrapper->wrapped_iface) { 171 if (wrapper->wrapped_iface) {
172 return wrapper->wrapped_iface; 172 return wrapper->wrapped_iface;
173 } else { 173 } else {
174 return wrapper->real_iface; 174 return wrapper->real_iface;
175 } 175 }
176 } 176 }
177 177
178 const void *__%(wrapper_prefix)s_PPPGetInterface(const char *name) { 178 const void *__%(wrapper_prefix)s_PPPGetInterface(const char *name) {
179 struct %(wrapper_struct)s *wrapper = %(wrapper_prefix)sPPPShimIface(name); 179 struct %(wrapper_struct)s *wrapper = %(wrapper_prefix)sPPPShimIface(name);
180 if (wrapper == NULL) { 180 if (wrapper == NULL) {
181 /* We don't have an IDL for this, for some reason. Take our chances. */ 181 /* We did not generate a wrapper for this, so return the real interface. */
182 return (*__real_PPPGetInterface)(name); 182 return (*__real_PPPGetInterface)(name);
183 } 183 }
184 184
185 /* Initialize the real_iface if it hasn't been. The wrapper depends on it. */ 185 /* Initialize the real_iface if it hasn't been. The wrapper depends on it. */
186 if (wrapper->real_iface == NULL) { 186 if (wrapper->real_iface == NULL) {
187 const void *iface = (*__real_PPPGetInterface)(name); 187 const void *iface = (*__real_PPPGetInterface)(name);
188 if (NULL == iface) return NULL; 188 if (NULL == iface) return NULL;
189 wrapper->real_iface = iface; 189 wrapper->real_iface = iface;
190 } 190 }
191 191
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 def GetWrapperInfoName(self, iface): 357 def GetWrapperInfoName(self, iface):
358 return '%s_WrapperInfo_%s' % (self.wrapper_prefix, iface.struct_name) 358 return '%s_WrapperInfo_%s' % (self.wrapper_prefix, iface.struct_name)
359 359
360 360
361 def GenerateWrapperInfoAndCollection(self, iface_releases, out): 361 def GenerateWrapperInfoAndCollection(self, iface_releases, out):
362 for iface in iface_releases: 362 for iface in iface_releases:
363 iface_macro = self.cgen.GetInterfaceMacro(iface.node, iface.version) 363 iface_macro = self.cgen.GetInterfaceMacro(iface.node, iface.version)
364 if iface.needs_wrapping: 364 if iface.needs_wrapping:
365 wrap_iface = '(void *) &%s_Wrappers_%s' % (self.wrapper_prefix, 365 wrap_iface = '(void *) &%s_Wrappers_%s' % (self.wrapper_prefix,
366 iface.struct_name) 366 iface.struct_name)
367 else: 367 out.Write("""static struct %s %s = {
368 wrap_iface = 'NULL /* Still need slot for real_iface */'
369 out.Write("""static struct %s %s = {
370 .iface_macro = %s, 368 .iface_macro = %s,
371 .wrapped_iface = %s, 369 .wrapped_iface = %s,
372 .real_iface = NULL 370 .real_iface = NULL
373 };\n\n""" % (self.GetWrapperMetadataName(), 371 };\n\n""" % (self.GetWrapperMetadataName(),
374 self.GetWrapperInfoName(iface), 372 self.GetWrapperInfoName(iface),
375 iface_macro, 373 iface_macro,
376 wrap_iface)) 374 wrap_iface))
377 375
378 # Now generate NULL terminated arrays of the above wrapper infos. 376 # Now generate NULL terminated arrays of the above wrapper infos.
379 ppb_wrapper_infos = [] 377 ppb_wrapper_infos = []
380 ppp_wrapper_infos = [] 378 ppp_wrapper_infos = []
381 for iface in iface_releases: 379 for iface in iface_releases:
382 appender = PPKind.ChoosePPFunc(iface, 380 if iface.needs_wrapping:
383 ppb_wrapper_infos.append, 381 appender = PPKind.ChoosePPFunc(iface,
384 ppp_wrapper_infos.append) 382 ppb_wrapper_infos.append,
385 appender(' &%s' % self.GetWrapperInfoName(iface)) 383 ppp_wrapper_infos.append)
384 appender(' &%s' % self.GetWrapperInfoName(iface))
386 ppb_wrapper_infos.append(' NULL') 385 ppb_wrapper_infos.append(' NULL')
387 ppp_wrapper_infos.append(' NULL') 386 ppp_wrapper_infos.append(' NULL')
388 out.Write( 387 out.Write(
389 'static struct %s *s_ppb_wrappers[] = {\n%s\n};\n\n' % 388 'static struct %s *s_ppb_wrappers[] = {\n%s\n};\n\n' %
390 (self.GetWrapperMetadataName(), ',\n'.join(ppb_wrapper_infos))) 389 (self.GetWrapperMetadataName(), ',\n'.join(ppb_wrapper_infos)))
391 out.Write( 390 out.Write(
392 'static struct %s *s_ppp_wrappers[] = {\n%s\n};\n\n' % 391 'static struct %s *s_ppp_wrappers[] = {\n%s\n};\n\n' %
393 (self.GetWrapperMetadataName(), ',\n'.join(ppp_wrapper_infos))) 392 (self.GetWrapperMetadataName(), ',\n'.join(ppp_wrapper_infos)))
394 393
395 394
396 def DeclareWrapperInfos(self, iface_releases, out): 395 def DeclareWrapperInfos(self, iface_releases, out):
397 """The wrapper methods usually need access to the real_iface, so we must 396 """The wrapper methods usually need access to the real_iface, so we must
398 declare these wrapper infos ahead of time (there is a circular dependency). 397 declare these wrapper infos ahead of time (there is a circular dependency).
399 """ 398 """
400 out.Write('/* BEGIN Declarations for all Wrapper Infos */\n\n') 399 out.Write('/* BEGIN Declarations for all Wrapper Infos */\n\n')
401 for iface in iface_releases: 400 for iface in iface_releases:
402 out.Write('static struct %s %s;\n' % 401 if iface.needs_wrapping:
403 (self.GetWrapperMetadataName(), self.GetWrapperInfoName(iface))) 402 out.Write('static struct %s %s;\n' %
403 (self.GetWrapperMetadataName(),
404 self.GetWrapperInfoName(iface)))
404 out.Write('/* END Declarations for all Wrapper Infos. */\n\n') 405 out.Write('/* END Declarations for all Wrapper Infos. */\n\n')
405 406
406 407
407 def GenerateRange(self, ast, releases, options): 408 def GenerateRange(self, ast, releases, options):
408 """Generate shim code for a range of releases. 409 """Generate shim code for a range of releases.
409 """ 410 """
410 411
411 # Remember to set the output filename before running this. 412 # Remember to set the output filename before running this.
412 out_filename = self.output_file 413 out_filename = self.output_file
413 if out_filename is None: 414 if out_filename is None:
(...skipping 25 matching lines...) Expand all
439 self.GenerateWrapperInterfaces(iface_releases, out) 440 self.GenerateWrapperInterfaces(iface_releases, out)
440 441
441 # Generate a table of the wrapped interface structs that can be looked up. 442 # Generate a table of the wrapped interface structs that can be looked up.
442 self.GenerateWrapperInfoAndCollection(iface_releases, out) 443 self.GenerateWrapperInfoAndCollection(iface_releases, out)
443 444
444 # Write out the IDL-invariant functions. 445 # Write out the IDL-invariant functions.
445 self.GenerateFixedFunctions(out) 446 self.GenerateFixedFunctions(out)
446 447
447 out.Close() 448 out.Close()
448 return 0 449 return 0
OLDNEW
« no previous file with comments | « no previous file | ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698