Mercurial > hg > graal-compiler
comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java @ 11439:efe58aa92f86
Truffle-DSL: guards can now be declared using any base type or interface of the target value type.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Tue, 27 Aug 2013 22:08:26 +0200 |
parents | 80de3bbfa8b9 |
children | 2868b55001d4 |
comparison
equal
deleted
inserted
replaced
11438:b77721210bd6 | 11439:efe58aa92f86 |
---|---|
256 valueParameter = sourceMethod.findParameter(targetParameter.getLocalName()); | 256 valueParameter = sourceMethod.findParameter(targetParameter.getLocalName()); |
257 } | 257 } |
258 if (valueParameter == null) { | 258 if (valueParameter == null) { |
259 valueParameter = targetParameter; | 259 valueParameter = targetParameter; |
260 } | 260 } |
261 TypeData targetType = targetParameter.getTypeSystemType(); | 261 TypeMirror targetType = targetParameter.getType(); |
262 | 262 |
263 if (targetParameter.isImplicit() || valueParameter.isImplicit()) { | 263 if (targetParameter.isImplicit() || valueParameter.isImplicit()) { |
264 continue; | 264 continue; |
265 } | 265 } |
266 | 266 |
267 TypeData valueType = null; | 267 TypeMirror valueType = null; |
268 if (valueParameter != null) { | 268 if (valueParameter != null) { |
269 valueType = valueParameter.getTypeSystemType(); | 269 valueType = valueParameter.getType(); |
270 } | 270 } |
271 | 271 |
272 if (signatureIndex < customSignatureValueNames.length && targetParameter.getSpecification().isSignature()) { | 272 if (signatureIndex < customSignatureValueNames.length && targetParameter.getSpecification().isSignature()) { |
273 builder.string(customSignatureValueNames[signatureIndex]); | 273 builder.string(customSignatureValueNames[signatureIndex]); |
274 signatureIndex++; | 274 signatureIndex++; |
281 } | 281 } |
282 builder.string(targetParameter.getSpecification().getName()); | 282 builder.string(targetParameter.getSpecification().getName()); |
283 builder.end(); | 283 builder.end(); |
284 } else if (unexpectedValueName != null && targetParameter.getLocalName().equals(unexpectedValueName)) { | 284 } else if (unexpectedValueName != null && targetParameter.getLocalName().equals(unexpectedValueName)) { |
285 builder.string("ex.getResult()"); | 285 builder.string("ex.getResult()"); |
286 } else if (targetType == null || targetType.isGeneric() || (valueType != null && valueType.equalsType(targetType))) { | 286 } else if (!Utils.needsCastTo(getContext(), valueType, targetType)) { |
287 builder.startGroup(); | 287 builder.startGroup(); |
288 | |
289 if (valueType != null && sourceMethod.getMethodName().equals(targetMethod.getMethodName()) && !valueType.isGeneric() && targetType.isGeneric()) { | |
290 builder.string("("); | |
291 builder.type(targetType.getPrimitiveType()); | |
292 builder.string(") "); | |
293 } | |
294 builder.string(valueName(targetParameter)); | 288 builder.string(valueName(targetParameter)); |
295 builder.end(); | 289 builder.end(); |
296 } else { | 290 } else { |
297 builder.string(castValueName(targetParameter)); | 291 builder.string(castValueName(targetParameter)); |
298 } | 292 } |