Commit Graph

192 Commits

Author SHA1 Message Date
Matthew Flatt
ca0418d47d ffi/unsafe/objc: remove -A'/+A', add `#:async-apply'
Another run at the problem 57516164de was meant to solve. The
new solution just gives up when a `drawRect:' method is called
in the wrong thread, which might create refresh glitches but
avoids a deadlock in the case that the Racket thread is blocked
on the update happening in the foreign thread.
2013-04-23 13:48:15 -06:00
Matthew Flatt
57516164de ffi/unsafe/obj: add +A' and -A' method modes
On Cocoa, a view's `drawRect:' method can be called from a
heartbeat thread that animates controls. Such a call happens
rarely for a `canvas%' or other class where `drawRect:'
is overridden, but since it can happen, ensure that the
callback runs on the Racket thread.
2013-04-19 07:54:30 -06:00
Matthew Flatt
25ddfcbfb3 ffi/com: repairs for parameterized-property setting and for date values
Merge to v5.3.4
2013-04-16 10:02:37 -06:00
Matthew Flatt
fff88eeb92 ffi/unsafe/obj: fix use of ivar in rator position
Merge to v5.3.4
2013-04-12 14:58:53 -06:00
Matthew Flatt
06c42f0887 equality for `define-cstruct'-generated wrappers
Closes PR 13650

Merge to v5.3.4
2013-04-11 14:48:26 -06:00
Matthew Flatt
6e40caa7e2 ffi/com: repairs, including `mysterx' compatibility
Restore MysterX-style handling of parameterzied properties in
`com-get-property'.  It turns out that the original `com-get-property'
handles parameterized properties by allowing a list in place of a
property-name string, and that handling got lost in the re-write.

