Beispiel #1
0
        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);
        }
Beispiel #2
0
        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
            {
                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);
            }
        }
Beispiel #5
0
        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);
            }
        }