mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
The main point of this change is to allow "global" capabilities defined on the base object type. The example here is the clone capability on all objects, which governs the ability to clone a handle. Related changes in this commit: - Renamed `kobject` to `object` as far as the syscall interface is concerned. `kobject` is the cname, but j6_cap_kobject_clone feels clunky. - The above change made me realize that the "object <type>" syntax for specifying object references was also clunky, so now it's "ref <type>" - Having to add `.object` on everywhere to access objects in interface.exposes or object.super was cumbersome, so those properties now return object types directly, instead of ObjectRef. - syscall_verify.cpp.cog now generates code to check capabilities on handles if they're specified in the definition, even when not passing an object to the implementation function.
32 lines
874 B
Modula-2
32 lines
874 B
Modula-2
import "objects/object.def"
|
|
|
|
# Processes are a collection of handles and a virtual memory
|
|
# space inside which threads are run.
|
|
|
|
object process : object {
|
|
uid 0c69ee0b7502ba31
|
|
|
|
capabilities [
|
|
kill
|
|
create_thread
|
|
]
|
|
|
|
# Create a new empty process
|
|
method create [constructor]
|
|
|
|
# Stop all threads and exit the given process
|
|
method kill [destructor cap:kill]
|
|
|
|
# Stop all threads and exit the current process
|
|
method exit [static] {
|
|
param result int32 # The result to retrun to the parent process
|
|
}
|
|
|
|
# Give the given process a handle that points to the same
|
|
# object as the specified handle.
|
|
method give_handle {
|
|
param target ref object [handle] # A handle in the caller process to send
|
|
param received ref object [out optional] # The handle as the recipient will see it
|
|
}
|
|
}
|