mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-21 00:25:44 +00:00
Parse forward declarations
This commit is contained in:
parent
83b7cd77c7
commit
57547854c4
@ -6,7 +6,7 @@ class ForwardDeclaration final : public DataDefinition
|
||||
{
|
||||
public:
|
||||
const DataDefinitionType m_forwarded_type;
|
||||
DataDefinition* m_definition;
|
||||
const DataDefinition* m_definition;
|
||||
|
||||
ForwardDeclaration(std::string _namespace, std::string name, DataDefinitionType type);
|
||||
|
||||
|
@ -9,10 +9,10 @@ SequenceForwardDecl::SequenceForwardDecl()
|
||||
|
||||
AddMatchers({
|
||||
create.Or({
|
||||
create.Type(HeaderParserValueType::ENUM),
|
||||
create.Type(HeaderParserValueType::STRUCT),
|
||||
create.Type(HeaderParserValueType::UNION)
|
||||
}),
|
||||
create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM),
|
||||
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
|
||||
create.Type(HeaderParserValueType::UNION).Tag(TAG_UNION)
|
||||
}).Capture(CAPTURE_TYPE),
|
||||
create.Identifier().Capture(CAPTURE_NAME),
|
||||
create.Char(';')
|
||||
});
|
||||
@ -20,4 +20,26 @@ SequenceForwardDecl::SequenceForwardDecl()
|
||||
|
||||
void SequenceForwardDecl::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const
|
||||
{
|
||||
const auto typeTag = result.NextTag();
|
||||
DataDefinitionType type;
|
||||
|
||||
switch(typeTag)
|
||||
{
|
||||
case TAG_ENUM:
|
||||
type = DataDefinitionType::ENUM;
|
||||
break;
|
||||
|
||||
case TAG_STRUCT:
|
||||
type = DataDefinitionType::STRUCT;
|
||||
break;
|
||||
|
||||
case TAG_UNION:
|
||||
type = DataDefinitionType::UNION;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw ParsingException(result.NextCapture(CAPTURE_TYPE).GetPos(), "Unknown type");
|
||||
}
|
||||
|
||||
state->AddForwardDeclaration(std::make_unique<ForwardDeclaration>(state->m_namespace.ToString(), result.NextCapture(CAPTURE_NAME).IdentifierValue(), type));
|
||||
}
|
||||
|
@ -11,7 +11,8 @@ class SequenceForwardDecl final : public HeaderParser::sequence_t
|
||||
static constexpr auto TAG_STRUCT = 2;
|
||||
static constexpr auto TAG_UNION = 3;
|
||||
|
||||
static constexpr auto CAPTURE_NAME = 1;
|
||||
static constexpr auto CAPTURE_TYPE = 1;
|
||||
static constexpr auto CAPTURE_NAME = 2;
|
||||
|
||||
protected:
|
||||
void ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const override;
|
||||
|
Loading…
x
Reference in New Issue
Block a user