Ryan Culpepper <ryanc@racket-lang.org>
syntax
( define-interface name-id(super-ifc-id...)(method-id...))
A static interface name is used by the checked method call variants (send/i , send*/i , and send/apply/i ). When used as an expression, a static interface name evaluates to an interface value.
> stack<%>#<interface:stack<%>>
syntax
( define-interface/dynamic name-idifc-expr(method-id...))
Use define-interface/dynamic to wrap interfaces from other sources.
> object<%>#<interface:object%>
syntax
( send/i obj-expstatic-ifc-idmethod-idarg-expr...)
The argument static-ifc-id must be defined as a static interface. The method method-id must be a member of the static interface static-ifc-id; otherwise a compile-time error is raised.
The value of obj-expr must be an instance of the interface static-ifc-id; otherwise, a run-time error is raised.
eval:9:0: send/i: method not in static interface
in: popp
send/i: interface check failed on: (object)
syntax
( send*/i obj-exprstatic-ifc-id(method-idarg-expr...)...)
syntax
( send/apply/i obj-exprstatic-ifc-idmethod-idarg-expr...list-arg-expr)
syntax
( define/i idstatic-ifc-idexpr)
No dynamic object check is performed when calling a method (using send/i , etc) on a name defined via define/i .
syntax
( init/i (idstatic-ifc-idmaybe-default-expr)...)
syntax
( init-field/i (idstatic-ifc-idmaybe-default-expr)...)
syntax
( init-private/i (idstatic-ifc-idmaybe-default-expr)...)
maybe-default-expr = ()| default-expr
No dynamic object check is performed when calling a method (using send/i , etc) on a name bound via one of these forms. Note that in the case of init-field/i this check omission is unsound in the presence of mutation from outside the class. This should be fixed.
syntax
( define-interface-expander idtransformer-expr)
((stack-methods)))'(empty? push pop)