Supporting comma separated variable definition (int8_t varA, varB, varC[], *varD, varE[12];)
This commit is contained in:
@@ -611,6 +611,7 @@ STATIC int8_t evaluateParameter(char *aParameter, cfunction_t *aFunction)
|
||||
|
||||
STATIC int8_t cfile_parser_evaluateExpression(char *aExpression, cfile_t *aCfile)
|
||||
{
|
||||
uint16_t tempInt16 = 0;
|
||||
char *tempChar = NULL;
|
||||
cfile_variable_t *variable = NULL;
|
||||
cfunction_t *function = NULL;
|
||||
@@ -648,7 +649,8 @@ STATIC int8_t cfile_parser_evaluateExpression(char *aExpression, cfile_t *aCfile
|
||||
{
|
||||
(void) matchPrefix(variable, CELEMENT_TYPE_VARIABLE, &aExpression[matchGroup[1].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 1));
|
||||
xmallocStrlcpy(&variable->name, &aExpression[matchGroup[2].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 2));
|
||||
// contains array information if available "[10]"
|
||||
|
||||
// group 3 contains array information, if available
|
||||
if (XREGEX_IS_MATCHGROUP(matchGroup, 3))
|
||||
{
|
||||
xmallocStrlcpy(&tempChar, &aExpression[matchGroup[3].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 3));
|
||||
@@ -666,9 +668,28 @@ STATIC int8_t cfile_parser_evaluateExpression(char *aExpression, cfile_t *aCfile
|
||||
{
|
||||
xmallocStrlcpy(&variable->array, tempChar, strlen(tempChar));
|
||||
}
|
||||
|
||||
xfree((void**) &tempChar);
|
||||
}
|
||||
|
||||
// would contain more variables separated by ','
|
||||
if (XREGEX_IS_MATCHGROUP(matchGroup, 4))
|
||||
{
|
||||
if (NULL != (tempChar = strstr(&aExpression[matchGroup[4].rm_so], ",")))
|
||||
{
|
||||
// remove leading ,
|
||||
tempInt16 = tempChar - &aExpression[matchGroup[4].rm_so];
|
||||
matchGroup[4].rm_so += tempInt16 + 1;
|
||||
tempChar = NULL;
|
||||
|
||||
DEBUG_LOG_APPEND(1, "Variable list: %s\n", &aExpression[matchGroup[4].rm_so]);
|
||||
xmallocStrlcpy(&tempChar, aCfile->variables.head->dataType, strlen(aCfile->variables.head->dataType));
|
||||
xmallocStrlcat(&tempChar, &aExpression[matchGroup[4].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 4) + 1);
|
||||
DEBUG_LOG_APPEND(1, "Result: %s\n", tempChar);
|
||||
|
||||
cfile_parser_evaluateExpression(tempChar, aCfile);
|
||||
}
|
||||
}
|
||||
xfree((void**) &tempChar);
|
||||
}
|
||||
}
|
||||
else if (0 == regexec(®XfunctionPointer, aExpression, CFILE_PARSER_MAX_REGEX_MATCHING_GROUPS, matchGroup, 0) //
|
||||
@@ -726,7 +747,7 @@ STATIC uint32_t cfile_parser_evaluateLine(uint32_t aNumber, char *aLine, cfile_t
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
DEBUG_LOG_APPEND(2, "[ Li %04u] %s", aNumber, aLine);
|
||||
DEBUG_LOG_APPEND(2, "[ Li %04u] %s\n", aNumber, aLine);
|
||||
tempChar = strrchr(aLine, '\n');
|
||||
if (tempChar)
|
||||
{
|
||||
|
@@ -10,7 +10,6 @@
|
||||
* @date 28.02.2017
|
||||
* @author SESA354004
|
||||
*/
|
||||
|
||||
#ifndef STUBSER_CFILE_PARSER_LOC_H_
|
||||
#define STUBSER_CFILE_PARSER_LOC_H_
|
||||
|
||||
@@ -31,7 +30,7 @@
|
||||
|
||||
#define FUNCTION_BASE CPARS_EXPRESSION_BASE "[[:blank:]]*\\([[:blank:]]*"
|
||||
#define CPARS_REGEX_FUNCTION FUNCTION_BASE "(.*)\\)[[:blank:]\\{\\};]+[[:blank:]]*"
|
||||
#define CPARS_REGEX_VARIABLE CPARS_EXPRESSION_BASE "[[:blank:]]*(\\[*[^;=]*)[[:blank:]]*[;=]"
|
||||
#define CPARS_REGEX_VARIABLE CPARS_EXPRESSION_BASE "[[:blank:]]*(\\[*[^;=,]*)[[:blank:]]*(\\[*[^;=]*[;=])"
|
||||
#define CPARS_REGEX_PARAMETER CPARS_EXPRESSION_BASE "[[:blank:]]*(\\[*[^;=]*)"
|
||||
#define CPARS_REGEX_PARAMETER_FUPTR_SEPA "\\([^\\,)]*(,)" // function pointer parameter separation
|
||||
#define CPARS_REGEX_PREFIX "("CPARS_PREFIX_EXTERN_S"|EXTERN|"CPARS_PREFIX_STATIC_S"|STATIC|volatile|near|far)[[:blank:]]*(.*)"
|
||||
|
Reference in New Issue
Block a user