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 }