comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java @ 11603:152b4146f05b

Truffle-DSL: fix implicit cast bug.
author Andreas Woess <andreas.woess@jku.at>
date Tue, 10 Sep 2013 19:20:20 +0200
parents 5d5007c9a5aa
children 85b846b31690
comparison
equal deleted inserted replaced
11602:73dbd282ad3a 11603:152b4146f05b
1490 guardsBuilder.string(guardsAnd); 1490 guardsBuilder.string(guardsAnd);
1491 guardsBuilder.tree(implicitGuard); 1491 guardsBuilder.tree(implicitGuard);
1492 guardsAnd = " && "; 1492 guardsAnd = " && ";
1493 } 1493 }
1494 1494
1495 CodeTree cast = createCast(castBuilder, child, valueParam, typeGuard.getType(), minimumState); 1495 CodeTree cast = createCast(castBuilder, child, valueParam, typeGuard.getType(), checkMinimumState);
1496 if (cast != null) { 1496 if (cast != null) {
1497 castBuilder.tree(cast); 1497 castBuilder.tree(cast);
1498 } 1498 }
1499 } 1499 }
1500 1500
1603 builder.end(); // group 1603 builder.end(); // group
1604 1604
1605 return builder.getRoot(); 1605 return builder.getRoot();
1606 } 1606 }
1607 1607
1608 private CodeTree createCast(CodeTreeBuilder parent, NodeChildData field, ActualParameter source, TypeData targetType, boolean minimumState) { 1608 private CodeTree createCast(CodeTreeBuilder parent, NodeChildData field, ActualParameter source, TypeData targetType, boolean checkMinimumState) {
1609 NodeData node = field.getNodeData(); 1609 NodeData node = field.getNodeData();
1610 TypeData sourceType = source.getTypeSystemType(); 1610 TypeData sourceType = source.getTypeSystemType();
1611 1611
1612 if (!sourceType.needsCastTo(getContext(), targetType)) { 1612 if (!sourceType.needsCastTo(getContext(), targetType)) {
1613 return null; 1613 return null;
1630 1630
1631 CodeTree value = createCallTypeSystemMethod(context, parent, node, castMethodName, CodeTreeBuilder.singleString(valueName(source))); 1631 CodeTree value = createCallTypeSystemMethod(context, parent, node, castMethodName, CodeTreeBuilder.singleString(valueName(source)));
1632 1632
1633 CodeTreeBuilder builder = parent.create(); 1633 CodeTreeBuilder builder = parent.create();
1634 builder.tree(createLazyAssignment(parent, castValueName(source), targetType.getPrimitiveType(), condition, value)); 1634 builder.tree(createLazyAssignment(parent, castValueName(source), targetType.getPrimitiveType(), condition, value));
1635 if (minimumState && types.size() > 1) { 1635 if (checkMinimumState && types.size() > 1) {
1636 CodeTree castType = createCallTypeSystemMethod(context, parent, node, TypeSystemCodeGenerator.getImplicitClass(targetType), CodeTreeBuilder.singleString(valueName(source))); 1636 CodeTree castType = createCallTypeSystemMethod(context, parent, node, TypeSystemCodeGenerator.getImplicitClass(targetType), CodeTreeBuilder.singleString(valueName(source)));
1637 builder.tree(createLazyAssignment(builder, typeName(source), getContext().getType(Class.class), condition, castType)); 1637 builder.tree(createLazyAssignment(builder, typeName(source), getContext().getType(Class.class), condition, castType));
1638 } 1638 }
1639 1639
1640 return builder.getRoot(); 1640 return builder.getRoot();