Mercurial > hg > graal-jvmci-8
comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java @ 8592:a80bf36c6a1e
Refactor to shared template method signature comparison.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 01 Apr 2013 11:52:38 +0200 |
parents | 676fa31bd3f0 |
children | 8a1115c92271 |
comparison
equal
deleted
inserted
replaced
8591:5c58da5b8233 | 8592:a80bf36c6a1e |
---|---|
260 private CodeTree createGuardAndCast(CodeTreeBuilder parent, String conditionPrefix, SpecializationData valueSpecialization, SpecializationData guardedSpecialization, boolean onSpecialization, | 260 private CodeTree createGuardAndCast(CodeTreeBuilder parent, String conditionPrefix, SpecializationData valueSpecialization, SpecializationData guardedSpecialization, boolean onSpecialization, |
261 CodeTree guardedStatements, CodeTree elseStatements) { | 261 CodeTree guardedStatements, CodeTree elseStatements) { |
262 | 262 |
263 CodeTreeBuilder builder = new CodeTreeBuilder(parent); | 263 CodeTreeBuilder builder = new CodeTreeBuilder(parent); |
264 CodeTree implicitGuards = createImplicitGuards(parent, conditionPrefix, valueSpecialization, guardedSpecialization); | 264 CodeTree implicitGuards = createImplicitGuards(parent, conditionPrefix, valueSpecialization, guardedSpecialization); |
265 CodeTree explicitGuards = createExplicitGuards(parent, implicitGuards == null ? conditionPrefix : null, valueSpecialization, guardedSpecialization, onSpecialization); | 265 CodeTree explicitGuards = createExplicitGuards(parent, implicitGuards == null ? conditionPrefix : null, valueSpecialization, guardedSpecialization); |
266 | 266 |
267 int ifCount = 0; | 267 int ifCount = 0; |
268 | 268 |
269 if (implicitGuards != null) { | 269 if (implicitGuards != null) { |
270 builder.startIf(); | 270 builder.startIf(); |
300 builder.tree(elseStatements); | 300 builder.tree(elseStatements); |
301 } | 301 } |
302 return builder.getRoot(); | 302 return builder.getRoot(); |
303 } | 303 } |
304 | 304 |
305 private CodeTree createExplicitGuards(CodeTreeBuilder parent, String conditionPrefix, SpecializationData valueSpecialization, SpecializationData guardedSpecialization, boolean onSpecialization) { | 305 private CodeTree createExplicitGuards(CodeTreeBuilder parent, String conditionPrefix, SpecializationData valueSpecialization, SpecializationData guardedSpecialization) { |
306 CodeTreeBuilder builder = new CodeTreeBuilder(parent); | 306 CodeTreeBuilder builder = new CodeTreeBuilder(parent); |
307 String andOperator = conditionPrefix != null ? conditionPrefix + " && " : ""; | 307 String andOperator = conditionPrefix != null ? conditionPrefix + " && " : ""; |
308 if (guardedSpecialization.getGuards().size() > 0) { | 308 if (guardedSpecialization.getGuards().size() > 0) { |
309 // Explicitly specified guards | 309 // Explicitly specified guards |
310 for (SpecializationGuardData guard : guardedSpecialization.getGuards()) { | 310 for (GuardData guard : guardedSpecialization.getGuards()) { |
311 if ((guard.isOnSpecialization() && onSpecialization) || (guard.isOnExecution() && !onSpecialization)) { | 311 builder.string(andOperator); |
312 builder.string(andOperator); | 312 builder.tree(createTemplateMethodCall(parent, guard, valueSpecialization, guardedSpecialization, null)); |
313 builder.tree(createTemplateMethodCall(parent, guard.getGuardDeclaration(), valueSpecialization, guardedSpecialization, null)); | 313 andOperator = " && "; |
314 andOperator = " && "; | |
315 } | |
316 } | 314 } |
317 } | 315 } |
318 | 316 |
319 return builder.isEmpty() ? null : builder.getRoot(); | 317 return builder.isEmpty() ? null : builder.getRoot(); |
320 } | 318 } |