theraven
3fbdbe4d02
Work around a bug in clang 3.1 that declares objc_msgSend_stret as a builtin
...
with the wrong signature.
13 years ago
theraven
eb234ea26a
Fix the case where the number of selectors grows to more than 2^16 and we need
...
to fall back to 3-level dtables.
Added a test case that registers far more selectors than a sane program
contains and tries to use them.
13 years ago
theraven
ae3b44ac78
Fix clang's stupid warning to work around a bug in OS X headers...
13 years ago
theraven
6317b79a10
Implemented the new exception ABI, and a load of tests for it. This is used by
...
clang trunk if -fobjc-runtime-1.7 is specified and provides significantly
better interoperability with foreign exceptions.
Note: Most of the exception tests will not pass with gcc or clang < 3.3. They
test things that are impossible to implement quite correctly with the
GCC-compatible exception ABI.
Also updated the release notes to reflect recent improvements.
13 years ago
theraven
6f1589a841
Some bug fixes to ARC autorelease pools. Now provides all of the support required for implementing GNUstep autorelease pools.
14 years ago
thebeing
f845df37c1
Add objc/blocks_private.h header to expose some internals of the blocks runtime
...
that are accessed by libdispatch. Also rename the relevant structs to be
compatible with the BlocksRuntime from compiler-rt.
14 years ago
theraven
f9f2e4e313
Added a function for getting the type encoding for a block returned by imp_implementationFromBlock().
14 years ago
theraven
4796a41e4e
Finished implementing the new runtime APIs.
14 years ago
theraven
43ee8b9819
Add initial support for imp_implementationWithBlock() and friends. Currently
...
only works on x86 and x86-64 and doesn't work with sret functions.
14 years ago
theraven
f133fa7eb8
Better ObjC++ support in runtime.h
15 years ago
theraven
1d16930450
Fix missing semicolon.
...
Make Makefile.clang work
Patch by Charlie Sharpsteen.
15 years ago
theraven
5d3c047fa2
Finished implementing JavaScript-style prototypes.
15 years ago
theraven
b54719abf1
Basic support for prototype-style object orientation (you can now add methods to an individual object).
15 years ago
theraven
908374672d
Make OBJC_SMALL_OBJECT_SHIFT / OBJC_SMALL_OBJECT_MASK constants.
15 years ago
theraven
8e34dccda9
Deprecate access to the isa pointer. This will become a hard error in future.
15 years ago
theraven
22e5aaf7b0
Add OBJC_SMALL_OBJECT_SHIFT macro.
15 years ago
theraven
8af52846b7
Small object (hidden in a pointer) support.
15 years ago
theraven
ffc661fe5c
Export capabilities for associated references and GC.
15 years ago
theraven
893b9bf958
Add guard if __has_feature is not defined.
15 years ago
theraven
36d21882ec
Documented objc-arc.h
15 years ago
theraven
bc87ed22e1
Implemented support for __weak with ARC.
...
ARC functions are all now exposed in a header, but not yet documented. See the ARC ABI spec for now:
http://clang.llvm.org/docs/AutomaticReferenceCounting.html#runtime
15 years ago
theraven
9b70b22eee
Use __unsafe_unretained instead of const for returning protocol arrays. Let's not break everyone's code, even if we really want to.
15 years ago
theraven
b5380d50d3
Added support for ARC.
...
Weak references are still not supported, but code that doesn't use them (i.e. any code that wants to be compatible with OS X 10.6) will work fine.
The current implementation is VERY inefficient and has a large number of missed optimisation opportunities: this is the 'make it right' phase, and should be almost equivalent to explicit retain / release code.
15 years ago
theraven
85272c48b9
Improve some comments, minor tweaks to GC.
15 years ago
theraven
c9e54c382d
Tweak auto-copy code. Now it only copies classes that are explicitly
...
registered to be copied on heap assignment. By default, this is just
_NSConcreteStackBlock. Other classes can be registered (LanguageKit should
register BlockClosure to make sure that Smalltalk works).
Fred: This makes the stuff that we discussed briefly at FOSDEM possible in GC
mode: We can allocate a GSStackEvent subclass of NSEvent on the stack. If it
implements a -copy method that returns an NSEvent and is registered with the
runtime in this way, then any code that assigns it anywhere on the heap will
end up implicitly creating a heap copy.
15 years ago
theraven
b296b18571
Improvements to GC mode:
...
- Add objc_gc_collectable_address() to determine whether a pointer is managed
by the GC
- If LIBOBJC_CANARIES is set (optionally to a random number seed) then store a
canary value after every allocation returned by
objc_gc_allocate_collectable() and, when it is finalised, check that the
canary has not been modified, aborting if it has. This catches some
heap-buffer overflows, and currently causes GNUstep to abort.
- If LIBOBJC_LOG_ALLOCATIONS is set to a file name, log all GC-managed
allocations to that file. This gives something like malloc_history on OS X.
- objc_memmove_collectable() now guarantees that all copied pointers remain
visible to the GC at all times (which was the point of the function - the
original implementation was just a quick stub).
15 years ago
theraven
d73eb8f634
Expose another function in the header.
15 years ago
theraven
898707bf94
Added function for getting reference count.
15 years ago
theraven
368bf3bd1d
Add reallocate function.
15 years ago
theraven
88c075893f
Call ObjC++ destructors when finalising an object.
...
Add public APIs required to implement [NSGarbageCollector -enable] and [NSGarbageCollector -disable].
15 years ago
theraven
9015795dde
Use explicitly typed memory for instances.
15 years ago
theraven
2329b7a1ec
Change spelling to be consistent with Apple.
15 years ago
theraven
929f8f95b4
Improved a few GC functions.
...
Added objc-auto.h header, providing (documented) public interfaces to this
functionality.
15 years ago
theraven
8ee4d9c38a
Added implementation of property_getAttributes(). This is a horrible interface, both to implement and to use. We should add some better interfaces.
15 years ago
theraven
c6f0651609
Implemented objc_copyProtocolList().
15 years ago
theraven
79b67ad044
Added missing ivar access functions.
15 years ago
theraven
12385fcb1e
Tidy up low memory profile to use slots directly.
15 years ago
theraven
535ba87a8e
Store the selector, not the type encoding, in slots.
15 years ago
theraven
e198597bd3
Added support for associative references. Modified sync code to use this.
15 years ago
theraven
06ff4be6a9
More build system tidies.
15 years ago
thebeing
ee7817cf57
Implement a hook that allows the compiler to register the aliases used with the
...
@compatibility_alias directive so that they can be resolved at runtime.
15 years ago
theraven
faa741b133
Added some header documentation for runtime functions.
15 years ago
theraven
ff21fcc43d
Added C++ include guards to capabilities.h
15 years ago
theraven
7336df75bc
Added some more comments, C++ include guards around runtime.h.
15 years ago
theraven
2c21235cc2
Fix multiple include guard in capabilities.h.
15 years ago
theraven
73e1e2934b
It turns out that Apple chose some confusing and non-intuitive semantics for
...
catching Objective-C objects in C++ catch statements (i.e. they follow
Objective-C semantics, not C++ semantics, irrespective of whether you use C++
or ObjC syntax). We now default to Apple-compatible behaviour, but provide a
function that allows users to select the sane semantics if they prefer.
Added a capability bit for the unified exception model, so code can require it.
This is not really required, since any code using it will link against the
ObjC++ personality function and will get a linker failure if it isn't supported.
Also enabled Objective-C++ stuff by default. This adds a dependency on the C++
standard library (actually on libsupc++, but GNUstep Make wants to link against
libstd++ anyway), which is not ideal. It can be disabled with:
$ gmake objectiver-cxx=no
I suggest that this is only done by people who know that they will never want
Objective-C++ support.
15 years ago
theraven
e0d80861b5
Added some documentation.
15 years ago
theraven
8db63b976f
Initial work on developer mode (allows classes to be replaced at run time with new versions, by cooperating IDEs). This support is part of ongoing work to provide fix-and-continue functionality with Clang / Cling and LanguageKit.
15 years ago
theraven
bde6bf0e14
Fix truncated comment in header and 'worse than useless' macro.
...
Both issues pointed out by Jens Ayton.
15 years ago
ericwa
a7ea477400
libobjc2: put libobjc compatibility functions in runtime.h marked __attribute__((deprecated))
15 years ago
theraven
e70d00a76d
Restore accidentally deleted toydispatch.h.
15 years ago
theraven
7be9f34619
Fixed @synchronize() with a class that has had an instance used for @synchronize().
15 years ago
theraven
ee32f78b0a
Tweaked the GNUmakefile to (more or less) work with gcc.
...
Fixed block introspection for the new (Apple-compatible) ABI.
16 years ago
theraven
025688a2d5
Added property_getName(). Added non-portable API documentation.
16 years ago
theraven
d70523947b
Implement some missing runtime functions.
16 years ago
theraven
9c077368a8
Make sel_copyTypes_np() return the number of types in all cases.
16 years ago
theraven
a029fb2af3
Expose sel_copyTypes_np().
16 years ago
ericwa
7ce5a0ab11
libobjc2: make Object.h include runtime.h
16 years ago
ericwa
c604289023
libobjc2: define SEL as const for GCC
16 years ago
theraven
b1aa77e450
Commit some missing files.
16 years ago
theraven
eb48fda62b
Expose a function needed by GNUstep.
16 years ago
theraven
e2d848467c
Another try...
16 years ago
theraven
00004fe5f3
More tweaks to the GNU-compatibility encoding stuff. This API is too broken to use, but GNUstep seems to want it.
16 years ago
theraven
0177ef56e1
Tweak the type encoding stuff a bit.
16 years ago
theraven
5885fd196a
Add defines for ObjC types (GNUstep apparently uses them, even though they are not part of the language spec, but the things that they define are, so they only serve to obfuscate code where they are used).
16 years ago
theraven
bd58a33b84
Prevent accidental mixing of GNU runtime headers with GNUstep runtime.h.
16 years ago
theraven
f43e7f6845
Fix typo.
16 years ago
theraven
ab59ce1d33
Add feature test APIs to libobjc2.
16 years ago
theraven
77d02d075b
Add some missing protocol introspection functions.
16 years ago
ericwa
52bdf1484f
libobjc2: add dummy objc.h and objc-api.h headers which simply include runtime.h
16 years ago
theraven
0284155f2d
Added a hook that defines the behaviour when you call a method with the wrong signature.
16 years ago
theraven
e9b129d878
Added low memory profile to libobjc2. This uses a more NeXT-style dtable design, which gives better memory usage at the cost of (significantly) worse worst-case performance. The memory savings seem to be only about 10% in the apps I've tested (Gorm, edlc), so it's probably not worthwhile, but it might be useful for someone finding stuff is just starting to swap...
16 years ago
theraven
2cc96a6f7e
Fix message forwarding by, for example, actually calling the public forwarding hook, instead of one that isn't exposed to GNUstep...
16 years ago
theraven
fb474dd7f9
Removed hooks from runtime.h that are in hooks.h
16 years ago
theraven
f375d20d7a
Add support for catching C++ (and Java / Ada) exceptions in Objective-C.
16 years ago
theraven
07758fe521
Removed last bits of legacy code from libobjc2. Added new exception handling implementation.
16 years ago
theraven
b1b9baf382
Finished rewrite of message sending. Deleted lots of legacy stuff.
16 years ago
theraven
bb8cafaa15
Finished rewriting the loader. It's now cleanly separated into logically-separate components, so there's a chance it might actually be maintainable...
16 years ago
theraven
de71ebb6b1
Rewritten class loading.
16 years ago
theraven
7f6f798074
Rewrote some of the class table code to be slightly cleaner.
16 years ago
theraven
a9bdab1f44
Reverted last commit - breaks the build with clang.
...
Fixed the definition of objc_msgSendSuper().
Tweaked the -dealloc implementation for hidden classes used for locking so that @synchronize(self) will work in a -dealloc method.
16 years ago
theraven
ded142ebff
Add empty sarray.h - for some reason GNUstep is trying to #include this file (no idea why, as nothing in GNUstep actually uses anything from it). Adding an empty version should prevent breakage for now.
16 years ago
theraven
b04cccf46b
Fixed some issues in runtime.c when looking up methods. This fixes some issues with DO.
...
Removed GNU dtable and sparse array implementations, replaced entirely now with versions based on the Étoilé runtime. Performance is roughly equivalent in microbenchmarks, memory usage is significantly lower (Gorm goes from 95MB to 50MB on my machine - this will be even more pronounced on 64-bit systems), which should improve cache usage considerably. Still room for some performance tuning, however.
16 years ago
theraven
2d84b96a72
Tidied up some bits by creating private headers for private data structures.
...
Imported selector table code frm the Étoilé runtime. We can now make dispatch type dependent with a -D switch. Not enabled yet, but it will be enabled in a warning mode soon - I consider preferable to the existing GNU and Apple solution of corrupting the stack.
16 years ago
theraven
289d412dac
Fixed lookup of superclass when superclass is nil.
16 years ago
rfm
bc0ad88a82
complete backport
16 years ago
rfm
e2f4f38e45
backport bugfixes from ObjectiveC2 code
16 years ago
rfm
607bc433c9
Fix instance variable lookup to match OSX
16 years ago
theraven
ae11414b4d
Handle case where @synchronized is used with a class.
16 years ago
theraven
d3c4703b46
Removed bits of Object that depended on the horrible stuff in archive.c.
16 years ago
theraven
da9aafd3ed
More fixes for bugs found by Mizuki.
16 years ago
theraven
2a5ba9f18a
Fixed class_get_super_class() so that it actually works and simplified class_getSuperclass() to call it directly. This fixes numerous other corner cases, for example you can now throw a constant string as an exception and have it work correctly even if no constant string objects have been sent messages.
...
Hopefully this will fix a few other Heisenbugs and reduce the strength of the Mottola Effect.
16 years ago
theraven
16c3ec8f46
Correctly declare the runtime hooks as extern. Was causing copies of them to show up in the uninitialised data section of libraries that included runtime.h, clobbering the default version and causing a crash when the runtime tried to call them.
16 years ago
qmathe
8b9c723905
Added object_setClass
16 years ago
theraven
4771cd4e43
Added selector lookup functions. Implementations by Eric Wasylishen.
16 years ago
theraven
baed61c3e6
Added property support functions, NSBlock base classes and uncaught exception handler.
16 years ago
theraven
bba507bf70
Removed incorrect comment from blocks runtime. Tweaked runtime.h to make it show the new functions even in GNU-compat mode and made sure the object-substitution hook is called even when object substitution can't be used, so GNUstep can use it for the 10.5 NSObject runtime functions.
17 years ago
theraven
252447c95f
Updated block interface to more closely match Apple's one. Added support for introspectable blocks.
17 years ago
theraven
3038121d27
Flagged non-Apple-compatible parts of the API as non-portable.
17 years ago
theraven
323e3dfaeb
Added new runtime library, based on GCC 4.4 libobjc, libobjc_tr and Objective2.framework.
17 years ago