Граф коммитов

39 Коммитов

Автор SHA1 Сообщение Дата
Sebastien Pouliot 27e5f34941 [objc] Add basic (readonly) support for fields (#129)
We cannot access them directly but we can provide (ObjC) property
wrappers around them, making them usable from ObjC code.
2017-04-17 10:03:46 -04:00
Sebastien Pouliot 943b1da124 [objc] Generated (property) indexers as methods (#125)
That's basic support. The nicer way would be to use subscripts [1]

[1] https://github.com/mono/Embeddinator-4000/issues/122
2017-04-14 15:13:20 -04:00
Sebastien Pouliot 24a1f3e543 [objc] Fix the case where bound type A creates instance of bound type B (#121)
As Alex pointed out this scenario requires the `_object` field to be
public.
2017-04-13 22:24:57 -04:00
Sebastien Pouliot 64b7df0d19 [objc] Generate better looking names for operators (#120)
Remove the `op_` prefix on operators.

Also fix a (non fatal) typo, extra `)`, when computing mono signatures.
2017-04-13 21:41:21 -04:00
Sebastien Pouliot 44b14b6e67 [objc] Add support for enums and [Flags] (#119) 2017-04-13 21:07:52 -04:00
Sebastien Pouliot 02202b7743 [objc] Add support for structs / valuetype (#118) 2017-04-13 17:59:28 -04:00
Sebastien Pouliot 4c60ece830 [objc] Add support for `ref` and `out` arguments (#115) 2017-04-12 21:20:37 -04:00
Alex Soto a33c458113 [objc] Avoid objc ctor inheritance. Fixes issue #72 (#103)
.NET .ctor are not inherited but `init*` methods are in ObjC, we now
mark as `NS_UNAVAILABLE` the ctors that are not available.

Also this commit introduces `objcgenerator-helpers.cs` which its main
intention is to move the small ObjC related functions like
`GetSignatures` or `GetUnavailableParentCtors` to avoid
polluting too much `objcgenerator.cs` readability
2017-04-12 21:20:21 -04:00
Rolf Bjarne Kvinge d5d341431e [tests][objc] Build debug tests into a subdirectory as well. (#108)
* [tests][objc] Build debug tests into a subdirectory as well.

This cleans up the current directory quite a bit.

Also modify the cli/perf tests a little bit to be able to run the
debug/release versions in parallel.

* [tests][objc] Don't fail to create directory if directory already exists.

* [tests][objc-cli] Make sure libmanaged.dylib is built before xctest.

Since the corresponding xcode project builds libmanaged.dylib if it's not
already built (by executing make), we may end up with two make process trying
to build the same target simultaneously, which breaks everything.
2017-04-12 17:02:16 +02:00
Rolf Bjarne Kvinge 75dfc163b5 [objc] Add a header (embeddinator.h) that's meant to be included by generated headers. (#109)
This way we can limit the API surface of the generated code.
2017-04-12 08:55:44 -04:00
Rolf Bjarne Kvinge eb8a9970af [objc] Use msbuild instead of xbuild. (#106)
This prevents fleeting visions of red text in the terminal.
2017-04-12 08:49:38 -04:00
Sebastien Pouliot a16e5478fe [objc][generator] Produce better names for ObjC methods (#105)
* Better name for setter only properties, e.g.
	-       [query set_Secret: 1];
	+       [query setSecret: 1];

* Second method argument should be lowercased, e.g. `second`
	[Methods_Parameters concatFirst:@"first" second:@"second"]

* Reduce some code duplication, to avoid fixing things multiple times, e.g.
	* Unify the signatures generation for ObjC and Mono;
	* Unify the parameter marshaling code (the one for methods was missing a lot)

* Simplify `ImplementMethod` arguments
2017-04-12 07:48:25 +02:00
Sebastien Pouliot 1bdeef1dd8 [objc][generator] Use metadata token lookup when building release (#91)
* [objc][generator] Use metadata token lookup when building release

where release is non-debug.

https://github.com/mono/Embeddinator-4000/issues/82

* [tests] Run test-cli and perf-cli in release (non debug) mode
2017-04-11 17:21:54 +02:00
Rolf Bjarne Kvinge 7de0e3f0cc [objc] Add support fat and static libraries for all platforms. (#97)
[objc] Add support fat and static libraries for all platforms.
2017-04-11 15:25:40 +02:00
Sebastien Pouliot e62cb1b80e [objc][support] Move MonoString to NSString conversion into it's own routine (to avoid several dupes in generated code) (#94) 2017-04-11 08:35:10 +02:00
Sebastien Pouliot 7d20bde00f [objc] Fix subclassing when `init` is not available (#85)
It's similar to XI/XM NSObjectFlag - we need a different road to call
the base classes without calling managed code twice (e.g. the Super
and Base tests for exceptions).

Note: `init` is not always exposed, so we cannot trust it blindly.

This allow the same "internal" `initWithSuper` to be re-used to return
instance of types being bound (e.g. a `+create` without a `-init`).
2017-04-10 19:12:24 +02:00
Rolf Bjarne Kvinge 790046d6ac [objc] Improve Makefile dependencies to only rebuild things if needed. (#76) 2017-04-07 20:05:25 +02:00
Sebastien Pouliot 64720b0859 [test][objc] Fix Makefile not to delete leak-at-exit.c (#81)
That one is not a generated file
2017-04-07 17:12:17 +02:00
Rolf Bjarne Kvinge 79fa12070a [tests][objc] Improve Makefile dependencies to only rebuild things if needed. (#78) 2017-04-07 12:24:53 +02:00
Sebastien Pouliot a13e48abc6 [objc] The same type name can exists in several namespaces (#68)
Not common, but has to work. Unit test added.
2017-04-06 10:15:51 -05:00
Rolf Bjarne Kvinge c2e0eba081 [objc] Add memory leak tests, and fix a few issues those found. (#65)
* [tests] [objc-cli] Improve a few Makefile targets to have correct dependencies.

* [objc] Generate a dealloc method that handles object destruction.

* [objc] Fix a memory leak when searching for assemblies.

`mono_embeddinator_search_assembly` returns a string that must be freed, so
free it.

* [objc][tests] Add leak tests.

* [tests][objc] Try running leaks with sudo if we don't have a controlling terminal.

Otherwise this happens on Jenkins:

> leaks[33383]: [fatal] unable to ask for permission to examine process; run tool using sudo, or without redirecting stdin and stderr.

* [objc] Fix chained init methods and avoid chaining dealloc.

In an init method we must only create the managed object if a derived class
hasn't already created it.

Also we must only dealloc once in the inheritance hierarchy.
2017-04-06 15:50:43 +02:00
Sebastien Pouliot 946ed79896 [objc] Initial support for methods (#67)
This also handle the case of setter-only properties (generated as a
set* method).

Unit tests added for existing methods (previously not generated)

Replace PR https://github.com/mono/Embeddinator-4000/pull/63
2017-04-06 08:46:24 -05:00
Sebastien Pouliot 7c2384d729 [objc][generator] Fix subclassing when both types are bound (#62)
E.g. `public class SuperUnique : Unique {}`

This raise an interesting issue (to be solved later) since ObjC and .NET
semantics differs for init*/.ctor. A test case (with a FIXME) is added.

and I now recall why headers were a bad idea:

./bindings.h:75:39: error: attempting to use the forward class 'Constructors_Unique' as superclass of 'Constructors_SuperUnique'

so the ordering of forwarders had to be altered a bit.
2017-04-06 11:59:58 +02:00
Rolf Bjarne Kvinge 3bae118183 [objc] Enforce ARC. (#60)
Also remove the NSAutoreleasePool code, the current code doesn't build with
ARC, and in any case it's the consumer's responsibility to ensure there's an
NSAutoreleasePool on the stack.
2017-04-05 14:08:52 -05:00
Sebastien Pouliot 9db995bfe1 [objc] Add support for non-default init* methods (constructors) (#59) 2017-04-05 08:46:12 +02:00
Sebastien Pouliot ca5545cae4 [objc][tests] Add more unit tests for existing features (#56)
For
* instance properties (uncomment them);
* namespaces;
* exceptions inside `init`;
2017-04-04 09:43:01 +02:00
Rolf Bjarne Kvinge d6003c415b [objc][tests] Remove the 'libmanaged' target from the Xcode cli test project. (#55)
Remove the 'libmanaged' target from the Xcode test project, and instead link
with the libmanaged.dylib that the embeddinator compiles. This ensures we're
not compiling with different compiler flags in the Xcode project.

This also requires adding an rpath to the built library so that the test
executable can find it.

Also add makefile target to run the Xcode test project from the command line.
2017-04-03 13:25:34 -05:00
Sebastien Pouliot b560ed5c39 [objc] Add -c[ompile] option to the driver (#54) 2017-04-03 11:53:21 -05:00
Rolf Bjarne Kvinge b89e3cf8a0 [objc] Add support for building the native library with debug information. (#53) 2017-04-03 10:55:50 -05:00
Rolf Bjarne Kvinge c0b00f4222 [objc] Add support for more primitive types. (#51) 2017-04-03 10:42:32 -05:00
Rolf Bjarne Kvinge 7c09a324ef [objc][tests] Automatically rebuild the generator before running tests. (#52) 2017-04-03 10:14:25 -05:00
Rolf Bjarne Kvinge 0ff824da7c [objc][tests] Always rebuild managed.dll before running cli tests. (#50) 2017-04-03 08:55:42 -05:00
Sebastien Pouliot d4775744bf [objc] Add support for default .ctor/init and namespaces (#38) 2017-04-03 08:23:57 -05:00
Sebastien Pouliot fdb0041515 [objc] Add xcode support for objc-cli to build the libmanaged.dylib and it's unit tests (#42)
This allows debugging the generated code with Xcode as well as
running the native unit tests with XCTest (which might not be the
best tool but it's good to support).

This commit requires a addition to mono_embeddinator so we can
override where the assemblies are loaded from - we cannot assume
they will be with the executable (e.g. plugin) and we hit this
case with Xcode unit tests.
2017-04-03 14:33:05 +02:00
Sebastien Pouliot 514e20f437 [docs] Start a limitations document and add read me for the new directories created in the objc branch (#45) 2017-04-02 13:25:42 -05:00
Sebastien Pouliot 7d1ac85de2 [build] .gitignore had an entry for Makefile so some were not committed previously (#44) 2017-04-02 13:13:47 -05:00
Sebastien Pouliot 6e35580f8f [tests] Remove generated files from tests/objc-cli (#41) 2017-04-01 16:28:36 -05:00
Sebastien Pouliot 2b8c858e9c [tests][objc-cli] Remove generated files and update .gitignore so new ones won't be added by mistake again (#32) 2017-03-31 19:22:40 +02:00
Sebastien Pouliot 5cc5ea587d [objc] Simpler generator that, so far, only handle static properties (#29)
The ObjC syntax for properties match the proposal from PR #25 [1].

Unit tests added for the matching features.

[1] https://github.com/mono/Embeddinator-4000/pull/25
2017-03-31 10:21:23 -05:00