, this is used to provide rapid lookup of various information. For example, when parsing a '#define' statement, CPP flags each argument's identifier hash node with the index of that argument. This makes duplicated argument checking an O(1) operation for each argument. Similarly, for each identifier in the macro's expansion, lookup to see if it is an argument, and which argument it is, is also an O(1) operation. Further, each directive name, such as 'endif', has an associated directive enum stored in its hash node, so that directive lookup is also O(1).