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

55 Коммитов

Автор 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 35bc36e0c4 [objc] Warn if default values are used on parameters (#126)
Right now this is ignored [1] so we warn about them.

[1] https://github.com/mono/Embeddinator-4000/issues/73
2017-04-14 15:13:31 -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 2f52100568 [object][processor] Filter and warn about unsupported C# features/types (#117)
This allow the tool to produce something on existing binaries, which
will make testing easier as we go forward.
2017-04-13 15:21:39 -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 f92f01b0b0 [objc] Add support for --abi to limit the number of architectures we build. Fixes #74. (#114) 2017-04-12 13:52:20 -04:00
Rolf Bjarne Kvinge 98ac5de4eb [objcgen] Create an embedder class that contains the state required to run the embeddinator. (#110)
This makes it easier to test, because Driver.Main can be called multiple
times, each time independent from previous executions.
2017-04-12 08:57:26 -04: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 346dcf64f2 [objc] Warnings are good. (#107) 2017-04-12 08:50:18 -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
Alex Soto dbc3c9287b [objc] Disable the `new` selector when no `init` is available (#101)
We currently disable the `init` ctor when is not needed i.e. static
classes in .NET but we should also disable the `new` static selector
since you could do `[foo new]` and get an instance.
2017-04-11 16:38:51 -04:00
Vincent Dondain bb16097c23 [objc][generator] Update type/pointer spacing to follow ObjC conventions (#95)
* [objc][generator] Update type/pointer spacing to follow ObjC conventions

The convention is that there's a space between the type and the pointer character (*) in Objective-C.
See: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-BCIGIJJF
_Note: Apple's frameworks are using this convention too._

* [objc][generator][tests] Fixed NSString * test
2017-04-11 12:00:22 -05: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 00d5ec5ea8 [objc] Get the Xcode location using 'xcode-select -p' to use for our clang compiler flags. (#98) 2017-04-11 10:34:19 -04: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 9df25e4b18 [objc][driver] Remove duplicated 'Compiling binding code...' message (#93) 2017-04-11 08:33:57 +02:00
Vincent Dondain 8a38ad248a [objc][README] Recommend usage of objcgen.exe instead of MonoEmbeddinator4000.exe (#92)
objcgen.exe has to be used in order to try the new generator (with the latest fixes).
2017-04-11 08:33:38 +02:00
Vincent Dondain 2ae40370a0 [objc][generator] Remove space between method's return type and name (#90) 2017-04-10 17:12:59 -04:00
Sebastien Pouliot 112ba1fb0b [objc] Remove non-public information from header files and simplify runtime initialization (#86)
- Don't expose `MonoEmbedObject* _object;` in the public headers - it's
  not meant to be used outside the generated code (but make it @public);

- Don't expose `dealloc` in the headers - it's not meant to be called
  from public code;

- Call `__initialize_mono` when loading assembly image, not class - the
  later happens way more often;

- Drop `__lookup_class_*` functions in favor of `+initialize`;

- That makes it possible to remove the `__lookup_class_*` call from methods;
2017-04-10 19:13:45 +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
Sebastien Pouliot e6e11d7591 [objc] `mono_embeddinator_create_object` now calls `mono_gchandle_new` (#84)
So we need to remove our own call, which overwrites the original one.
2017-04-10 07:00:00 +02:00
Sebastien Pouliot 6a7f73b0c1 [objc][generator] Do not generate a `dealloc` or the `_object` field for static types (#83)
Sadly we can't easily test the presence (or absence) of `dealloc` as this
gets us an error:

> ARC forbids use of 'dealloc' in a @selector
2017-04-10 06:59:25 +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
Rolf Bjarne Kvinge 9900d12dff Auto-provision Xamarin.iOS and Xamarin.Mac. (#80) 2017-04-07 13:47:26 +02:00
Rolf Bjarne Kvinge c4074e16fb [objc] Assert with a descriptive message if an assembly can't be found. (#75) 2017-04-07 12:24:29 +02:00
Rolf Bjarne Kvinge 21f7a853c1 [objc] Use enums instead of string values for platform/target/compilationtarget, and add initial scaffolding for iOS/watchOS/tvOS + framework support. (#69) 2017-04-06 17:28:24 +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
Rolf Bjarne Kvinge d43603791c [objc] Add script to autoprovision mono. (#66) 2017-04-06 15:19:44 +02: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
Sebastien Pouliot 38357f1ac7 [objc][driver] Command-line options parity with master (#61)
This will help scripts to switch between implementations.
2017-04-06 09:29:16 +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 e899b7510d [objc][generator] Use the already filtered `types` at generation time (#57)
so we don't have to to it twice - as filtering will only become more
complex over time.

Also sort the types so it's easier to find them (e.g. when listed in the
class forwarders) and adjust some WriteLine so make generated code easier
to read.
2017-04-04 09:41:05 +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
Sebastien Pouliot d49fc8c666 [objc] Add support for -o (output directory) and -v (verbosity) and add some error codes (#39)
* EM0000 is now shown for unhandled exceptions - asking for a bug report
  to be submitted;

* EM0001 is reported when the output directory cannot be found;

* EM1000 is reported when the generator throws a NotImplementedException,
  no bug report is required, but contributions are welcome :)
2017-04-03 09:24:36 -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 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
Rolf Bjarne Kvinge 257711b8c0 [objc] 'Generate' if assemblies were passed in. (#37) 2017-03-31 13:57:24 -05:00