public static function hash($object, $algoOrCtx = 'md5', $raw = FALSE)
	{
		if (is_string($algoOrCtx)) {
			$ctx = hash_init($algoOrCtx);
		} else {
			$ctx = $algoOrCtx;
		}

		if (isset($object->path)) {
			hash_update($ctx, 'path');
			foreach ($object->path instanceof \Traversable ? $object->path : (array)$object->path as $v0) {
				hash_update($ctx, (string)$v0);
			}
		}

		if (isset($object->span)) {
			hash_update($ctx, 'span');
			foreach ($object->span instanceof \Traversable ? $object->span : (array)$object->span as $v0) {
				hash_update($ctx, (string)$v0);
			}
		}

		if (isset($object->leadingComments)) {
			hash_update($ctx, 'leadingComments');
			hash_update($ctx, (string)$object->leadingComments);
		}

		if (isset($object->trailingComments)) {
			hash_update($ctx, 'trailingComments');
			hash_update($ctx, (string)$object->trailingComments);
		}

		if (isset($object->leadingDetachedComments)) {
			hash_update($ctx, 'leadingDetachedComments');
			foreach ($object->leadingDetachedComments instanceof \Traversable ? $object->leadingDetachedComments : (array)$object->leadingDetachedComments as $v0) {
				hash_update($ctx, (string)$v0);
			}
		}

		if (is_string($algoOrCtx)) {
			return hash_final($ctx, $raw);
		} else {
			return null;
		}
	}