added userdata void * for parser tag function callback
This commit is contained in:
parent
606f8e4bad
commit
fcc07493d3
4 changed files with 25 additions and 21 deletions
|
|
@ -28,7 +28,7 @@ typedef void (* ARC_ParserData_DestroyFn)(void *data);
|
|||
/**
|
||||
* @brief TODO: write this
|
||||
*/
|
||||
typedef void (* ARC_ParserLanguageTag_AddDataFn)(void **data, uint32_t tagId, ARC_LexerToken *token);
|
||||
typedef void (* ARC_ParserLanguageTag_AddDataFn)(void **data, uint32_t tagId, ARC_LexerToken *token, void *userData);
|
||||
|
||||
/**
|
||||
* @brief a langue tag type for the parser //TODO: explain this better
|
||||
|
|
@ -40,6 +40,7 @@ typedef struct ARC_ParserLanguageTag {
|
|||
uint32_t tokensOrTagsSize;
|
||||
|
||||
ARC_ParserLanguageTag_AddDataFn *addDataFn;
|
||||
void *addUserData;
|
||||
} ARC_ParserLanguageTag;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ ARC_Bool ARC_Parser_ParseTag(ARC_Parser *parser, uint32_t *lexerIndex, uint32_t
|
|||
//iterate through the tokens with the add callback
|
||||
for(uint32_t index = 0; index < ARC_Vector_GetSize(foundTokens); index++){
|
||||
ARC_LexerToken *token = (ARC_LexerToken *)ARC_Vector_Get(foundTokens, index);
|
||||
(*(tag->addDataFn))(&(parser->data), tagId, token);
|
||||
(*(tag->addDataFn))(&(parser->data), tagId, token, tag->addUserData);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -76,19 +76,19 @@ void ARC_Parser_CreateAsParserLang(ARC_Parser **parser){
|
|||
uint32_t *alphaChar[] = { (uint32_t[]){ 1, ARC_PARSERLANG_TOKEN_ALPHA_LOWER_CHAR }, (uint32_t[]){ 1, ARC_PARSERLANG_TOKEN_ALPHA_UPPER_CHAR }};
|
||||
|
||||
ARC_ParserLanguageTag parserLangTags[13] = {
|
||||
{ ARC_PARSERLANG_LINE , line , 4, NULL },
|
||||
{ ARC_PARSERLANG_BODY , body , 1, NULL },
|
||||
{ ARC_PARSERLANG_ARGUMENTS , arguments , 2, NULL },
|
||||
{ ARC_PARSERLANG_ARGUMENT , argument , 2, NULL },
|
||||
{ ARC_PARSERLANG_TAG_OR_CONSTANT, tagOrConstant, 2, NULL },
|
||||
{ ARC_PARSERLANG_CONSTANT , constant , 1, NULL },
|
||||
{ ARC_PARSERLANG_CONSTANT_BODY , constantBody , 2, NULL },
|
||||
{ ARC_PARSERLANG_CONSTANT_CHAR , constantChar , 2, NULL },
|
||||
{ ARC_PARSERLANG_TAG , tag , 1, NULL },
|
||||
{ ARC_PARSERLANG_VARIABLE , variable , 2, NULL },
|
||||
{ ARC_PARSERLANG_VARIABLE_BODY , variableBody , 2, NULL },
|
||||
{ ARC_PARSERLANG_VARIABLE_CHAR , variableChar , 3, NULL },
|
||||
{ ARC_PARSERLANG_ALPHA_CHAR , alphaChar , 2, NULL }
|
||||
{ ARC_PARSERLANG_LINE , line , 4, NULL, NULL },
|
||||
{ ARC_PARSERLANG_BODY , body , 1, NULL, NULL },
|
||||
{ ARC_PARSERLANG_ARGUMENTS , arguments , 2, NULL, NULL },
|
||||
{ ARC_PARSERLANG_ARGUMENT , argument , 2, NULL, NULL },
|
||||
{ ARC_PARSERLANG_TAG_OR_CONSTANT, tagOrConstant, 2, NULL, NULL },
|
||||
{ ARC_PARSERLANG_CONSTANT , constant , 1, NULL, NULL },
|
||||
{ ARC_PARSERLANG_CONSTANT_BODY , constantBody , 2, NULL, NULL },
|
||||
{ ARC_PARSERLANG_CONSTANT_CHAR , constantChar , 2, NULL, NULL },
|
||||
{ ARC_PARSERLANG_TAG , tag , 1, NULL, NULL },
|
||||
{ ARC_PARSERLANG_VARIABLE , variable , 2, NULL, NULL },
|
||||
{ ARC_PARSERLANG_VARIABLE_BODY , variableBody , 2, NULL, NULL },
|
||||
{ ARC_PARSERLANG_VARIABLE_CHAR , variableChar , 3, NULL, NULL },
|
||||
{ ARC_PARSERLANG_ALPHA_CHAR , alphaChar , 2, NULL, NULL }
|
||||
};
|
||||
|
||||
ARC_Array parserLanguageArray = {
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ void TEST_ParserLanguageTag_DestroyStringFn(void *data){
|
|||
}
|
||||
|
||||
//for this very basic example, the tagId does not matter
|
||||
void TEST_ParserLanguageTag_AddFirstCharFn(void **data, uint32_t tagId, ARC_LexerToken *token){
|
||||
void TEST_ParserLanguageTag_AddFirstCharFn(void **data, uint32_t tagId, ARC_LexerToken *token, void *userData){
|
||||
if(*data == NULL){
|
||||
return;
|
||||
}
|
||||
|
|
@ -34,7 +34,7 @@ void TEST_ParserLanguageTag_AddFirstCharFn(void **data, uint32_t tagId, ARC_Lexe
|
|||
}
|
||||
|
||||
//for this very basic example, the tagId does not matter
|
||||
void TEST_ParserLanguageTag_AddCharFn(void **data, uint32_t tagId, ARC_LexerToken *token){
|
||||
void TEST_ParserLanguageTag_AddCharFn(void **data, uint32_t tagId, ARC_LexerToken *token, void *userData){
|
||||
if(*data == NULL){
|
||||
return;
|
||||
}
|
||||
|
|
@ -58,19 +58,22 @@ ARC_ParserLanguageTag testTags[3] = {
|
|||
VARIABLE, //tagId
|
||||
variableTokensOrTags, //tokensOrTags
|
||||
1, //tokenOrTagsSize
|
||||
&addFirstCharFn //addDataFn
|
||||
&addFirstCharFn, //addDataFn
|
||||
NULL //addUserData
|
||||
},
|
||||
{
|
||||
VARIABLE_NAME, //tagId
|
||||
variableNameTags, //tokensOrTags
|
||||
2, //tokenOrTagsSize
|
||||
NULL, //addDataFn
|
||||
NULL, //addDataFn
|
||||
NULL //addUserData
|
||||
},
|
||||
{
|
||||
CHAR_OR_NUM, //tagId
|
||||
charOrNumTokens, //tokensOrTags
|
||||
2, //tokenOrTagsSize
|
||||
&addCharFn //addDataFn
|
||||
&addCharFn, //addDataFn
|
||||
NULL //addUserData
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -111,10 +114,10 @@ ARC_TEST(Parser_Basic_Parse){
|
|||
|
||||
/* ~ second test ~ */
|
||||
ARC_String_CreateWithStrlen(&tempString, "z1xwvq");
|
||||
|
||||
//this destroys string, so no need for cleanup
|
||||
ARC_Parser_Parse(parser, &tempString);
|
||||
|
||||
|
||||
ARC_CHECK(arc_errno == 0);
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue