+ def visitLinearPointer(self, pointer):
+ pointer_type = self.visit(pointer.type)
+ if pointer_type is pointer.type:
+ return pointer
+ else:
+ return LinearPointer(pointer_type)
+
+ def visitReference(self, reference):
+ reference_type = self.visit(reference.type)
+ if reference_type is reference.type:
+ return reference
+ else:
+ return Reference(reference_type)
+
+ def visitHandle(self, handle):
+ handle_type = self.visit(handle.type)
+ if handle_type is handle.type:
+ return handle
+ else:
+ return Handle(handle.name, handle_type, range=handle.range, key=handle.key)
+
+ def visitAlias(self, alias):
+ alias_type = self.visit(alias.type)
+ if alias_type is alias.type:
+ return alias
+ else:
+ return Alias(alias.expr, alias_type)
+
+ def visitOpaque(self, opaque):