private static final Set<r8tor9> fileprotocol = new HashSet<r8tor9>();\r
private static final Set<String> filer8only = new HashSet<String>();\r
\r
+ private static final String[] specialhoblibfunc = {\r
+ "BuildModuleHob",\r
+ "BuildResourceDescriptorHob",\r
+ "BuildFvHob",\r
+ "BuildCpuHob",\r
+ "BuildStackHob",\r
+ "BuildBspStoreHob",\r
+ "BuildMemoryAllocationHob"\r
+ };\r
+ \r
//---------------------------------------inner classes---------------------------------------//\r
private static class r8tor9 {\r
r8tor9(String r8, String r9) {\r
// Converting Pei\r
// First , find all (**PeiServices)-> or (*PeiServices). with arg "PeiServices" , change name and add #%\r
Pattern ptnpei = Pattern.compile("\\(\\*\\*?PeiServices\\)[.-][>]?\\s*(\\w*)(\\s*\\(\\s*PeiServices\\s*,\\s*)", Pattern.MULTILINE);\r
- if (mi.moduletype.contains("PEIM")) {\r
+ if (mi.getModuleType().matches("PEIM")) {\r
+ //if (mi.moduletype.contains("PEIM")) {\r
Matcher mtrpei = ptnpei.matcher(wholeline);\r
while (mtrpei.find()) { // ! add a library here !\r
wholeline = mtrpei.replaceAll("PeiServices$1#%$2");\r
}\r
}\r
\r
+ wholeline = hobLibFuncDropStatus(wholeline);\r
+ \r
Matcher mtrmac;\r
mtrmac = Pattern.compile("EFI_IDIV_ROUND\\((.*), (.*)\\)").matcher(wholeline);\r
if (mtrmac.find()) {\r
}\r
}\r
//---------------------------------------inner classes---------------------------------------//\r
- \r
+\r
+ //-------------------------------------process functions-------------------------------------//\r
private static final String addincludefile(String wholeline, String hfile) {\r
return wholeline.replaceFirst("(\\*/\\s)", "$1\n#include " + hfile + "\n");\r
}\r
}\r
}\r
\r
+ private final String hobLibFuncDropStatus(String wholeline) { // or use regex to find pattern "Status = ..."\r
+ Pattern ptnhobstatus;\r
+ Matcher mtrhobstatus;\r
+ String templine = wholeline;\r
+ for (int i = 0; i < specialhoblibfunc.length; i++) {\r
+ ptnhobstatus = Pattern.compile("(Status\\s*=\\s*)?" + specialhoblibfunc[i] + "(.*?\\)\\s*;)", Pattern.DOTALL);\r
+ mtrhobstatus = ptnhobstatus.matcher(templine);\r
+ if (mtrhobstatus.find()) {\r
+ templine = mtrhobstatus.replaceAll(specialhoblibfunc[i] + mtrhobstatus.group(2) + "\n //Migration comments: R9 Hob-building library functions will assert if build failure.\n Status = EFI_SUCCESS;");\r
+ }\r
+ }\r
+ return templine;\r
+ }\r
+ \r
private final void addr8only() throws Exception {\r
String paragraph = null;\r
String line = Common.file2string(MigrationTool.db.DatabasePath + File.separator + "R8Lib.c");\r
PrintWriter outfile1 = new PrintWriter(new BufferedWriter(new FileWriter(MigrationTool.ModuleInfoMap.get(mi) + File.separator + "Migration_" + mi.modulename + File.separator + "R8Lib.c")));\r
PrintWriter outfile2 = new PrintWriter(new BufferedWriter(new FileWriter(MigrationTool.ModuleInfoMap.get(mi) + File.separator + "Migration_" + mi.modulename + File.separator + "R8Lib.h")));\r
- Pattern ptnr8only = Pattern.compile("////#?(\\w*)?.*?R8_(\\w*).*?////~", Pattern.DOTALL);\r
+ Pattern ptnr8only = Pattern.compile("////#?(\\w*)?(.*?R8_(\\w*).*?)////~", Pattern.DOTALL);\r
Matcher mtrr8only = ptnr8only.matcher(line);\r
Matcher mtrr8onlyhead;\r
+ \r
+ //add head comment\r
+ Matcher mtrr8onlyheadcomment = Critic.PTN_NEW_HEAD_COMMENT.matcher(line);\r
+ if (mtrr8onlyheadcomment.find()) {\r
+ outfile1.append(mtrr8onlyheadcomment.group() + "\n\n");\r
+ outfile2.append(mtrr8onlyheadcomment.group() + "\n\n");\r
+ }\r
+ \r
+ //add functions body\r
while (mtrr8only.find()) {\r
- if (mi.hashr8only.contains(mtrr8only.group(2))) {\r
- paragraph = mtrr8only.group();\r
+ if (mi.hashr8only.contains(mtrr8only.group(3))) {\r
+ paragraph = mtrr8only.group(2);\r
outfile1.append(paragraph + "\n\n");\r
if (mtrr8only.group(1).length() != 0) {\r
mi.hashrequiredr9libs.add(mtrr8only.group(1));\r
mi.localmodulesources.add("R8Lib.h");\r
mi.localmodulesources.add("R8Lib.c");\r
}\r
+ //-------------------------------------process functions-------------------------------------//\r
\r
//-----------------------------------ForDoAll-----------------------------------//\r
public void run(String filepath) throws Exception {\r