Mercurial > hg > truffle
comparison truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/ComplexNumbersColumnBased.java @ 22499:9bba3a7b34be
Check foreign arguments when accessing ComplexNumber/Sequence objects
author | Matthias Grimmer <grimmer@ssw.jku.at> |
---|---|
date | Mon, 14 Dec 2015 15:07:19 +0100 |
parents | b3569a53c24c |
children | 89db2519ef18 |
comparison
equal
deleted
inserted
replaced
22498:ec40768d77a6 | 22499:9bba3a7b34be |
---|---|
95 @Child private Node readImag; | 95 @Child private Node readImag; |
96 | 96 |
97 @Override | 97 @Override |
98 public Object execute(VirtualFrame frame) { | 98 public Object execute(VirtualFrame frame) { |
99 ComplexNumbersColumnBased complexNumbers = (ComplexNumbersColumnBased) ForeignAccess.getReceiver(frame); | 99 ComplexNumbersColumnBased complexNumbers = (ComplexNumbersColumnBased) ForeignAccess.getReceiver(frame); |
100 Number index = (Number) ForeignAccess.getArguments(frame).get(0); | 100 Number index = TckLanguage.expectNumber(ForeignAccess.getArguments(frame).get(0)); |
101 TruffleObject value = (TruffleObject) ForeignAccess.getArguments(frame).get(1); | 101 TruffleObject value = TckLanguage.expectTruffleObject(ForeignAccess.getArguments(frame).get(1)); |
102 if (readReal == null || readImag == null) { | 102 if (readReal == null || readImag == null) { |
103 CompilerDirectives.transferToInterpreterAndInvalidate(); | 103 CompilerDirectives.transferToInterpreterAndInvalidate(); |
104 this.readReal = insert(Message.READ.createNode()); | 104 this.readReal = insert(Message.READ.createNode()); |
105 this.readImag = insert(Message.READ.createNode()); | 105 this.readImag = insert(Message.READ.createNode()); |
106 } | 106 } |
107 Number realPart = (Number) ForeignAccess.execute(readReal, frame, value, new Object[]{ComplexNumber.REAL_IDENTIFIER}); | 107 Number realPart = TckLanguage.expectNumber(ForeignAccess.execute(readReal, frame, value, new Object[]{ComplexNumber.REAL_IDENTIFIER})); |
108 Number imagPart = (Number) ForeignAccess.execute(readImag, frame, value, new Object[]{ComplexNumber.IMAGINARY_IDENTIFIER}); | 108 Number imagPart = TckLanguage.expectNumber(ForeignAccess.execute(readImag, frame, value, new Object[]{ComplexNumber.IMAGINARY_IDENTIFIER})); |
109 | 109 |
110 complexNumbers.reals[index.intValue()] = realPart.doubleValue(); | 110 complexNumbers.reals[index.intValue()] = realPart.doubleValue(); |
111 complexNumbers.imags[index.intValue()] = imagPart.doubleValue(); | 111 complexNumbers.imags[index.intValue()] = imagPart.doubleValue(); |
112 return value; | 112 return value; |
113 } | 113 } |
119 } | 119 } |
120 | 120 |
121 @Override | 121 @Override |
122 public Object execute(VirtualFrame frame) { | 122 public Object execute(VirtualFrame frame) { |
123 ComplexNumbersColumnBased complexNumbers = (ComplexNumbersColumnBased) ForeignAccess.getReceiver(frame); | 123 ComplexNumbersColumnBased complexNumbers = (ComplexNumbersColumnBased) ForeignAccess.getReceiver(frame); |
124 Number index = (Number) ForeignAccess.getArguments(frame).get(0); | 124 Number index = TckLanguage.expectNumber(ForeignAccess.getArguments(frame).get(0)); |
125 return new ComplexNumberBEntry(complexNumbers, index.intValue()); | 125 return new ComplexNumberBEntry(complexNumbers, index.intValue()); |
126 } | 126 } |
127 | 127 |
128 } | 128 } |
129 | 129 |
188 @Child private Node readImag; | 188 @Child private Node readImag; |
189 | 189 |
190 @Override | 190 @Override |
191 public Object execute(VirtualFrame frame) { | 191 public Object execute(VirtualFrame frame) { |
192 ComplexNumberBEntry complexNumber = (ComplexNumberBEntry) ForeignAccess.getReceiver(frame); | 192 ComplexNumberBEntry complexNumber = (ComplexNumberBEntry) ForeignAccess.getReceiver(frame); |
193 String name = (String) ForeignAccess.getArguments(frame).get(0); | 193 String name = TckLanguage.expectString(ForeignAccess.getArguments(frame).get(0)); |
194 if (name.equals(ComplexNumber.IMAGINARY_IDENTIFIER)) { | 194 if (name.equals(ComplexNumber.IMAGINARY_IDENTIFIER)) { |
195 return complexNumber.numbers.imags[complexNumber.index]; | 195 return complexNumber.numbers.imags[complexNumber.index]; |
196 } else if (name.equals(ComplexNumber.REAL_IDENTIFIER)) { | 196 } else if (name.equals(ComplexNumber.REAL_IDENTIFIER)) { |
197 return complexNumber.numbers.reals[complexNumber.index]; | 197 return complexNumber.numbers.reals[complexNumber.index]; |
198 } else { | 198 } else { |
207 } | 207 } |
208 | 208 |
209 @Override | 209 @Override |
210 public Object execute(VirtualFrame frame) { | 210 public Object execute(VirtualFrame frame) { |
211 ComplexNumberBEntry complexNumber = (ComplexNumberBEntry) ForeignAccess.getReceiver(frame); | 211 ComplexNumberBEntry complexNumber = (ComplexNumberBEntry) ForeignAccess.getReceiver(frame); |
212 String name = (String) ForeignAccess.getArguments(frame).get(0); | 212 String name = TckLanguage.expectString(ForeignAccess.getArguments(frame).get(0)); |
213 Number value = (Number) ForeignAccess.getArguments(frame).get(1); | 213 Number value = TckLanguage.expectNumber(ForeignAccess.getArguments(frame).get(1)); |
214 if (name.equals(ComplexNumber.IMAGINARY_IDENTIFIER)) { | 214 if (name.equals(ComplexNumber.IMAGINARY_IDENTIFIER)) { |
215 complexNumber.numbers.imags[complexNumber.index] = value.doubleValue(); | 215 complexNumber.numbers.imags[complexNumber.index] = value.doubleValue(); |
216 } else if (name.equals(ComplexNumber.REAL_IDENTIFIER)) { | 216 } else if (name.equals(ComplexNumber.REAL_IDENTIFIER)) { |
217 complexNumber.numbers.reals[complexNumber.index] = value.doubleValue(); | 217 complexNumber.numbers.reals[complexNumber.index] = value.doubleValue(); |
218 } else { | 218 } else { |