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:
|
public:
|
||||||
const DataDefinitionType m_forwarded_type;
|
const DataDefinitionType m_forwarded_type;
|
||||||
DataDefinition* m_definition;
|
const DataDefinition* m_definition;
|
||||||
|
|
||||||
ForwardDeclaration(std::string _namespace, std::string name, DataDefinitionType type);
|
ForwardDeclaration(std::string _namespace, std::string name, DataDefinitionType type);
|
||||||
|
|
||||||
|
@ -9,10 +9,10 @@ SequenceForwardDecl::SequenceForwardDecl()
|
|||||||
|
|
||||||
AddMatchers({
|
AddMatchers({
|
||||||
create.Or({
|
create.Or({
|
||||||
create.Type(HeaderParserValueType::ENUM),
|
create.Type(HeaderParserValueType::ENUM).Tag(TAG_ENUM),
|
||||||
create.Type(HeaderParserValueType::STRUCT),
|
create.Type(HeaderParserValueType::STRUCT).Tag(TAG_STRUCT),
|
||||||
create.Type(HeaderParserValueType::UNION)
|
create.Type(HeaderParserValueType::UNION).Tag(TAG_UNION)
|
||||||
}),
|
}).Capture(CAPTURE_TYPE),
|
||||||
create.Identifier().Capture(CAPTURE_NAME),
|
create.Identifier().Capture(CAPTURE_NAME),
|
||||||
create.Char(';')
|
create.Char(';')
|
||||||
});
|
});
|
||||||
@ -20,4 +20,26 @@ SequenceForwardDecl::SequenceForwardDecl()
|
|||||||
|
|
||||||
void SequenceForwardDecl::ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const
|
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_STRUCT = 2;
|
||||||
static constexpr auto TAG_UNION = 3;
|
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:
|
protected:
|
||||||
void ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const override;
|
void ProcessMatch(HeaderParserState* state, SequenceResult<HeaderParserValue>& result) const override;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user