public override AstNode Visit(DereferenceOperation node) { // Evaluate the pointer. Expression pointerExpr = node.GetPointer(); pointerExpr.Accept(this); // Get the pointer type. IChelaType pointerType = pointerExpr.GetNodeType(); if(pointerType.IsReference()) pointerType = DeReferenceType(pointerType); // Constant pointer aren't problems. if(pointerType.IsConstant()) pointerType = DeConstType(pointerType); // Must be a pointer. if(!pointerType.IsPointer()) Error(node, "expected pointer expression."); // Set the coercion type. node.SetCoercionType(pointerType); // Create the "variable". IChelaType slotType = DePointerType(pointerType); PointedSlot slot = new PointedSlot(slotType); node.SetNodeType(ReferenceType.Create(slotType)); node.SetNodeValue(slot); return node; }