* functions to copy pi trees to pTrees
* a mongo switch statement to farm out the actual copying
* to the appropriate routines.
* given a pointer to a pi tree branch, it returns a pPointer to
* a pTree copy of that branch.
return PackTCopy( node
);
return EnumTCopy( node
);
return RangeTCopy( node
);
return ArrayTCopy( node
);
return FileTCopy( node
);
return FldlstCopy( node
);
return FieldCopy( node
);
return VarntCopy( node
);
return VCaseCopy( node
);
return CasedCopy( node
);
return ParamCopy( node
);
return ThreadSymbol( node
[1] );
return ThreadSymbol( node
[2] );
return PCallCopy( node
);
return ListCopy( node
[2] );
return CaseSCopy( node
);
return WhileCopy( node
);
return RepeatCopy( node
);
return LabelCopy( node
);
return AssertCopy( node
);
return AssignCopy( node
);
return FCallCopy( node
);
return RangeCopy( node
);
return SubscCopy( node
);
return BinOpCopy( node
);
return WidthCopy( node
);
* copy a list of nodes into ListNodes
* (with a hack for appending one list to another
* for example: labelled statements)
for ( listp
= listnode
; listp
!= NIL
; listp
= (int *) listp
[2] ) {
List
= pNewNode( ListTAG
, sizeof( struct ListNode
) );
Item
= tCopy( listp
[1] );
pDEF( List
).ListItem
= Item
;
pDEF( List
).ListDown
= pNIL
;
pDEF( List
).ListUp
= After
;
pDEF( After
).ListDown
= List
;
* if ListItem is a ListNode whose ListUp is non-pNIL
* append that list to this list, using that ListUp
* as an additional ListItem.
&& pTAG( Furthur
) == ListTAG
&& pUSE( Furthur
).ListUp
!= pNIL
) {
Item
= pUSE( Furthur
).ListUp
;
pDEF( List
).ListItem
= Item
;
pDEF( Furthur
).ListUp
= List
;
pDEF( List
).ListDown
= Furthur
;
Furthur
= pUSE( After
).ListDown
;
} while ( Furthur
!= pNIL
);
* append a random item to the end of a list
* (with a hack for appending one list to another
* e.g. labelled statments)
ListAppend( list
, item
)
pPointer List
= pNewNode( ListTAG
, sizeof( struct ListNode
) );
pDEF( List
).ListItem
= item
;
pDEF( List
).ListDown
= pNIL
;
while ( ( Furthur
= pUSE( After
).ListDown
) != pNIL
)
pDEF( After
).ListDown
= List
;
pDEF( List
).ListUp
= After
;
* if item is a ListNode whose ListUp is non-pNIL
* append that list to this list, using that ListUp
* as an additional ListItem.
&& pTAG( Furthur
) == ListTAG
&& pUSE( Furthur
).ListUp
!= pNIL
) {
pDEF( List
).ListDown
= Furthur
;
pDEF( List
).ListItem
= pUSE( Furthur
).ListUp
;
pDEF( Furthur
).ListUp
= List
;
* copy an integer (string) to an IntNode
pPointer Int
= pNewNode( IntTAG
, sizeof( struct IntNode
) );
pDEF( Int
).IntValue
= atol( intstring
);
* copy a float (string) to a RealNode
pPointer Real
= pNewNode( RealTAG
, sizeof( struct RealNode
) );
pDEF( Real
).RealValue
= atof( realstring
);
* copy a string to a StringNode
String
= pNewNode( StringTAG
, strlen( string
) + 1 );
strcpy( pDEF( String
).StringValue
, string
);