Commit 4ea7d944 authored by Ian Rogers's avatar Ian Rogers Committed by Namhyung Kim

perf expr: Allow NaN to be a valid number

Currently only floating point numbers can be parsed, add a special
case for NaN.
Signed-off-by: default avatarIan Rogers <irogers@google.com>
Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
Cc: K Prateek Nayak <kprateek.nayak@amd.com>
Cc: James Clark <james.clark@arm.com>
Cc: Kaige Ye <ye@kaige.org>
Cc: John Garry <john.g.garry@oracle.com>
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20240209204947.3873294-2-irogers@google.com
parent 923e4616
...@@ -94,6 +94,14 @@ static int literal(yyscan_t scanner, const struct expr_scanner_ctx *sctx) ...@@ -94,6 +94,14 @@ static int literal(yyscan_t scanner, const struct expr_scanner_ctx *sctx)
} }
return LITERAL; return LITERAL;
} }
static int nan_value(yyscan_t scanner)
{
YYSTYPE *yylval = expr_get_lval(scanner);
yylval->num = NAN;
return NUMBER;
}
%} %}
number ([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+)(e-?[0-9]+)? number ([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+)(e-?[0-9]+)?
...@@ -115,6 +123,7 @@ else { return ELSE; } ...@@ -115,6 +123,7 @@ else { return ELSE; }
source_count { return SOURCE_COUNT; } source_count { return SOURCE_COUNT; }
has_event { return HAS_EVENT; } has_event { return HAS_EVENT; }
strcmp_cpuid_str { return STRCMP_CPUID_STR; } strcmp_cpuid_str { return STRCMP_CPUID_STR; }
NaN { return nan_value(yyscanner); }
{literal} { return literal(yyscanner, sctx); } {literal} { return literal(yyscanner, sctx); }
{number} { return value(yyscanner); } {number} { return value(yyscanner); }
{symbol} { return str(yyscanner, ID, sctx->runtime); } {symbol} { return str(yyscanner, ID, sctx->runtime); }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment