private void writeInlines(DirectiveWriter dirFile) { List<String> c1Block = new ArrayList<>(); List<String> c2Block = new ArrayList<>(); List<String> allBlock = new ArrayList<>(); for (CompileCommand cc : inlines) { String inlineMethodPattern; switch (cc.command) { case INLINE: inlineMethodPattern = "+" + cc.methodDescriptor.getString(); break; case DONTINLINE: inlineMethodPattern = "-" + cc.methodDescriptor.getString(); break; default: throw new Error("TESTBUG: incorrect command got in " + "the list: " + cc.command); } if (cc.compiler == Scenario.Compiler.C1) { c1Block.add(inlineMethodPattern); } else if (cc.compiler == Scenario.Compiler.C2) { c2Block.add(inlineMethodPattern); } else { allBlock.add(inlineMethodPattern); } } dirFile.emitCompiler(Scenario.Compiler.C1); if (!c1Block.isEmpty()) { dirFile.inline(c1Block); } else { dirFile.option(DirectiveWriter.Option.ENABLE, true); } dirFile.end(); dirFile.emitCompiler(Scenario.Compiler.C2); if (!c2Block.isEmpty()) { dirFile.inline(c2Block); } else { dirFile.option(DirectiveWriter.Option.ENABLE, true); } dirFile.end(); if (!allBlock.isEmpty()) { dirFile.inline(allBlock); } }
private void handleCommand(DirectiveWriter dirFile, CompileCommand cmd) { Command command = cmd.command; switch (command) { case COMPILEONLY: dirFile.excludeCompile(cmd.compiler, false); break; case EXCLUDE: dirFile.excludeCompile(cmd.compiler, true); break; case QUIET: /* there are no appropriate directive for this, just make match be enabled */ case INLINE: case DONTINLINE: /* Inline commands will be written later. Just make this match be enabled */ dirFile.emitCompiler(Scenario.Compiler.C1); dirFile.option(DirectiveWriter.Option.ENABLE, true); dirFile.end(); dirFile.emitCompiler(Scenario.Compiler.C2); dirFile.option(DirectiveWriter.Option.ENABLE, true); dirFile.end(); break; case LOG: dirFile.option(DirectiveWriter.Option.LOG, true); break; case PRINT: dirFile.option(DirectiveWriter.Option.PRINT_ASSEMBLY, true); break; case NONEXISTENT: dirFile.write(JSONFile.Element.PAIR, command.name); dirFile.write(JSONFile.Element.OBJECT); dirFile.write(JSONFile.Element.PAIR, command.name); dirFile.write(JSONFile.Element.VALUE, cmd.methodDescriptor.getString()); dirFile.end(); // ends object break; default: throw new Error("TESTBUG: wrong command: " + command); } }