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 }