/******************************************************************************
- * Copyright (c) 2000-2014 Ericsson Telecom AB
+ * Copyright (c) 2000-2015 Ericsson Telecom AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
#include "../common/dbgnew.hh"
+#include "Profiler.hh"
+
extern string_map_t *config_defines;
#define yylval config_process_lval
%x SC_commentblock SC_cstring SC_DEFINE
%s SC_MODULE_PARAMETERS SC_LOGGING SC_TESTPORT_PARAMETERS SC_EXECUTE SC_GROUPS
%s SC_COMPONENTS SC_EXTERNAL_COMMANDS SC_MAIN_CONTROLLER SC_INCLUDE SC_ORDERED_INCLUDE
-%s SC_STRING2TTCN_COMPONENT
+%s SC_STRING2TTCN_COMPONENT SC_PROFILER
%%
}
}
+<*>"["{WS}PROFILER{WS}"]" {
+ if (YY_START!=SC_commentblock && YY_START!=SC_cstring) {
+ BEGIN(SC_PROFILER);
+ return ProfilerKeyword;
+ }
+}
+
<*>"["{WS}TESTPORT_PARAMETERS{WS}"]" {
if (YY_START!=SC_commentblock && YY_START!=SC_cstring) {
BEGIN(SC_TESTPORT_PARAMETERS);
. /* eat unnecessary chars */
+}
+
+<SC_PROFILER>{HEX}+ {
+ /* numeric statistics filter (check this before checking for NUMBERs) */
+ yylval.uint_val = 0;
+ while(0 != *yytext) {
+ yylval.uint_val *= 16;
+ if ('0' <= *yytext && '9' >= *yytext) {
+ yylval.uint_val += *yytext - '0';
+ }
+ else if ('a' <= *yytext && 'f' >= *yytext) {
+ yylval.uint_val += *yytext - 'a' + 10;
+ }
+ else {
+ yylval.uint_val += *yytext - 'A' + 10;
+ }
+ ++yytext;
+ }
+ return ProfilerStatsFlag;
}
/* Values */
{NUMBER} {
yylval.int_val = new int_val_t(yytext);
+ if (YY_START == SC_MODULE_PARAMETERS) {
+ // return a different token for module parameters so it doesn't conflict with references
+ return MPNumber;
+ }
return Number;
}
{FLOAT} {
yylval.float_val = atof(yytext);
+ if (YY_START == SC_MODULE_PARAMETERS) {
+ // return a different token for module parameters so it doesn't conflict with references
+ return MPFloat;
+ }
return Float;
}
break;
default:
set_ret_val_cstr(cstring);
+ if (caller_state == SC_MODULE_PARAMETERS) {
+ // return a different token for module parameters so it doesn't conflict with references
+ return MPCstring;
+ }
return Cstring;
}
BEGIN(caller_state);
if (caller_state!=SC_DEFINE) {
set_ret_val_cstr(cstring);
+ if (caller_state == SC_MODULE_PARAMETERS) {
+ // return a different token for module parameters so it doesn't conflict with references
+ return MPCstring;
+ }
return Cstring;
}
infinity return InfinityKeyword;
}
-<SC_MODULE_PARAMETERS,SC_LOGGING>
+<SC_MODULE_PARAMETERS,SC_LOGGING,SC_PROFILER>
{
true {
yylval.bool_val = TRUE;
yylval.logseverity_val = TTCN_Logger::DEBUG_TESTPORT;
return LoggingBit;
}
+DEBUG_USER {
+ yylval.logseverity_val = TTCN_Logger::DEBUG_USER;
+ return LoggingBit;
+ }
+DEBUG_FRAMEWORK {
+ yylval.logseverity_val = TTCN_Logger::DEBUG_FRAMEWORK;
+ return LoggingBit;
+ }
DEBUG_UNQUALIFIED {
yylval.logseverity_val = TTCN_Logger::DEBUG_UNQUALIFIED;
return LoggingBit;
[Dd]elete return Delete;
}
+<SC_PROFILER>
+{
+ [Dd]isable[Pp]rofiler return DisableProfilerKeyword;
+ [Dd]isable[Cc]overage return DisableCoverageKeyword;
+ [Dd]ata[Bb]ase[Ff]ile return DatabaseFileKeyword;
+ [Aa]ggregate[Dd]ata return AggregateDataKeyword;
+ [Ss]tatistics[Ff]ile return StatisticsFileKeyword;
+ [Dd]isable[Ss]tatistics return DisableStatisticsKeyword;
+ [Ss]tatistics[Ff]ilter return StatisticsFilterKeyword;
+ [Ss]tart[Aa]utomatically return StartAutomaticallyKeyword;
+ [Nn]et[Ll]ine[Tt]imes return NetLineTimesKeyword;
+ [Nn]et[Ff]unction[Tt]imes return NetFunctionTimesKeyword;
+
+ /* statistics filters */
+ [Nn]umber[Oo]f[Ll]ines {
+ yylval.uint_val = Profiler_Tools::STATS_NUMBER_OF_LINES;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Dd]ata[Rr]aw {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_DATA_RAW;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Dd]ata[Rr]aw {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_DATA_RAW;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Aa]vg[Rr]aw {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_AVG_RAW;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Aa]vg[Rr]aw {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_AVG_RAW;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Tt]imes[Ss]orted[Bb]y[Mm]od {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_TIMES_SORTED_BY_MOD;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Tt]imes[Ss]orted[Bb]y[Mm]od {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_TIMES_SORTED_BY_MOD;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Tt]imes[Ss]orted[Tt]otal {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_TIMES_SORTED_TOTAL;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Tt]imes[Ss]orted[Tt]otal {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_TIMES_SORTED_TOTAL;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Cc]ount[Ss]orted[Bb]y[Mm]od {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_COUNT_SORTED_BY_MOD;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Cc]ount[Ss]orted[Bb]y[Mm]od {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_COUNT_SORTED_BY_MOD;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Cc]ount[Ss]orted[Tt]otal {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_COUNT_SORTED_TOTAL;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Cc]ount[Ss]orted[Tt]otal {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_COUNT_SORTED_TOTAL;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Aa]vg[Ss]orted[Bb]y[Mm]od {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_AVG_SORTED_BY_MOD;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Aa]vg[Ss]orted[Bb]y[Mm]od {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_AVG_SORTED_BY_MOD;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Aa]vg[Ss]orted[Tt]otal {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_AVG_SORTED_TOTAL;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Aa]vg[Ss]orted[Tt]otal {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_AVG_SORTED_TOTAL;
+ return ProfilerStatsFlag;
+ }
+ [Tt]op10[Ll]ine[Tt]imes {
+ yylval.uint_val = Profiler_Tools::STATS_TOP10_LINE_TIMES;
+ return ProfilerStatsFlag;
+ }
+ [Tt]op10[Ff]unc[Tt]imes {
+ yylval.uint_val = Profiler_Tools::STATS_TOP10_FUNC_TIMES;
+ return ProfilerStatsFlag;
+ }
+ [Tt]op10[Ll]ine[Cc]ount {
+ yylval.uint_val = Profiler_Tools::STATS_TOP10_LINE_COUNT;
+ return ProfilerStatsFlag;
+ }
+ [Tt]op10[Ff]unc[Cc]ount {
+ yylval.uint_val = Profiler_Tools::STATS_TOP10_FUNC_COUNT;
+ return ProfilerStatsFlag;
+ }
+ [Tt]op10[Ll]ine[Aa]vg {
+ yylval.uint_val = Profiler_Tools::STATS_TOP10_LINE_AVG;
+ return ProfilerStatsFlag;
+ }
+ [Tt]op10[Ff]unc[Aa]vg {
+ yylval.uint_val = Profiler_Tools::STATS_TOP10_FUNC_AVG;
+ return ProfilerStatsFlag;
+ }
+ [Uu]nused[Ll]ines {
+ yylval.uint_val = Profiler_Tools::STATS_UNUSED_LINES;
+ return ProfilerStatsFlag;
+ }
+ [Uu]nused[Ff]unc {
+ yylval.uint_val = Profiler_Tools::STATS_UNUSED_FUNC;
+ return ProfilerStatsFlag;
+ }
+ [Aa]ll[Rr]aw[Dd]ata {
+ yylval.uint_val = Profiler_Tools::STATS_ALL_RAW_DATA;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Dd]ata[Ss]orted[Bb]y[Mm]od {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_DATA_SORTED_BY_MOD;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Dd]ata[Ss]orted[Bb]y[Mm]od {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_DATA_SORTED_BY_MOD;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Dd]ata[Ss]orted[Tt]otal {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_DATA_SORTED_TOTAL;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Dd]ata[Ss]orted[Tt]otal {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_DATA_SORTED_TOTAL;
+ return ProfilerStatsFlag;
+ }
+ [Ll]ine[Dd]ata[Ss]orted {
+ yylval.uint_val = Profiler_Tools::STATS_LINE_DATA_SORTED;
+ return ProfilerStatsFlag;
+ }
+ [Ff]unc[Dd]ata[Ss]orted {
+ yylval.uint_val = Profiler_Tools::STATS_FUNC_DATA_SORTED;
+ return ProfilerStatsFlag;
+ }
+ [Aa]ll[Dd]ata[Ss]orted {
+ yylval.uint_val = Profiler_Tools::STATS_ALL_DATA_SORTED;
+ return ProfilerStatsFlag;
+ }
+ [Tt]op10[Ll]ine[Dd]ata {
+ yylval.uint_val = Profiler_Tools::STATS_TOP10_LINE_DATA;
+ return ProfilerStatsFlag;
+ }
+ [Tt]op10[Ff]unc[Dd]ata {
+ yylval.uint_val = Profiler_Tools::STATS_TOP10_FUNC_DATA;
+ return ProfilerStatsFlag;
+ }
+ [Tt]op10[Aa]ll[Dd]ata {
+ yylval.uint_val = Profiler_Tools::STATS_TOP10_ALL_DATA;
+ return ProfilerStatsFlag;
+ }
+ [Uu]nused[Dd]ata {
+ yylval.uint_val = Profiler_Tools::STATS_UNUSED_DATA;
+ return ProfilerStatsFlag;
+ }
+ [Aa]ll {
+ yylval.uint_val = Profiler_Tools::STATS_ALL;
+ return ProfilerStatsFlag;
+ }
+}
+
<SC_EXECUTE>control return ControlKeyword;
<SC_EXTERNAL_COMMANDS>
<SC_MODULE_PARAMETERS>{ASN1LOWERIDENTIFIER} {
yylval.str_val = mcopystr(yytext);
- for (int i = 0; i < yyleng; i++) {
+ for (size_t i = 0; i < yyleng; i++) {
if (yylval.str_val[i] == '-') yylval.str_val[i] = '_';
}
TTCN_warning("In line %d of configuration file: `%s' is not a valid TTCN-3 "
char* comp_num_str = mcopystrn(yytext + pos + 1, len - pos - 1);
yylval.int_val = new int_val_t(comp_num_str);
Free(comp_num_str);
- return Number;
+ return MPNumber;
}
{MACRO_BOOL} {
"this context.");
yylval.int_val = new int_val_t((RInt)0);
}
+ if (YY_START == SC_MODULE_PARAMETERS) {
+ // return a different token for module parameters so it doesn't conflict with references
+ return MPNumber;
+ }
return Number;
}
"this context.");
yylval.float_val = 0.0;
}
+ if (YY_START == SC_MODULE_PARAMETERS) {
+ // return a different token for module parameters so it doesn't conflict with references
+ return MPFloat;
+ }
return Float;
}
"this context.");
yylval.charstring_val.n_chars = 0;
yylval.charstring_val.chars_ptr = memptystr();
+ if (YY_START == SC_MODULE_PARAMETERS) {
+ // return a different token for module parameters so it doesn't conflict with references
+ return MPCstring;
+ }
return Cstring;
}
yylval.charstring_val.n_chars=0;
yylval.charstring_val.chars_ptr=memptystr();
Free(macroname);
+ if (YY_START == SC_MODULE_PARAMETERS) {
+ // return a different token for module parameters so it doesn't conflict with references
+ return MPCstring;
+ }
return Cstring;
}
yylval.charstring_val.chars_ptr=(char*)Malloc(macrolen+1);
memcpy(yylval.charstring_val.chars_ptr, macrovalue, macrolen+1);
Free(macroname);
+ if (YY_START == SC_MODULE_PARAMETERS) {
+ // return a different token for module parameters so it doesn't conflict with references
+ return MPCstring;
+ }
return Cstring;
}
}