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

Side by Side Diff: tools/json_schema_compiler/cc_generator.py

Issue 10834004: Correct const accessors in base/values.(h|cc) (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: One more, Windows-only Created 8 years, 5 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
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 from code import Code 5 from code import Code
6 from model import PropertyType 6 from model import PropertyType
7 import any_helper 7 import any_helper
8 import cpp_util 8 import cpp_util
9 import model 9 import model
10 import schema_util 10 import schema_util
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 return c 206 return c
207 207
208 def _GenerateTypePopulateProperty(self, prop, src, dst): 208 def _GenerateTypePopulateProperty(self, prop, src, dst):
209 """Generate the code to populate a single property in a type. 209 """Generate the code to populate a single property in a type.
210 210
211 src: base::DictionaryValue* 211 src: base::DictionaryValue*
212 dst: Type* 212 dst: Type*
213 """ 213 """
214 c = Code() 214 c = Code()
215 value_var = prop.unix_name + '_value' 215 value_var = prop.unix_name + '_value'
216 c.Append('base::Value* %(value_var)s = NULL;') 216 c.Append('const base::Value* %(value_var)s = NULL;')
217 if prop.optional: 217 if prop.optional:
218 (c.Sblock( 218 (c.Sblock(
219 'if (%(src)s->GetWithoutPathExpansion("%(key)s", &%(value_var)s)) {' 219 'if (%(src)s->GetWithoutPathExpansion("%(key)s", &%(value_var)s)) {'
220 ) 220 )
221 .Concat(self._GeneratePopulatePropertyFromValue( 221 .Concat(self._GeneratePopulatePropertyFromValue(
222 prop, value_var, dst, 'false')) 222 prop, value_var, dst, 'false'))
223 .Eblock('}') 223 .Eblock('}')
224 ) 224 )
225 else: 225 else:
226 (c.Append( 226 (c.Append(
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 else: 446 else:
447 (c.Append('if (!%s)' % 447 (c.Append('if (!%s)' %
448 cpp_util.GetAsFundamentalValue( 448 cpp_util.GetAsFundamentalValue(
449 self._cpp_type_generator.GetReferencedProperty(prop), 449 self._cpp_type_generator.GetReferencedProperty(prop),
450 value_var, 450 value_var,
451 '&%s->%s' % (dst, prop.unix_name))) 451 '&%s->%s' % (dst, prop.unix_name)))
452 .Append(' return %(failure_value)s;') 452 .Append(' return %(failure_value)s;')
453 ) 453 )
454 elif self._IsObjectOrObjectRef(prop): 454 elif self._IsObjectOrObjectRef(prop):
455 if prop.optional: 455 if prop.optional:
456 (c.Append('base::DictionaryValue* dictionary = NULL;') 456 (c.Append('const base::DictionaryValue* dictionary = NULL;')
457 .Append('if (!%(value_var)s->GetAsDictionary(&dictionary))') 457 .Append('if (!%(value_var)s->GetAsDictionary(&dictionary))')
458 .Append(' return %(failure_value)s;') 458 .Append(' return %(failure_value)s;')
459 .Append('scoped_ptr<%(ctype)s> temp(new %(ctype)s());') 459 .Append('scoped_ptr<%(ctype)s> temp(new %(ctype)s());')
460 .Append('if (!%(ctype)s::Populate(*dictionary, temp.get()))') 460 .Append('if (!%(ctype)s::Populate(*dictionary, temp.get()))')
461 .Append(' return %(failure_value)s;') 461 .Append(' return %(failure_value)s;')
462 .Append('%(dst)s->%(name)s = temp.Pass();') 462 .Append('%(dst)s->%(name)s = temp.Pass();')
463 ) 463 )
464 else: 464 else:
465 (c.Append('base::DictionaryValue* dictionary = NULL;') 465 (c.Append('const base::DictionaryValue* dictionary = NULL;')
466 .Append('if (!%(value_var)s->GetAsDictionary(&dictionary))') 466 .Append('if (!%(value_var)s->GetAsDictionary(&dictionary))')
467 .Append(' return %(failure_value)s;') 467 .Append(' return %(failure_value)s;')
468 .Append( 468 .Append(
469 'if (!%(ctype)s::Populate(*dictionary, &%(dst)s->%(name)s))') 469 'if (!%(ctype)s::Populate(*dictionary, &%(dst)s->%(name)s))')
470 .Append(' return %(failure_value)s;') 470 .Append(' return %(failure_value)s;')
471 ) 471 )
472 elif prop.type_ == PropertyType.ANY: 472 elif prop.type_ == PropertyType.ANY:
473 if prop.optional: 473 if prop.optional:
474 c.Append('%(dst)s->%(name)s.reset(new ' + any_helper.ANY_CLASS + '());') 474 c.Append('%(dst)s->%(name)s.reset(new ' + any_helper.ANY_CLASS + '());')
475 c.Append(self._any_helper.Init(prop, value_var, dst) + ';') 475 c.Append(self._any_helper.Init(prop, value_var, dst) + ';')
476 elif self._IsArrayOrArrayRef(prop): 476 elif self._IsArrayOrArrayRef(prop):
477 # util_cc_helper deals with optional and required arrays 477 # util_cc_helper deals with optional and required arrays
478 (c.Append('base::ListValue* list = NULL;') 478 (c.Append('const base::ListValue* list = NULL;')
479 .Append('if (!%(value_var)s->GetAsList(&list))') 479 .Append('if (!%(value_var)s->GetAsList(&list))')
480 .Append(' return %(failure_value)s;')) 480 .Append(' return %(failure_value)s;'))
481 if prop.item_type.type_ == PropertyType.ENUM: 481 if prop.item_type.type_ == PropertyType.ENUM:
482 self._GenerateListValueToEnumArrayConversion(c, prop) 482 self._GenerateListValueToEnumArrayConversion(c, prop)
483 else: 483 else:
484 (c.Append('if (!%s)' % self._util_cc_helper.PopulateArrayFromList( 484 (c.Append('if (!%s)' % self._util_cc_helper.PopulateArrayFromList(
485 self._cpp_type_generator.GetReferencedProperty(prop), 'list', 485 self._cpp_type_generator.GetReferencedProperty(prop), 'list',
486 dst + '->' + prop.unix_name, prop.optional)) 486 dst + '->' + prop.unix_name, prop.optional))
487 .Append(' return %(failure_value)s;') 487 .Append(' return %(failure_value)s;')
488 ) 488 )
(...skipping 17 matching lines...) Expand all
506 ) 506 )
507 c.Eblock('}') 507 c.Eblock('}')
508 elif prop.type_ == PropertyType.ENUM: 508 elif prop.type_ == PropertyType.ENUM:
509 c.Sblock('{') 509 c.Sblock('{')
510 self._GenerateStringToEnumConversion(c, prop, value_var, 'enum_temp') 510 self._GenerateStringToEnumConversion(c, prop, value_var, 'enum_temp')
511 c.Append('%(dst)s->%(name)s = enum_temp;') 511 c.Append('%(dst)s->%(name)s = enum_temp;')
512 c.Eblock('}') 512 c.Eblock('}')
513 elif prop.type_ == PropertyType.BINARY: 513 elif prop.type_ == PropertyType.BINARY:
514 (c.Append('if (!%(value_var)s->IsType(%(value_type)s))') 514 (c.Append('if (!%(value_var)s->IsType(%(value_type)s))')
515 .Append(' return %(failure_value)s;') 515 .Append(' return %(failure_value)s;')
516 .Append('base::BinaryValue* binary_value =') 516 .Append('const base::BinaryValue* binary_value =')
517 .Append(' static_cast<base::BinaryValue*>(%(value_var)s);') 517 .Append(' static_cast<const base::BinaryValue*>(%(value_var)s);')
518 ) 518 )
519 if prop.optional: 519 if prop.optional:
520 (c.Append('%(dst)s->%(name)s.reset(') 520 (c.Append('%(dst)s->%(name)s.reset(')
521 .Append(' new std::string(binary_value->GetBuffer(),') 521 .Append(' new std::string(binary_value->GetBuffer(),')
522 .Append(' binary_value->GetSize()));') 522 .Append(' binary_value->GetSize()));')
523 ) 523 )
524 else: 524 else:
525 (c.Append('%(dst)s->%(name)s.assign(binary_value->GetBuffer(),') 525 (c.Append('%(dst)s->%(name)s.assign(binary_value->GetBuffer(),')
526 .Append(' binary_value->GetSize());') 526 .Append(' binary_value->GetSize());')
527 ) 527 )
(...skipping 19 matching lines...) Expand all
547 Leaves dst, name, and failure_value unsubstituted. 547 Leaves dst, name, and failure_value unsubstituted.
548 548
549 c: the Code object that is being appended to. 549 c: the Code object that is being appended to.
550 prop: the property that the code is populating. 550 prop: the property that the code is populating.
551 """ 551 """
552 accessor = '.' 552 accessor = '.'
553 if prop.optional: 553 if prop.optional:
554 c.Append('%(dst)s->%(name)s.reset(new std::vector<' + ( 554 c.Append('%(dst)s->%(name)s.reset(new std::vector<' + (
555 self._cpp_type_generator.GetType(prop.item_type) + '>);')) 555 self._cpp_type_generator.GetType(prop.item_type) + '>);'))
556 accessor = '->' 556 accessor = '->'
557 c.Sblock('for (ListValue::iterator it = list->begin(); ' 557 c.Sblock('for (ListValue::const_iterator it = list->begin(); '
558 'it != list->end(); ++it) {') 558 'it != list->end(); ++it) {')
559 self._GenerateStringToEnumConversion(c, prop.item_type, 559 self._GenerateStringToEnumConversion(c, prop.item_type,
560 '(*it)', 'enum_temp') 560 '(*it)', 'enum_temp')
561 c.Append('%(dst)s->%(name)s' + accessor + 'push_back(enum_temp);') 561 c.Append('%(dst)s->%(name)s' + accessor + 'push_back(enum_temp);')
562 c.Eblock('}') 562 c.Eblock('}')
563 563
564 def _GenerateStringToEnumConversion(self, c, prop, value_var, enum_temp): 564 def _GenerateStringToEnumConversion(self, c, prop, value_var, enum_temp):
565 """Appends code that converts a string to an enum. 565 """Appends code that converts a string to an enum.
566 Leaves failure_value unsubstituded. 566 Leaves failure_value unsubstituded.
567 567
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 """ 751 """
752 return (self._cpp_type_generator.GetReferencedProperty(prop).type_ == 752 return (self._cpp_type_generator.GetReferencedProperty(prop).type_ ==
753 PropertyType.ARRAY) 753 PropertyType.ARRAY)
754 754
755 def _IsFundamentalOrFundamentalRef(self, prop): 755 def _IsFundamentalOrFundamentalRef(self, prop):
756 """Determines if this property is a Fundamental type or is a ref to a 756 """Determines if this property is a Fundamental type or is a ref to a
757 Fundamental type. 757 Fundamental type.
758 """ 758 """
759 return (self._cpp_type_generator.GetReferencedProperty(prop).type_. 759 return (self._cpp_type_generator.GetReferencedProperty(prop).type_.
760 is_fundamental) 760 is_fundamental)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698