marshalName: String = StartReadonly[ nest: nest,
name: name, typeInfo: typeInfo,
marshalInfo: marshalInfo ];
WITH typeInfo: typeInfo
SELECT
FROM
Null, Basic, RelativePtr, Opaque =>
These basic types just need copying.
Private.CopyType[ nest: nest,
variableName: marshalName, variableInfo: typeInfo,
parentInfo: parentInfo, marshalInfo: marshalInfo ];
Transfer => Private.MarshalTransfer[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Record => Private.MarshalRecord[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
VariantPart => Private.MarshalVariantPart[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Pointer => Private.MarshalPointer[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Ref => Private.MarshalRef[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
List => Private.MarshalList[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
String => MarshalString[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Rope => MarshalRope[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Atom => MarshalAtom[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
StringBody => MarshalStringBody[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Text => MarshalText[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Array => Private.MarshalArray[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Descriptor => Private.MarshalDescriptor[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Sequence => Private.MarshalSequence[
marshalName, typeInfo, parentInfo, marshalInfo, nest];
Zone =>
-- Zones must be handles.
Private.Error[code: ImproperPassingMethod, type: type];
Definition, Any, Other =>
ERROR; -- Unimplemented marshalings should be caught above.
ENDCASE => ERROR;
StopReadonly[ nest: nest,
name: name, typeInfo: typeInfo,
marshalName: marshalName, marshalInfo: marshalInfo ];