diff options
Diffstat (limited to 'core/io/marshalls.cpp')
| -rw-r--r-- | core/io/marshalls.cpp | 58 | 
1 files changed, 31 insertions, 27 deletions
diff --git a/core/io/marshalls.cpp b/core/io/marshalls.cpp index eec1c55744..81b3829ffc 100644 --- a/core/io/marshalls.cpp +++ b/core/io/marshalls.cpp @@ -768,7 +768,9 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int  			r_variant = carray;  		} break; -		default: { ERR_FAIL_V(ERR_BUG); } +		default: { +			ERR_FAIL_V(ERR_BUG); +		}  	}  	return OK; @@ -794,7 +796,7 @@ static void _encode_string(const String &p_string, uint8_t *&buf, int &r_len) {  	}  } -Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_object_as_id) { +Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_full_objects) {  	uint8_t *buf = r_buffer; @@ -819,11 +821,12 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo  			}  		} break;  		case Variant::OBJECT: { -			if (p_object_as_id) { +			if (!p_full_objects) {  				flags |= ENCODE_FLAG_OBJECT_AS_ID;  			}  		} break; -		default: {} // nothing to do at this stage +		default: { +		} // nothing to do at this stage  	}  	if (buf) { @@ -889,11 +892,11 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo  			if (buf) {  				encode_uint32(uint32_t(np.get_name_count()) | 0x80000000, buf); //for compatibility with the old format  				encode_uint32(np.get_subname_count(), buf + 4); -				uint32_t flags = 0; +				uint32_t np_flags = 0;  				if (np.is_absolute()) -					flags |= 1; +					np_flags |= 1; -				encode_uint32(flags, buf + 8); +				encode_uint32(np_flags, buf + 8);  				buf += 12;  			} @@ -1086,22 +1089,8 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo  		} break;  		case Variant::OBJECT: { -			if (p_object_as_id) { - -				if (buf) { +			if (p_full_objects) { -					Object *obj = p_variant; -					ObjectID id = 0; -					if (obj && ObjectDB::instance_validate(obj)) { -						id = obj->get_instance_id(); -					} - -					encode_uint64(id, buf); -				} - -				r_len += 8; - -			} else {  				Object *obj = p_variant;  				if (!obj) {  					if (buf) { @@ -1139,7 +1128,7 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo  						_encode_string(E->get().name, buf, r_len);  						int len; -						Error err = encode_variant(obj->get(E->get().name), buf, len, p_object_as_id); +						Error err = encode_variant(obj->get(E->get().name), buf, len, p_full_objects);  						if (err)  							return err;  						ERR_FAIL_COND_V(len % 4, ERR_BUG); @@ -1148,6 +1137,19 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo  							buf += len;  					}  				} +			} else { +				if (buf) { + +					Object *obj = p_variant; +					ObjectID id = 0; +					if (obj && ObjectDB::instance_validate(obj)) { +						id = obj->get_instance_id(); +					} + +					encode_uint64(id, buf); +				} + +				r_len += 8;  			}  		} break; @@ -1180,14 +1182,14 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo  					r_len++; //pad  				*/  				int len; -				encode_variant(E->get(), buf, len, p_object_as_id); +				encode_variant(E->get(), buf, len, p_full_objects);  				ERR_FAIL_COND_V(len % 4, ERR_BUG);  				r_len += len;  				if (buf)  					buf += len;  				Variant *v = d.getptr(E->get());  				ERR_FAIL_COND_V(!v, ERR_BUG); -				encode_variant(*v, buf, len, p_object_as_id); +				encode_variant(*v, buf, len, p_full_objects);  				ERR_FAIL_COND_V(len % 4, ERR_BUG);  				r_len += len;  				if (buf) @@ -1209,7 +1211,7 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo  			for (int i = 0; i < v.size(); i++) {  				int len; -				encode_variant(v.get(i), buf, len, p_object_as_id); +				encode_variant(v.get(i), buf, len, p_full_objects);  				ERR_FAIL_COND_V(len % 4, ERR_BUG);  				r_len += len;  				if (buf) @@ -1386,7 +1388,9 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo  			r_len += 4 * 4 * len;  		} break; -		default: { ERR_FAIL_V(ERR_BUG); } +		default: { +			ERR_FAIL_V(ERR_BUG); +		}  	}  	return OK;  |