Commit Graph

42 Commits

Author SHA1 Message Date
Thomas Van Lenten
e1e5b8af79 [ObjC] Update some library internals to not pass syntax versions.
- With the new flags, the syntax isn't needed, so don't pass it.
- To keep library binary compatibility, rename the helpers since one
  "Internal" method was called from generated code. Keep a shim with
  the old signature to support those generated sources.
2020-04-24 16:36:15 -04:00
Dave MacLachlan
ab48ecf140 Update pddm to work with clang-format
Add clang-format off/on directives around pddm expansions to simplify formatting other code.
2020-01-21 13:14:01 -05:00
Brian Wignall
a104dffcb6 Fix typos (#7050)
Uses https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines to find likely typos, with https://github.com/bwignall/typochecker to help automate the checking.
2020-01-08 10:18:20 -08:00
Thomas Van Lenten
ffa6bfc01a
ObjC: small improvement to extension serialization.
For messages that have multiple extension ranges, this will improve things
by avoiding repeated work.  For messages with a single range, it should
be a wash.

- Sort the list of set extensions once during serialization and reuse the list.
- Break out of the serialization loop as soon as the loop has moved pasted at
  accepted range for field ids.
2018-11-19 11:42:47 -05:00
Thomas Van Lenten
8dadfda1e3 Improve comment about warning being incomplete. 2018-11-14 14:22:25 -05:00
Thomas Van Lenten
7fa7fbaf16 In debug builds output a warning about NSCoding and extensions.
Using NSCoding with a Message that has extensions is risky because
when reloaded, there is no way to provide a registry through the
NSCoding plumbing, so output a warnings to atleast give developers
a hint about the potential issues.
2018-11-14 13:57:04 -05:00
Thomas Van Lenten
09c001e999 Copy the value when setting message/data fields.
Follow ObjC conventions and how the generated header labels things by
copying NSStrings/NSData fields when setting them.
2018-10-02 13:45:18 -04:00
Thomas Van Lenten
561413523f Remove stray 'return'. 2018-10-02 13:45:18 -04:00
Thomas Van Lenten
cf016a42e6 Work around strange error with atomic and swift under Xcode 8.3.3.
Haven't been able to make a repo case, but this should "fix" the problem
by avoid it completely.

- Move readOnlySemaphore_ into the .m file so it isn't exposed in any
  header.
- Move GPBGetObjectIvarWithField() also to go with the new limited
  visibility on the readOnlySemaphore_.
2018-01-31 16:57:53 -05:00
Thomas Van Lenten
81aeed082e Work around the static analyzer false report. 2018-01-31 14:24:51 -05:00
Jonathan Dierksen
a721bf6d29 Migrate away from deprecated OSAtomic APIs. (#4184)
* Migrate away from deprecated OSAtomic APIs.
2018-01-22 16:26:39 -05:00
Thomas Van Lenten
4588e6e2b9 Force a copy when saving the NSData that came from another. 2018-01-03 13:12:29 -05:00
Thomas Van Lenten
156161dfcd Properly copy maps with string keys but pod values.
Add tests to cover all the common special casing in the runtime code to
ensure things come out correctly.
2018-01-03 11:46:03 -05:00
Dave MacLachlan
4ba30923fa code review cleanup 2017-11-15 08:41:29 -08:00
Dave MacLachlan
949596ea32 Simplify getter/setter method implementations
Remove unnecessary retain/releases for GPBFieldDescriptors when
creating implementations with blocks. The descriptors do not need
to be memory managed because they are essentially global constructs
that are guaranteed to be around the lifetime of the app.
2017-11-14 15:58:22 -08:00
Thomas Van Lenten
1f57e540ac When comparing message, require them to have the same descriptor.
This will cover someone subclassing the message, and also handles
something crazy like someone comparing to a raw NSObject.
2017-11-03 12:49:28 -04:00
Thomas Van Lenten
db45687a38 If we fail to get a descriptor just super the method resolving.
This should never happen, but if someone is swizzling or do other
hooking of methods, anything is possible, so this seems slighty
safer than they returning NO.
2017-06-22 10:18:00 -04:00
Thomas Van Lenten
1d0988b8ef ObjC: Preserve unknown fields in proto3 syntax files.
As announced: https://groups.google.com/forum/#!topic/protobuf/VX5qEmTW3y0

The ObjC side of https://github.com/google/protobuf/issues/272
2017-06-06 10:44:14 -04:00
Thomas Van Lenten
f5a01d1bbd Tighten up class usage/checks.
- Ensure extensions resolution/wiring is happening directly on the
  messageClass (incase someone is doing odd things our out classes).
- Make the extension message check match the other class checks in
  for mergeFrom/isEqual/etc.
2017-04-18 13:10:52 -04:00
Thomas Van Lenten
130c166697 Remove the use of dispatch_once that is heap backed.
Apple recently updated the docs on dispatch_once to point out
that the storage for the dispatch_once_t must be static or global,
but not something that was ever used before as the implementation
doesn't use a memory barrier.  So we drop the use and create the
semaphore when needed and use an atomic swap deal with any
threading races.
2017-03-29 13:03:33 -04:00
Thomas Van Lenten
2d1c5e26cb Handing threading race resolving methods.
- Don't prune the extension registry as that can lead to failures when two
  threads are racing.
- If adding the method fails, check and see if it already is bound to decide
  the return result. Deals with threading races binding the methods.
2017-03-02 16:34:11 -05:00
Thomas Van Lenten
988ffe0a78 Minor fix for autocreated object repeated fields and maps.
- If setting/clearing a repeated field/map that was objects, check the class
  before checking the autocreator.
- Just to be paranoid, don’t mutate within copy/mutableCopy for the autocreated
  classes to ensure there is less chance of issues if someone does something
  really crazy threading wise.
- Some more tests for the internal AutocreatedArray/AutocreatedDictionary
  classes to ensure things are working as expected.
- Add Xcode 8.2 to the full_mac_build.sh supported list.
2017-01-05 09:15:40 -05:00
Sergio Campamá
b99577c5ac Exposes the currently registered extensions for a message and removes the internal sortedExtensionsInUse 2016-07-15 18:04:01 -04:00
Thomas Van Lenten
c18aa7795a Validate the tag numbers when parsing. (#1725)
There was a twist code path (that some times showed up due to what happened to
be in memory in failure cases), that would cast a bogus wire type into the
enum, and then fall through switch statements.

Resolve this by validating all wire types when parsing tags and throwing the
error at that point so it can't enter the system.

As added safety, stick in a few asserts for apis that get passed tags to ensure
they also are only seeing valid data.

Bonus: Tweak the parsing loop to skip some work when we get the end marker
(zero tag) instead of still looping through all the fields.
2016-06-29 09:51:13 -04:00
Thomas Van Lenten
fc4c617199 Fix GPBGetMessage{Repeated,Map}Field()
- Correct impl by using helpers the message wiring does.
- Add unittests.

Fixes https://github.com/google/protobuf/issues/1716
2016-06-27 20:46:26 -04:00
Sergio Campamá
e34c09182e Improving the granularity parsing errors (#1623)
Add more context to GPBCodedInputStream failures.
Have GPBMessage parsing apis extract out the GPBCodedInputStream information and expose it.
Update HeaderDocs with pointers to all error domains/codes.
Expand the unittests to cover the full set of errors reported.

Fixes https://github.com/google/protobuf/issues/1618
2016-06-02 14:14:26 -04:00
Thomas Van Lenten
e845187cf6 Merge pull request #1620 from sergiocampama/cleanup1
Removing unused GPBExceptionMessageKey
2016-05-30 19:32:03 -04:00
Sergio Campama
a714c401a9 Removing unused GPBExceptionMessageKey
https://github.com/google/protobuf/issues/1618
2016-05-27 12:17:35 -07:00
Thomas Van Lenten
38b9e74691 Add -Woverriding-method-mismatch.
Fixes up the code to avoid some issues with isEqual: methods.

Opened https://github.com/google/protobuf/issues/1616 to track the KVC
collision.
2016-05-27 12:52:35 -04:00
Thomas Van Lenten
c8a440dfb6 Add more warnings to for the ObjC runtime build
Working on https://github.com/google/protobuf/issues/1599, specifically:
- Turn on more warnings that the Xcode UI calls out with individual controls.
- Manually add:
  -Wundef
  -Wswitch-enum
- Manually add and then diable in the unittests because of XCTest's headers:
  -Wreserved-id-macro
  -Wdocumentation-unknown-command
- Manually add -Wdirect-ivar-access, but disable it for the unittests and in
  the library code (via #pragmas to suppress it). This is done so proto users
  can enable the warning.
2016-05-25 16:42:31 -04:00
Thomas Van Lenten
30646288ad Fix up -hash/-isEqual: for bool storage.
Both methods weren't checking the has_bits (where the bools are stored), so
it resulted in invalid results.

Add a test that should shake out something like this in the future also.
2016-04-27 13:57:11 -04:00
Thomas Van Lenten
3f917447e7 The message was autoreleased, the -releases are an over release. 2016-03-24 15:25:21 -04:00
Thomas Van Lenten
bd41a39f69 Only create the readonlySemaphore on demand.
This will lower the amount of dispatch_semaphores created per Message when the
full object tree isn't walked in a way that would require them to be created.
Uses a dispatch_once_t for one time init of the dispatch_semaphore.
2016-03-21 11:11:14 -04:00
Thomas Van Lenten
79a23c435c Shrink ObjC overhead (generated size and some runtime sizes)
NOTE: This is a binary breaking change as structure sizes have changed size
and/or order.

- Drop capturing field options, no other options were captured and other mobile
  targeted languages don't try to capture this sort information (saved 8
  bytes for every field defined (in static data and again in field descriptor
  instance size data).
- No longer generate/compile in the messages/enums in descriptor.proto. If
  developers need it, they should generate it and compile it in. Reduced the
  overhead of the core library.
- Compute the number of has_bits actually needs to avoid over reserving.
- Let the boolean single fields store via a has_bit to avoid storage, makes
  the common cases of the instance size smaller.
- Reorder some flags and down size the enums to contain the bits needed.
- Reorder the items in the structures to manually ensure they are are packed
  better (especially when generating 64bit code - 8 bytes for every field,
  16 bytes for every extension, instance sizes 8 bytes also).
- Split off the structure initialization so when the default is zero, the
  generated static storage doesn't need to reserve the space. This is batched
  at the message level, so all the fields for the message have to have zero
  defaults to get the saves. By definition all proto3 syntax  files fall into
  this case but it also saves space for the proto2 that use the standard
  defaults. (saves 8 bytes of static data for every field that had a zero
  default)
- Don't track the enums defined by a message. Nothing in the runtime needs it
  and it was just generation and runtime overhead. (saves 8 bytes per enum)
- Ensure EnumDescriptors are started up threadsafe in all cases.
- Split some of the Descriptor initialization into multiple methods so the
  generated code isn't padded with lots of zero/nil args.
- Change how oneof info is feed to the runtime enabling us to generate less
  static data (8 bytes saved per oneof for 64bit).
- Change how enum value informat is capture to pack the data and only decode
  it if it ends up being needed. Avoids padding issues causing bloat of 64bit,
  and removes the needs for extra pointers in addition to the data (just the
  data and one pointer now).
2016-03-17 10:04:21 -04:00
Thomas Van Lenten
36650a07cf HeaderDoc support in the library and generated sources
- Convert most of the core library headers over to HeaderDoc format.
- Switch the generated comments over to HeaderDoc.
- Create GPBCodedOutputStream_PackagePrivate and move some things into there
  that should be more internal.
2016-03-07 12:07:03 -05:00
Thomas Van Lenten
4d663376e2 Release the semaphore in dealloc, fixing leak. 2016-01-12 09:04:08 -05:00
Thomas Van Lenten
d6590d6534 Drop all use of OSSpinLock
Apple engineers have pointed out that OSSpinLocks are vulnerable to live locking
on iOS in cases of priority inversion:
. http://mjtsai.com/blog/2015/12/16/osspinlock-is-unsafe/
. https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000372.html

- Use a dispatch_semaphore_t within the extension registry.
- Use a dispatch_semaphore_t for protecting autocreation within messages.
- Drop the custom/internal GPBString class since we don't have really good
  numbers to judge the locking replacements and it isn't required. We can
  always bring it back with real data in the future.
2015-12-17 16:05:50 -05:00
Thomas Van Lenten
52b8d3fe78 Use compiler provided static assert and avoid tripping unused-local-typedef warnings. 2015-12-08 17:18:35 -05:00
Thomas Van Lenten
c27833b632 Enable CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION for the projects. 2015-12-07 10:49:30 -05:00
Thomas Van Lenten
d846b0b059 Beta quality drop of Objective C Support.
- Add more to the ObjC dir readme.
- Merge the ExtensionField and ExtensionDescriptor to reduce overhead.
- Fix an initialization race.
- Clean up the Xcode schemes.
- Remove the class/enum filter.
- Remove some forced inline that were bloating things without proof of performance wins.
- Rename some internal types to avoid conflicts with the well know types protos.
- Drop the use of ApplyFunctions to the compiler/optimizer can do what it wants.
- Better document some possible future improvements.
- Add missing support for parsing repeated primitive fields in packed or unpacked forms.
- Improve -hash.
- Add *Count for repeated and map<> fields to avoid auto create when checking for them being set.
2015-06-08 17:17:22 -04:00
Thomas Van Lenten
1dcc329427 Objective C Second Alpha Drop
- Style fixups in the code.
- map<> serialization fixes and more tests.
- Autocreation of map<> fields (to match repeated fields).
- @@protoc_insertion_point(global_scope|imports).
- Fixup proto2 syntax extension support.
- Move all startup code to +initialize so it happen on class usage and not app startup.
- Have generated headers use forward declarations and move imports into generated code, reduces what is need at compile time to speed up compiled and avoid pointless rippling of rebuilds.
2015-05-22 14:27:31 -04:00
Thomas Van Lenten
30650d81d9 Alpha 1 drop of Google's Objective C plugin and runtime support for protobufs. 2015-05-06 13:19:14 -04:00