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
|
* @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
|
* @brief a langue tag type for the parser //TODO: explain this better
|
||||||
|
|
@ -40,6 +40,7 @@ typedef struct ARC_ParserLanguageTag {
|
||||||
uint32_t tokensOrTagsSize;
|
uint32_t tokensOrTagsSize;
|
||||||
|
|
||||||
ARC_ParserLanguageTag_AddDataFn *addDataFn;
|
ARC_ParserLanguageTag_AddDataFn *addDataFn;
|
||||||
|
void *addUserData;
|
||||||
} ARC_ParserLanguageTag;
|
} 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
|
//iterate through the tokens with the add callback
|
||||||
for(uint32_t index = 0; index < ARC_Vector_GetSize(foundTokens); index++){
|
for(uint32_t index = 0; index < ARC_Vector_GetSize(foundTokens); index++){
|
||||||
ARC_LexerToken *token = (ARC_LexerToken *)ARC_Vector_Get(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 }};
|
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_ParserLanguageTag parserLangTags[13] = {
|
||||||
{ ARC_PARSERLANG_LINE , line , 4, NULL },
|
{ ARC_PARSERLANG_LINE , line , 4, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_BODY , body , 1, NULL },
|
{ ARC_PARSERLANG_BODY , body , 1, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_ARGUMENTS , arguments , 2, NULL },
|
{ ARC_PARSERLANG_ARGUMENTS , arguments , 2, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_ARGUMENT , argument , 2, NULL },
|
{ ARC_PARSERLANG_ARGUMENT , argument , 2, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_TAG_OR_CONSTANT, tagOrConstant, 2, NULL },
|
{ ARC_PARSERLANG_TAG_OR_CONSTANT, tagOrConstant, 2, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_CONSTANT , constant , 1, NULL },
|
{ ARC_PARSERLANG_CONSTANT , constant , 1, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_CONSTANT_BODY , constantBody , 2, NULL },
|
{ ARC_PARSERLANG_CONSTANT_BODY , constantBody , 2, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_CONSTANT_CHAR , constantChar , 2, NULL },
|
{ ARC_PARSERLANG_CONSTANT_CHAR , constantChar , 2, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_TAG , tag , 1, NULL },
|
{ ARC_PARSERLANG_TAG , tag , 1, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_VARIABLE , variable , 2, NULL },
|
{ ARC_PARSERLANG_VARIABLE , variable , 2, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_VARIABLE_BODY , variableBody , 2, NULL },
|
{ ARC_PARSERLANG_VARIABLE_BODY , variableBody , 2, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_VARIABLE_CHAR , variableChar , 3, NULL },
|
{ ARC_PARSERLANG_VARIABLE_CHAR , variableChar , 3, NULL, NULL },
|
||||||
{ ARC_PARSERLANG_ALPHA_CHAR , alphaChar , 2, NULL }
|
{ ARC_PARSERLANG_ALPHA_CHAR , alphaChar , 2, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
ARC_Array parserLanguageArray = {
|
ARC_Array parserLanguageArray = {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ void TEST_ParserLanguageTag_DestroyStringFn(void *data){
|
||||||
}
|
}
|
||||||
|
|
||||||
//for this very basic example, the tagId does not matter
|
//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){
|
if(*data == NULL){
|
||||||
return;
|
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
|
//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){
|
if(*data == NULL){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -58,19 +58,22 @@ ARC_ParserLanguageTag testTags[3] = {
|
||||||
VARIABLE, //tagId
|
VARIABLE, //tagId
|
||||||
variableTokensOrTags, //tokensOrTags
|
variableTokensOrTags, //tokensOrTags
|
||||||
1, //tokenOrTagsSize
|
1, //tokenOrTagsSize
|
||||||
&addFirstCharFn //addDataFn
|
&addFirstCharFn, //addDataFn
|
||||||
|
NULL //addUserData
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
VARIABLE_NAME, //tagId
|
VARIABLE_NAME, //tagId
|
||||||
variableNameTags, //tokensOrTags
|
variableNameTags, //tokensOrTags
|
||||||
2, //tokenOrTagsSize
|
2, //tokenOrTagsSize
|
||||||
NULL, //addDataFn
|
NULL, //addDataFn
|
||||||
|
NULL //addUserData
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
CHAR_OR_NUM, //tagId
|
CHAR_OR_NUM, //tagId
|
||||||
charOrNumTokens, //tokensOrTags
|
charOrNumTokens, //tokensOrTags
|
||||||
2, //tokenOrTagsSize
|
2, //tokenOrTagsSize
|
||||||
&addCharFn //addDataFn
|
&addCharFn, //addDataFn
|
||||||
|
NULL //addUserData
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -111,10 +114,10 @@ ARC_TEST(Parser_Basic_Parse){
|
||||||
|
|
||||||
/* ~ second test ~ */
|
/* ~ second test ~ */
|
||||||
ARC_String_CreateWithStrlen(&tempString, "z1xwvq");
|
ARC_String_CreateWithStrlen(&tempString, "z1xwvq");
|
||||||
|
|
||||||
//this destroys string, so no need for cleanup
|
//this destroys string, so no need for cleanup
|
||||||
ARC_Parser_Parse(parser, &tempString);
|
ARC_Parser_Parse(parser, &tempString);
|
||||||
|
|
||||||
|
|
||||||
ARC_CHECK(arc_errno == 0);
|
ARC_CHECK(arc_errno == 0);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue