/* yes, this is exported! */
bool g_expectingTypeName = TRUE; /* beginning of file can be type name! */
+static bool expectingMetaStateName = FALSE;
+
static int returnInt (ctype, long);
static int returnFloat (ctype, double);
static int returnChar (char);
"static" { setTokLength (6); RETURN_TOK (QSTATIC); }
\"(\\.|[^\\"])*\"([ \t\n]*\"(\\.|[^\\"])*\")* { RETURN_EXPR (processString ()); }
+L\"(\\.|[^\\"])*\"([ \t\n]*\"(\\.|[^\\"])*\")* { RETURN_EXPR (processString ()); }
"out" { return (processSpec (QOUT)); }
"in" { return (processSpec (QIN)); }
"partial" { return (processSpec (QPARTIAL)); }
"killed" { return (processSpec (QKILLED)); }
"nullterminated" { return (processSpec (QNULLTERMINATED));}
"MaxSet" { return (processSpec (QMAXSET));}
-"MaxRead" { return (processSpec (QMAXREAD));}
+"MaxRead" { return (processSpec (QMAXREAD));}
+"maxSet" { return (processSpec (QMAXSET));}
+"maxRead" { return (processSpec (QMAXREAD));}
{Letter}({Letter}|{Digit})* { int tok;
context_saveLocation ();
{ "releases", QRELEASES } ,
{ "pre", QPRECLAUSE } ,
{ "post", QPOSTCLAUSE } ,
- {"setBufferSize", QSETBUFFERSIZE},
- {"LRequires", QBUFFERCONSTRAINT},
- {"LEnsures", QENSURESCONSTRAINT},
- {"setStringLength", QSETSTRINGLENGTH},
- {"testinRange", QTESTINRANGE},
+ { "setBufferSize", QSETBUFFERSIZE},
+ { "setStringLength", QSETSTRINGLENGTH},
+ { "testinRange", QTESTINRANGE},
{ "requires", QPRECLAUSE } ,
{ "ensures", QPOSTCLAUSE } ,
{ NULL, BADTOK }
{ "relnull", QRELNULL } ,
{ "nullterminated", QNULLTERMINATED },
{ "setBufferSize", QSETBUFFERSIZE },
- { "LRequires", QBUFFERCONSTRAINT },
- { "LEnsures", QENSURESCONSTRAINT },
{ "testInRange", QTESTINRANGE},
{ "MaxSet", QMAXSET},
{ "MaxRead", QMAXREAD},
uentry_showWhereSpecified (e2);
uentry_setType (e2, ctype_unknown);
- uentry_makeVarFunction (e2);
+ uentry_makeConstantFunction (e2);
uentry_setDefined (e2, g_currentloc);
uentry_setFunctionDefined (e2, g_currentloc);
context_enterUnknownMacro (e2);
}
else
{
- llerror
- (FLG_BADFLAG,
+ voptgenerror
+ (FLG_UNRECOGFLAGCOMMENTS,
message ("Unrecognized option in semantic comment: %s",
- flagname));
+ flagname),
+ g_currentloc);
}
}
else if (flagcode_isGlobalFlag (fflag))
{
- llerror
+ voptgenerror
(FLG_BADFLAG,
message
("Semantic comment attempts to set global flag %s. "
"A global flag cannot be set locally.",
- flagname));
+ flagname),
+ g_currentloc);
}
else
{
{
if (ynm_isMaybe (set))
{
- llerror
+ voptgenerror
(FLG_BADFLAG,
message
("Semantic comment attempts to restore flag %s. "
"A flag for setting a value cannot be restored.",
- flagname));
+ flagname),
+ g_currentloc);
}
else
{ /* cut-and-pastied from llmain...blecch */
}
else
{
- annotationInfo ainfo = context_lookupAnnotation (id);
+ annotationInfo ainfo;
+
+ if (expectingMetaStateName)
+ {
+ metaStateInfo msinfo = context_lookupMetaStateInfo (id);
+
+ if (metaStateInfo_isDefined (msinfo))
+ {
+ yylval.msinfo = msinfo;
+ return METASTATE_NAME;
+ }
+ else
+ {
+ DPRINTF (("Not meta state name: %s", cstring_toCharsSafe (id)));
+ }
+ }
+
+ ainfo = context_lookupAnnotation (id);
if (annotationInfo_isDefined (ainfo))
{
return (processIdentifier (makeIdentifier (yytext)));
}
}
+
+void cscanner_expectingMetaStateName ()
+{
+ llassert (!expectingMetaStateName);
+ llassert (context_inFunctionHeader ());
+ expectingMetaStateName = TRUE;
+}
+
+void cscanner_clearExpectingMetaStateName ()
+{
+ llassert (expectingMetaStateName);
+ expectingMetaStateName = FALSE;
+}