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

Side by Side Diff: third_party/protobuf/ruby/ext/google/protobuf_c/message.c

Issue 1983203003: Update third_party/protobuf to protobuf-v3.0.0-beta-3 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: owners Created 4 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
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2014 Google Inc. All rights reserved. 2 // Copyright 2014 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 name = RSTRING_PTR(method_str); 144 name = RSTRING_PTR(method_str);
145 name_len = RSTRING_LEN(method_str); 145 name_len = RSTRING_LEN(method_str);
146 setter = false; 146 setter = false;
147 147
148 // Setters have names that end in '='. 148 // Setters have names that end in '='.
149 if (name[name_len - 1] == '=') { 149 if (name[name_len - 1] == '=') {
150 setter = true; 150 setter = true;
151 name_len--; 151 name_len--;
152 } 152 }
153 153
154 // Check for a oneof name first. 154 // See if this name corresponds to either a oneof or field in this message.
155 o = upb_msgdef_ntoo(self->descriptor->msgdef, 155 if (!upb_msgdef_lookupname(self->descriptor->msgdef, name, name_len, &f,
156 name, name_len); 156 &o)) {
157 return rb_call_super(argc, argv);
158 }
159
157 if (o != NULL) { 160 if (o != NULL) {
161 // This is a oneof -- return which field inside the oneof is set.
158 if (setter) { 162 if (setter) {
159 rb_raise(rb_eRuntimeError, "Oneof accessors are read-only."); 163 rb_raise(rb_eRuntimeError, "Oneof accessors are read-only.");
160 } 164 }
161 return which_oneof_field(self, o); 165 return which_oneof_field(self, o);
162 } 166 } else {
163 167 // This is a field -- get or set the field's value.
164 // Otherwise, check for a field with that name. 168 assert(f);
165 f = upb_msgdef_ntof(self->descriptor->msgdef, 169 if (setter) {
166 name, name_len); 170 if (argc < 2) {
167 171 rb_raise(rb_eArgError, "No value provided to setter.");
168 if (f == NULL) { 172 }
169 rb_raise(rb_eArgError, "Unknown field"); 173 layout_set(self->descriptor->layout, Message_data(self), f, argv[1]);
170 } 174 return Qnil;
171 175 } else {
172 if (setter) { 176 return layout_get(self->descriptor->layout, Message_data(self), f);
173 if (argc < 2) {
174 rb_raise(rb_eArgError, "No value provided to setter.");
175 } 177 }
176 layout_set(self->descriptor->layout, Message_data(self), f, argv[1]);
177 return Qnil;
178 } else {
179 return layout_get(self->descriptor->layout, Message_data(self), f);
180 } 178 }
181 } 179 }
182 180
183 int Message_initialize_kwarg(VALUE key, VALUE val, VALUE _self) { 181 int Message_initialize_kwarg(VALUE key, VALUE val, VALUE _self) {
184 MessageHeader* self; 182 MessageHeader* self;
185 VALUE method_str; 183 VALUE method_str;
186 char* name; 184 char* name;
187 const upb_fielddef* f; 185 const upb_fielddef* f;
188 TypedData_Get_Struct(_self, MessageHeader, &Message_type, self); 186 TypedData_Get_Struct(_self, MessageHeader, &Message_type, self);
189 187
190 if (!SYMBOL_P(key)) { 188 if (!SYMBOL_P(key)) {
191 rb_raise(rb_eArgError, 189 rb_raise(rb_eArgError,
192 "Expected symbols as hash keys in initialization map."); 190 "Expected symbols as hash keys in initialization map.");
193 } 191 }
194 192
195 method_str = rb_id2str(SYM2ID(key)); 193 method_str = rb_id2str(SYM2ID(key));
196 name = RSTRING_PTR(method_str); 194 name = RSTRING_PTR(method_str);
197 f = upb_msgdef_ntofz(self->descriptor->msgdef, name); 195 f = upb_msgdef_ntofz(self->descriptor->msgdef, name);
198 if (f == NULL) { 196 if (f == NULL) {
199 rb_raise(rb_eArgError, 197 rb_raise(rb_eArgError,
200 "Unknown field name in initialization map entry."); 198 "Unknown field name '%s' in initialization map entry.", name);
201 } 199 }
202 200
203 if (is_map_field(f)) { 201 if (is_map_field(f)) {
204 VALUE map; 202 VALUE map;
205 203
206 if (TYPE(val) != T_HASH) { 204 if (TYPE(val) != T_HASH) {
207 rb_raise(rb_eArgError, 205 rb_raise(rb_eArgError,
208 "Expected Hash object as initializer value for map field."); 206 "Expected Hash object as initializer value for map field '%s'.", name);
209 } 207 }
210 map = layout_get(self->descriptor->layout, Message_data(self), f); 208 map = layout_get(self->descriptor->layout, Message_data(self), f);
211 Map_merge_into_self(map, val); 209 Map_merge_into_self(map, val);
212 } else if (upb_fielddef_label(f) == UPB_LABEL_REPEATED) { 210 } else if (upb_fielddef_label(f) == UPB_LABEL_REPEATED) {
213 VALUE ary; 211 VALUE ary;
214 212
215 if (TYPE(val) != T_ARRAY) { 213 if (TYPE(val) != T_ARRAY) {
216 rb_raise(rb_eArgError, 214 rb_raise(rb_eArgError,
217 "Expected array as initializer value for repeated field."); 215 "Expected array as initializer value for repeated field '%s'.", n ame);
218 } 216 }
219 ary = layout_get(self->descriptor->layout, Message_data(self), f); 217 ary = layout_get(self->descriptor->layout, Message_data(self), f);
220 for (int i = 0; i < RARRAY_LEN(val); i++) { 218 for (int i = 0; i < RARRAY_LEN(val); i++) {
221 RepeatedField_push(ary, rb_ary_entry(val, i)); 219 RepeatedField_push(ary, rb_ary_entry(val, i));
222 } 220 }
223 } else { 221 } else {
224 layout_set(self->descriptor->layout, Message_data(self), f, val); 222 layout_set(self->descriptor->layout, Message_data(self), f, val);
225 } 223 }
226 return 0; 224 return 0;
227 } 225 }
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 rb_define_method(klass, "==", Message_eq, 1); 466 rb_define_method(klass, "==", Message_eq, 1);
469 rb_define_method(klass, "hash", Message_hash, 0); 467 rb_define_method(klass, "hash", Message_hash, 0);
470 rb_define_method(klass, "to_h", Message_to_h, 0); 468 rb_define_method(klass, "to_h", Message_to_h, 0);
471 rb_define_method(klass, "to_hash", Message_to_h, 0); 469 rb_define_method(klass, "to_hash", Message_to_h, 0);
472 rb_define_method(klass, "inspect", Message_inspect, 0); 470 rb_define_method(klass, "inspect", Message_inspect, 0);
473 rb_define_method(klass, "[]", Message_index, 1); 471 rb_define_method(klass, "[]", Message_index, 1);
474 rb_define_method(klass, "[]=", Message_index_set, 2); 472 rb_define_method(klass, "[]=", Message_index_set, 2);
475 rb_define_singleton_method(klass, "decode", Message_decode, 1); 473 rb_define_singleton_method(klass, "decode", Message_decode, 1);
476 rb_define_singleton_method(klass, "encode", Message_encode, 1); 474 rb_define_singleton_method(klass, "encode", Message_encode, 1);
477 rb_define_singleton_method(klass, "decode_json", Message_decode_json, 1); 475 rb_define_singleton_method(klass, "decode_json", Message_decode_json, 1);
478 rb_define_singleton_method(klass, "encode_json", Message_encode_json, 1); 476 rb_define_singleton_method(klass, "encode_json", Message_encode_json, -1);
479 rb_define_singleton_method(klass, "descriptor", Message_descriptor, 0); 477 rb_define_singleton_method(klass, "descriptor", Message_descriptor, 0);
480 478
481 return klass; 479 return klass;
482 } 480 }
483 481
484 /* 482 /*
485 * call-seq: 483 * call-seq:
486 * Enum.lookup(number) => name 484 * Enum.lookup(number) => name
487 * 485 *
488 * This module method, provided on each generated enum module, looks up an enum 486 * This module method, provided on each generated enum module, looks up an enum
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 VALUE Google_Protobuf_deep_copy(VALUE self, VALUE obj) { 569 VALUE Google_Protobuf_deep_copy(VALUE self, VALUE obj) {
572 VALUE klass = CLASS_OF(obj); 570 VALUE klass = CLASS_OF(obj);
573 if (klass == cRepeatedField) { 571 if (klass == cRepeatedField) {
574 return RepeatedField_deep_copy(obj); 572 return RepeatedField_deep_copy(obj);
575 } else if (klass == cMap) { 573 } else if (klass == cMap) {
576 return Map_deep_copy(obj); 574 return Map_deep_copy(obj);
577 } else { 575 } else {
578 return Message_deep_copy(obj); 576 return Message_deep_copy(obj);
579 } 577 }
580 } 578 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698