				Tasks

Headers:
	Typedefs

	Prototypes (per-interface, per-operation, per-type).

Common:
	Allocation & freeing (per-type).

Stubs:
	Stubs (per-operation)
		Short-circuiting
		Setup
		Marshalling
		Exception & location_forward handling
		Sending
		Receiving
		Freeing/allocating values
		Demarshalling
		Return

Skeletons:
	Skeletons (per-operation)
		Allocating values
		Demarshalling
		Call
		Setup for reply
		Exception handling
		Marshalling
		Sending
		Freeing values
		Return


				(de)marshalling tasks

All (de)marshalling tasks can be represented using the following type of data
structure (PIDL):
	union MarshalNode switch(NodeType) {
		case VALUE: {
			string variable_name;
			short value_length;
		}
		case CONSTANT: {
			long value;
		}
		case ARRAY: {
			string pointer_name;
			MarshalNode num_entries;
		}

		IDL_tree corresponding_idl_node;
	};

Need to make a data structure that better represents "what we need to do"
rather than "what we are working on". Something that can say "(de)marshal
value|increment a pointer|loop back"... Optimization on this will be somewhat
easier.
