diff --git a/Ghidra/Features/Base/data/parserprofiles/VisualStudio22_64.prf b/Ghidra/Features/Base/data/parserprofiles/VisualStudio22_64.prf index 88d953a047..4c06d1d14e 100644 --- a/Ghidra/Features/Base/data/parserprofiles/VisualStudio22_64.prf +++ b/Ghidra/Features/Base/data/parserprofiles/VisualStudio22_64.prf @@ -46,7 +46,6 @@ Windows.h accctrl.h aclapi.h aclui.h -advapi32.h adtgen.h authz.h azroles.h diff --git a/Ghidra/Features/Base/ghidra_scripts/CreateExampleGDTArchiveScript.java b/Ghidra/Features/Base/ghidra_scripts/CreateExampleGDTArchiveScript.java index bab606bb29..41f8ab3043 100644 --- a/Ghidra/Features/Base/ghidra_scripts/CreateExampleGDTArchiveScript.java +++ b/Ghidra/Features/Base/ghidra_scripts/CreateExampleGDTArchiveScript.java @@ -188,7 +188,6 @@ public class CreateExampleGDTArchiveScript extends GhidraScript { "accctrl.h", "aclapi.h", "aclui.h", - "advapi32.h", "adtgen.h", "authz.h", "azroles.h", diff --git a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj index c6e6d59c74..496c75e02b 100644 --- a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj +++ b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj @@ -1436,8 +1436,8 @@ void TranslationUnit() : {} void ExternalDeclaration() : {} { ( - LOOKAHEAD(FunctionDefinition() ) - FunctionDefinition() + LOOKAHEAD( FunctionDefinition() "{" ) + (FunctionDefinition() "{" [ StatementList() ] "}") | // FunctionDefinition() // | @@ -1492,7 +1492,7 @@ void FunctionDefinition() : { retDT = DeclarationSpecifiers(retDT) ] {typedefParsingStack.push(Boolean.FALSE);} - dec= Declarator(retDT, null) [ DeclarationList() ] {typedefParsingStack.pop();} CompoundStatement() + dec= Declarator(retDT, null) [ DeclarationList() ] {typedefParsingStack.pop();} { if (dec.getDataType() instanceof FunctionDefinition) { addDef(functions, dec.getName(), dec.getDataType()); @@ -2211,7 +2211,16 @@ DataType EnumSpecifier() : { dt= addDef(enums, enumName, enuum); } | - t= { dt= getEnumDef(t.image); } + t= + { + dt= getEnumDef(t.image); + if (dt == null) { + String enumName= (t != null ? t.image : ("enum_" + cnt++)); + EnumDataType enuum= new EnumDataType(getCurrentCategoryPath(), enumName, 4, dtMgr); + dt= enuum; + dt= addDef(enums, enumName, enuum); + } + } ) { return dt; @@ -2256,6 +2265,7 @@ int Enumerator(ArrayList list, int value) : { if (evalue != null) { value = evalue; } + list.add(new EnumMember(t.image, value)); return value; } } diff --git a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/CPP/CPP.jj b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/CPP/CPP.jj index 8d837647b4..df253f5548 100644 --- a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/CPP/CPP.jj +++ b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/CPP/CPP.jj @@ -1278,9 +1278,11 @@ public class PreProcessor { } } if (fis == null) { - addParseMessage(null, "PreProcessor: File " + filename + " not found."); + String msg = "PreProcessor: File " + filename + " not found."; + addParseMessage(null, msg); + Msg.error(this, msg); return false; - } + } fileStack.push(filename); alreadyDone = new HashMap(); ReInit(fis); diff --git a/Ghidra/Features/Base/src/test/resources/ghidra/app/util/cparser/CParserTest.h b/Ghidra/Features/Base/src/test/resources/ghidra/app/util/cparser/CParserTest.h index 6dd802956c..27717692a4 100644 --- a/Ghidra/Features/Base/src/test/resources/ghidra/app/util/cparser/CParserTest.h +++ b/Ghidra/Features/Base/src/test/resources/ghidra/app/util/cparser/CParserTest.h @@ -40,7 +40,7 @@ void testFunc() { typedef int InternFunc(int); -// TODO InternFunc * func = (InternFunc *) 0; + InternFunc * func = (InternFunc *) 0; } @@ -920,6 +920,16 @@ enum options_enum { TRINARY = (0 ? 10 : 11), }; +/** + ** Predeclare Enum + **/ + +typedef enum _PARAM_TYPE PARAM_TYPE; + +typedef int FuncUseEnum(PARAM_TYPE ptype); + +typedef enum _PARAM_TYPE { A, B, C } PARAM_TYPE; + /** ** Casting