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

22 Коммитов

Автор SHA1 Сообщение Дата
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
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 c4074e16fb [objc] Assert with a descriptive message if an assembly can't be found. (#75) 2017-04-07 12:24:29 +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 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 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
Rolf Bjarne Kvinge 7d22482959 [objc] Add error handling. (#33) 2017-03-31 13:12:12 -05:00
Rolf Bjarne Kvinge 45d727c98d [objc] Use IKVM.Reflection. (#31) 2017-03-31 11:44:33 -05: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