public void VisitNode(JSReadThroughPointerExpression rtpe) { TypeReference elementType; var address = ComputeAddress(rtpe.Pointer, rtpe.OffsetInElements, rtpe.OffsetInBytes, out elementType); var synthesized = new GetMemory(elementType, false, address); Visit(synthesized); }
public void VisitNode(JSReadThroughPointerExpression rtpe) { JSExpression newPointer, offset; if (ExtractOffsetFromPointerExpression(rtpe.Pointer, TypeSystem, out newPointer, out offset)) { var replacement = new JSReadThroughPointerExpression(newPointer, rtpe.ElementType, offset); ParentNode.ReplaceChild(rtpe, replacement); VisitReplacement(replacement); } else { VisitChildren(rtpe); } }
public void VisitNode (JSReadThroughPointerExpression rtpe) { JSExpression newPointer, offset; if (ExtractOffsetFromPointerExpression(rtpe.Pointer, TypeSystem, out newPointer, out offset)) { var replacement = new JSReadThroughPointerExpression(newPointer, rtpe.ElementType, offset); ParentNode.ReplaceChild(rtpe, replacement); VisitReplacement(replacement); } else if (JSPointerExpressionUtil.UnwrapExpression(rtpe.Pointer) is JSBinaryOperatorExpression) { var replacement = new JSUntranslatableExpression("Read through confusing pointer " + rtpe.Pointer); ParentNode.ReplaceChild(rtpe, replacement); VisitReplacement(replacement); } else { VisitChildren(rtpe); } }
public void VisitNode(JSReadThroughPointerExpression rtpe) { JSExpression newPointer, offset; if (ExtractOffsetFromPointerExpression(rtpe.Pointer, TypeSystem, out newPointer, out offset)) { var replacement = new JSReadThroughPointerExpression(newPointer, rtpe.ElementType, offset); ParentNode.ReplaceChild(rtpe, replacement); VisitReplacement(replacement); } else if (JSPointerExpressionUtil.UnwrapExpression(rtpe.Pointer) is JSBinaryOperatorExpression) { var replacement = new JSUntranslatableExpression("Read through confusing pointer " + rtpe.Pointer); ParentNode.ReplaceChild(rtpe, replacement); VisitReplacement(replacement); } else { VisitChildren(rtpe); } }