Mercurial > hg > truffle
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(); |