Fix the name of `com-get-active-from-from-coclass'.

Fix arity checking for optional arguments.

Closes PR 13603
Closes PR 13604
2013-03-31 11:12:45 -06:00
Matthew Flatt
99453ac506 ffi/unsafe/objc: weaken cache of method-invoke functions
A non-weak table meant that on Cocoa, every key press leaked a
foreign-funciton stub.
2013-03-29 08:09:57 -06:00
Matthew Flatt
81a0451849 ffi/unsafe/objc
Avoid crash on duplicate Objective-C class declaration.
2013-03-07 21:46:48 -07:00
Matthew Flatt
cdf0f6b9ab add 'so-mode to `system-type'
To work better with OpenBSD (which has been a problem since we
changed `ffi-lib' to open libraries in "local" mode by default).
2013-03-01 15:20:17 -07:00
Matthew Flatt
d46411d317 ffi/unsafe: add _size', _ssize', _ptrdiff', _intmax', `_uintmax'
These additions could create backward-compatibility problems, but our
searches suggest that problems will be rare; it's more common for
`_size_t' to be incorrectly aliased to `_int', so having definitions
for these standard types is likely to avoid future problems.
2013-02-18 17:01:11 -07:00
Michael Filonenko
840fc9c657 full unboxing for extflonums, plus `ffi/unsafe' support
Includes a repair for floating-point `min' and `max' that affects all
x86 builds that use SSE arithmetic, leaving the (otherwise unused)
floating-point stack in a bad state, which might have affected
x87-using C/foreign libraries running alongside Racket.
2013-02-15 12:15:34 -07:00
Matthew Flatt
a96b093d97 ffi/unsafe: unbreak 2013-02-14 17:30:10 -07:00
Matthew Flatt
3cd4ee1c0d ffi/unsafe: allow multiple values for a `(_fun ... -> _racket)' result
Closes PR 13496
2013-02-14 15:45:26 -07:00
Matthew Flatt
79266fcf36 ffi/com: improve handling of `type-described'
Use a type description when an automation-supplied type
is just 'any.
2013-01-25 05:08:46 -07:00
Matthew Flatt
0f909af765 ffi/com: add `com-get-property*'
Accesses a "parameterized property", which is like a method call
but for a name that is categorized as a property.
2012-12-18 06:39:59 -07:00
Matthew Flatt
5d57f6e497 ffi/unsafe/custodian: fix weak-reference problem
Also fix a related problem in the `math' MPFR binding (which was
masked by the `ffi/unsafe/custodian' bug).
2012-12-11 09:30:15 -07:00
Ryan Culpepper
a5c415d15a change allocator wrapper to ignore #f results
Supports foreign functions that either allocate or return NULL
(translated to #f).
2012-11-21 12:56:30 -05:00
Matthew Flatt
4ca7e6bc77 ffi/unsafe: fixes related to `define-cstruct' and properties
Fix the binding context for property and property-value
expressions. Propagate wrappers (and therefore properties)
to cstruct subtypes.
2012-11-11 09:38:15 -07:00
Eli Barzilay
672910f27b Lots of bad TAB eliminations.
I started from tabs that are not on the beginning of lines, and in
several places I did further cleanings.

If you're worried about knowing who wrote some code, for example, if you
get to this commit in "git blame", then note that you can use the "-w"
flag in many git commands to ignore whitespaces.  For example, to see
per-line authors, use "git blame -w <file>".  Another example: to see
the (*much* smaller) non-whitespace changes in this (or any other)
commit, use "git log -p -w -1 <sha1>".
2012-11-07 11:22:20 -05:00
Matthew Flatt
9708a01a0a ffi/unsafe: defend against some finalization bugs
Turn use of a finalized ffi callout into a reported error,
instead of a crash. Clarify the existence of the finalizer
in the docs. Fix error logging of the finalizer thread.

Merge to v5.3.1
2012-10-21 08:11:45 -06:00
Matthew Flatt
fcfff27c31 ffi/com: implement vardesc-based dispatch
The `title' property of IE9 triggers the new code, which wasn't
implemented before because I didn't have an example.
2012-10-05 12:26:14 -06:00
Matthew Flatt
7c5174d54e ffi/com: faster when calling methods on many objects of same type
Move the method-type cache to the type-info object, instead of
the instance.
2012-10-05 11:05:42 -06:00
Matthew Flatt
5c2b00ea78 ffi/com: try to reduce overhead on `com-invoke'
Also, fix a potential memory bug: the exception-record value
passed to Invoke() as synthesized by `_ptr' was GCable and
movable.
2012-10-05 11:05:41 -06:00
Matthew Flatt
8bd5dbf7cc ffi/unsafe: change `cast' to avoid pitfalls for you
The old `cast' didn't work right for a mismatch between
a pointer GCableness and the source or target types, and
it didn't work right for an GCable pointer with a non-zero
offset. While those pitfalls were documented, the first
of them definitely has been a source of bugs in code that
I wrote.

Also added `cpointer-gcable?'
2012-09-04 15:28:18 -06:00
Matthew Flatt
3f825b8d20 ffi/com: fix reference counting
Don't AddRef() on "in" arguments, do AddRef() on "out"
or "in-out" arguments.
2012-09-01 09:48:35 -06:00
Matthew Flatt
f1ff9c6059 ffi/com: fix unmarshal of by-ref results 2012-09-01 09:48:35 -06:00
Matthew Flatt
eb7fd51d02 ffi/com: add `any ...' support for method arguments
Also allow `?' for the length of an array and suport VT_SAFEARRAY
arguments (mostly the same as VT_ARRAY).
2012-09-01 09:48:35 -06:00
Matthew Flatt
e407303c5e ffi/com: add missing export 2012-09-01 09:48:34 -06:00
Matthew Flatt
3a2b562ff4 remove debugging printf 2012-09-01 09:48:34 -06:00
Matthew Flatt
d11e58b639 ffi/unsafe/atomic: add `in-atomic-mode?'
The new function can be useful for debugging, at least.
2012-08-31 07:33:08 -06:00
Matthew Flatt
d953bc27ba fix `ffi/unsafe/nsalloc'
Using `call-as-atomic' isn't right, because that allows an escape
via `call-as-nonatomic'. Assuming that `call-as-nonatomic' isn't
used, it seems like `call-as-atomic' should be ok, anyway, but
somehow its leads to unbalanced `end-atomic' calls.
2012-08-28 18:45:55 -06:00
Matthew Flatt
85b99de7b1 ffi/unsafe/objc: more support for loading in unsupported contexts 2012-08-27 19:47:44 -06:00
Matthew Flatt
7b49ad088a ffi/unsafe/objc: `objc_lookUpClass' produces #f when unavailable
This change allows `ffi/unsafe/nsstring', for example, to at least load
on all platforms.
2012-08-27 10:29:55 -06:00
Matthew Flatt
a523270025 ffi/com: repair for DCOM instance creation 2012-08-27 08:57:01 -06:00
Matthew Flatt
088d1dadb4 add ffi/unsafe/nsalloc' and ffi/unsafe/nsstring' 2012-08-24 15:48:58 -06:00
Matthew Flatt
0452bd791d bytecode optimizer improvement
Treat unsafe functional operations (which never raise an
exception) as omitable, which means that simple `let-values'
combinations can be split into `let' bindings, etc.
2012-08-16 13:11:41 -06:00
Matthew Flatt
bb3545ddf7 ffi/unsafe/custodian: #:atexit?' -> #:at-exit?' 2012-08-12 20:25:47 -06:00
Matthew Flatt
4e5b46405d ffi/com: release COM objects at exit
Uses the new `ffi/unsafe/custodian' library.
2012-08-12 20:17:29 -06:00
Matthew Flatt
42ef79c2ad add `ffi/unsafe/custodian' 2012-08-12 20:17:29 -06:00
Matthew Flatt
1d8791c7c4 ffi/unsafe: show errors from a finalizer
Previously, an error from a finalizer would disappear and kill
of the finalizer thread. Now the error is logged and the thread
continues.
2012-08-03 13:43:23 -06:00
Matthew Flatt
66eaa191e5 ffi/com: fix interaction with `racket/gui'
... and other things that use the Windows message
queue by not providing GCable arguments to
IDispatch::Invoke().

Merge to v5.3
2012-08-02 19:20:36 -06:00
Matthew Flatt
38ce4997a9 ffi/com: fix potential interaction of finalization and custodians
Includes new `#:manage?' optional argument to `make-com-object'
and better management of internally created objects.

Merge to v5.3
2012-08-02 16:29:03 -06:00
Matthew Flatt
572252daec ffi/com: thread safety
Protect internal data structures via atomic mode.

Merge to v5.3
2012-08-02 16:29:02 -06:00
Matthew Flatt
286efface0 ffi/com: adjust order in object release
Release type descriptors before type infos, and release type
infos before objects. (This reordering shouldn't matter if
referencing counting does its usual job, but maybe it's better
to use the obvious order.)

Merge to v5.3
2012-08-02 08:01:00 -06:00
Matthew Flatt
38167dd4fa ffi/com: remove stray quote
Merge to v5.3
2012-08-01 09:34:11 -06:00
Matthew Flatt
9b1db14328 ffi/com: fix clean-up of type descriptors
Merge to v5.3
2012-07-29 09:46:30 -06:00
Eli Barzilay
29d6d377fc Modernize (& racketize) ffi/examples. 2012-07-27 10:31:26 -04:00
Matthew Flatt
cd90510f07 ffi/com: AddRef on IUnknown arguments to COM methods
Merge to v5.3
2012-07-23 14:35:27 -05:00
Matthew Flatt
94498465e6 ffi/com: fix another instance of the `cast' bug
Overlooked it during the previous repair; this repair merges
the two formerly broken sites.
2012-07-19 20:20:33 -05:00
Matthew Flatt
c86ee5b6e2 ffi/com: fix an internal cast
Merge to v5.3
2012-07-19 19:02:54 -06:00