<> <> <> <> <> <> <> <> DIRECTORY LupineManagerPrivate USING [ ErrorCode, Nest, Options, ParamPassingMethod, String, StringNIL], LupineMarshal USING [ AllocZone, Chars, FieldInfo, ParamInfo, ParamLocation, ParamProcedure, ParamRecordKind, VariableNames, Words ], LupineSymbolTable USING [ SymbolHandle, SymbolHandleNIL, TypeHandle, TypeHandleNIL, TypeInfo ], Rope USING [ROPE], RPCLupine USING [maxDataLength, maxShortStringLength]; LupineMarshalPrivate: DEFINITIONS = BEGIN OPEN LupineManagerPrivate, LupineMarshal, ST: LupineSymbolTable; <> MaxDataLength, MaxDataSize: Words = RPCLupine.maxDataLength; <> MaxShortStringLength: Chars = RPCLupine.maxShortStringLength; <> DynamicSizeThreshhold: Words = MaxDataSize; <> <> MaxPointerDepth: INTEGER = 4; <> <> <> NeedsOperationProc: TYPE = PROCEDURE [type: ST.TypeHandle] RETURNS [--yes:-- BOOLEAN]; NeedsMarshaling: NeedsOperationProc; ContainsRefs: NeedsOperationProc; ContainsEmbeddedPtrs: NeedsOperationProc; ContainsStatics: NeedsOperationProc; ContainsSequences: NeedsOperationProc; Cardinality: PROCEDURE [index: ST.TypeHandle] RETURNS [LONG INTEGER]; VectorSize: PROCEDURE [vectorInfo: ST.TypeInfo] RETURNS [size: Words]; HasDynamicIndex: PROCEDURE [vectorInfo: ST.TypeInfo] RETURNS [--yes:-- BOOLEAN] = INLINE {RETURN[VectorSize[vectorInfo] > DynamicSizeThreshhold]}; HasEmptyIndex: PROCEDURE [index: ST.TypeHandle] RETURNS [--yes:-- BOOLEAN] = INLINE {RETURN[Cardinality[index] = 0]}; IsShortString: PROCEDURE [candidate: ST.TypeHandle] RETURNS [yes: BOOLEAN]; IsExplicitHandle: PROCEDURE [typeInfo: ST.TypeInfo] RETURNS [yes: BOOLEAN]; <> <> <> MarshalInfo: TYPE = POINTER TO MarshalInfoObject; MarshalInfoObject: TYPE = RECORD [ paramInfo: ParamInfo, paramFieldInfo: FieldInfo, varNames: VariableNames, direction: Direction, <> depth, ptrDepth: LONG INTEGER _ 0, <> numAllocs: ARRAY AllocZone OF LONG INTEGER _ ALL[0] ]; ParentInfo: TYPE = RECORD [ name: String _ StringNIL, typeInfo: ST.TypeInfo _ [info: Null[]] ]; ParentInfoNull: ParentInfo = []; Direction: TYPE = {toPkt, fromPkt}; SubStrings: TYPE = RECORD [s1, s2, s3: String _ StringNIL]; OperationProc: TYPE = PROCEDURE [ name: String, type: ST.TypeHandle, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; <> MarshalType: OperationProc; <> MarshalTransfer: PROCEDURE [ name: String, transferInfo: Transfer ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; MarshalRecord: PROCEDURE [ name: String, recInfo: Record ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; MarshalVariantPart: PROCEDURE [ name: String, varInfo: VariantPart ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; MarshalPointer: PROCEDURE [ name: String, pointerInfo: Pointer ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; MarshalRef: PROCEDURE [ name: String, refInfo: Ref ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; MarshalList: PROCEDURE [ name: String, listInfo: List ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; MarshalArray: PROCEDURE [ name: String, arrayInfo: Array ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; MarshalDescriptor: PROCEDURE [ name: String, descInfo: Descriptor ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; MarshalSequence: PROCEDURE [ name: String, seqInfo: Sequence ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest, options: Options ]; <<>> <> <<>> InitMarshalTypes: PROC; WriteMarshalProcs: PROC; <<>> <> VerifyPassingMethods: PROCEDURE [ var, value, result, handle, all: BOOLEAN _ FALSE, marshalInfo: MarshalInfo ]; UniqueName: PROCEDURE [ root: String, suffix: String _ StringNIL, marshalInfo: MarshalInfo ] RETURNS[nameString: String]; Passing: PROCEDURE [ passingMethod: ParamPassingMethod, paramKind: ParamRecordKind, marshalInfo: MarshalInfo ] RETURNS [--yes:-- BOOLEAN] = INLINE BEGIN RETURN[ marshalInfo.paramFieldInfo.passingMethod = passingMethod AND marshalInfo.paramInfo.paramRecordKind = paramKind ]; END; <> CopyOne: PROCEDURE [ wordsNeeded: Words, value: SubStrings, nullValue, oneStmt: BOOLEAN_FALSE, marshalInfo: MarshalInfo, nest: Nest ]; CopyTwo: PROCEDURE [ wordsNeeded: Words, value: SubStrings, nullValue, oneStmt: BOOLEAN_FALSE, marshalInfo: MarshalInfo, nest: Nest ]; CopyCharacters: PROCEDURE [ textName: SubStrings, numCharsName: String, marshalInfo: MarshalInfo, nest: Nest ]; CopyType, CopyUninterpreted: PROCEDURE [ variableName: String, variableInfo: ST.TypeInfo, parentInfo: ParentInfo, marshalInfo: MarshalInfo, nest: Nest ]; AllocationOperation: TYPE = {new, cons, list}; WriteNEW: PROCEDURE [ allocOp: AllocationOperation _ new, ptrInfo: ST.TypeInfo, marshalInfo: --VAR-- MarshalInfo, options: Options, dontUseHeap: BOOL _ FALSE ] RETURNS [allocSizeName: Rope.ROPE _ NIL]; <> EnumerateOverlayParams: PROCEDURE [ paramInfo: ParamInfo, overlayProc: ParamProcedure ] = INLINE BEGIN EnumerateSomeParams[paramInfo, overlayProc, inPktOverlay, inFrameAndOverlay]; END; EnumerateFrameParams: PROCEDURE [ paramInfo: ParamInfo, frameProc: ParamProcedure ] = INLINE BEGIN EnumerateSomeParams[paramInfo, frameProc, inFrame, inFrameAndOverlay]; END; EnumerateSomeParams: PRIVATE PROCEDURE [ paramInfo: ParamInfo, proc: ParamProcedure, place1, place2: ParamLocation ]; Error: PROCEDURE [ code: ErrorCode, symbol: ST.SymbolHandle _ ST.SymbolHandleNIL, type: ST.TypeHandle _ ST.TypeHandleNIL, string: String _ StringNIL, causeError: BOOLEAN _ TRUE ]; Warning: PROCEDURE [ code: ErrorCode, symbol: ST.SymbolHandle _ ST.SymbolHandleNIL, type: ST.TypeHandle _ ST.TypeHandleNIL, string: String _ StringNIL, causeError: BOOLEAN _ FALSE ]; END. -- LupineMarshalPrivate.