mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
binpac: Make 'nullptr' a keyword, allow values to be set to it and compared against it
This helps fix 'modernize-use-nullptr' findings in generated code.
This commit is contained in:
parent
3cf68302a2
commit
45d07641e4
8 changed files with 41 additions and 5 deletions
|
@ -82,6 +82,7 @@ set(binpac_SRCS
|
||||||
pac_id.h
|
pac_id.h
|
||||||
pac_inputbuf.h
|
pac_inputbuf.h
|
||||||
pac_let.h
|
pac_let.h
|
||||||
|
pac_nullptr.h
|
||||||
pac_number.h
|
pac_number.h
|
||||||
pac_output.h
|
pac_output.h
|
||||||
pac_param.h
|
pac_param.h
|
||||||
|
|
|
@ -65,6 +65,7 @@ class InputBuffer;
|
||||||
class LetDef;
|
class LetDef;
|
||||||
class LetField;
|
class LetField;
|
||||||
class ID;
|
class ID;
|
||||||
|
class Nullptr;
|
||||||
class Number;
|
class Number;
|
||||||
class Output;
|
class Output;
|
||||||
class PacPrimitive;
|
class PacPrimitive;
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "pac_exception.h"
|
#include "pac_exception.h"
|
||||||
#include "pac_exttype.h"
|
#include "pac_exttype.h"
|
||||||
#include "pac_id.h"
|
#include "pac_id.h"
|
||||||
|
#include "pac_nullptr.h"
|
||||||
#include "pac_number.h"
|
#include "pac_number.h"
|
||||||
#include "pac_output.h"
|
#include "pac_output.h"
|
||||||
#include "pac_record.h"
|
#include "pac_record.h"
|
||||||
|
@ -64,7 +65,6 @@ Expr::Expr(ID* arg_id) : DataDepElement(EXPR) {
|
||||||
init();
|
init();
|
||||||
expr_type_ = EXPR_ID;
|
expr_type_ = EXPR_ID;
|
||||||
id_ = arg_id;
|
id_ = arg_id;
|
||||||
num_operands_ = 0;
|
|
||||||
orig_ = strfmt("%s", id_->Name());
|
orig_ = strfmt("%s", id_->Name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,15 +72,20 @@ Expr::Expr(Number* arg_num) : DataDepElement(EXPR) {
|
||||||
init();
|
init();
|
||||||
expr_type_ = EXPR_NUM;
|
expr_type_ = EXPR_NUM;
|
||||||
num_ = arg_num;
|
num_ = arg_num;
|
||||||
num_operands_ = 0;
|
|
||||||
orig_ = strfmt("((int) %s)", num_->Str());
|
orig_ = strfmt("((int) %s)", num_->Str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Expr::Expr(Nullptr* arg_nullp) : DataDepElement(EXPR) {
|
||||||
|
init();
|
||||||
|
expr_type_ = EXPR_NULLPTR;
|
||||||
|
nullp_ = arg_nullp;
|
||||||
|
orig_ = strfmt("%s", nullp_->Str());
|
||||||
|
}
|
||||||
|
|
||||||
Expr::Expr(ConstString* cstr) : DataDepElement(EXPR) {
|
Expr::Expr(ConstString* cstr) : DataDepElement(EXPR) {
|
||||||
init();
|
init();
|
||||||
expr_type_ = EXPR_CSTR;
|
expr_type_ = EXPR_CSTR;
|
||||||
cstr_ = cstr;
|
cstr_ = cstr;
|
||||||
num_operands_ = 0;
|
|
||||||
orig_ = cstr_->str();
|
orig_ = cstr_->str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +93,6 @@ Expr::Expr(RegEx* regex) : DataDepElement(EXPR) {
|
||||||
init();
|
init();
|
||||||
expr_type_ = EXPR_REGEX;
|
expr_type_ = EXPR_REGEX;
|
||||||
regex_ = regex;
|
regex_ = regex;
|
||||||
num_operands_ = 0;
|
|
||||||
orig_ = strfmt("/%s/", regex_->str().c_str());
|
orig_ = strfmt("/%s/", regex_->str().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,6 +261,7 @@ void Expr::GenCaseEval(Output* out_cc, Env* env) {
|
||||||
void Expr::GenEval(Output* out_cc, Env* env) {
|
void Expr::GenEval(Output* out_cc, Env* env) {
|
||||||
switch ( expr_type_ ) {
|
switch ( expr_type_ ) {
|
||||||
case EXPR_NUM: str_ = num_->Str(); break;
|
case EXPR_NUM: str_ = num_->Str(); break;
|
||||||
|
case EXPR_NULLPTR: str_ = nullp_->Str(); break;
|
||||||
|
|
||||||
case EXPR_ID:
|
case EXPR_ID:
|
||||||
if ( ! env->Evaluated(id_) )
|
if ( ! env->Evaluated(id_) )
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
EXPR_DEF(EXPR_ID, 0, "%s")
|
EXPR_DEF(EXPR_ID, 0, "%s")
|
||||||
EXPR_DEF(EXPR_NUM, 0, "%s")
|
EXPR_DEF(EXPR_NUM, 0, "%s")
|
||||||
|
EXPR_DEF(EXPR_NULLPTR, 0, "%s")
|
||||||
EXPR_DEF(EXPR_CSTR, 0, "%s")
|
EXPR_DEF(EXPR_CSTR, 0, "%s")
|
||||||
EXPR_DEF(EXPR_REGEX, 0, "REGEX(%s)")
|
EXPR_DEF(EXPR_REGEX, 0, "REGEX(%s)")
|
||||||
EXPR_DEF(EXPR_SUBSCRIPT, 2, "@element@(%s[%s])")
|
EXPR_DEF(EXPR_SUBSCRIPT, 2, "@element@(%s[%s])")
|
||||||
|
|
|
@ -18,6 +18,7 @@ public:
|
||||||
|
|
||||||
Expr(ID* id);
|
Expr(ID* id);
|
||||||
Expr(Number* num);
|
Expr(Number* num);
|
||||||
|
Expr(Nullptr* nullp);
|
||||||
Expr(ConstString* s);
|
Expr(ConstString* s);
|
||||||
Expr(RegEx* regex);
|
Expr(RegEx* regex);
|
||||||
Expr(ExprList* args); // for EXPR_CALLARGS
|
Expr(ExprList* args); // for EXPR_CALLARGS
|
||||||
|
@ -101,6 +102,7 @@ private:
|
||||||
RegEx* regex_; // EXPR_REGEX
|
RegEx* regex_; // EXPR_REGEX
|
||||||
ExprList* args_; // EXPR_CALLARGS
|
ExprList* args_; // EXPR_CALLARGS
|
||||||
CaseExprList* cases_; // EXPR_CASE
|
CaseExprList* cases_; // EXPR_CASE
|
||||||
|
Nullptr* nullp_; // EXPR_NULLPTR
|
||||||
|
|
||||||
string str_; // value string
|
string str_; // value string
|
||||||
string orig_; // original string for debugging info
|
string orig_; // original string for debugging info
|
||||||
|
|
14
tools/binpac/src/pac_nullptr.h
Normal file
14
tools/binpac/src/pac_nullptr.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef pac_nullptr_h
|
||||||
|
#define pac_nullptr_h
|
||||||
|
|
||||||
|
#include "pac_common.h"
|
||||||
|
|
||||||
|
class Nullptr : public Object {
|
||||||
|
public:
|
||||||
|
const char* Str() const { return s.c_str(); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
const string s = "nullptr";
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // pac_nullptr_h
|
|
@ -25,7 +25,7 @@
|
||||||
%token TOK_EMBEDDED_ATOM TOK_EMBEDDED_STRING
|
%token TOK_EMBEDDED_ATOM TOK_EMBEDDED_STRING
|
||||||
%token TOK_PAC_VAL TOK_PAC_SET TOK_PAC_TYPE TOK_PAC_TYPEOF TOK_PAC_CONST_DEF
|
%token TOK_PAC_VAL TOK_PAC_SET TOK_PAC_TYPE TOK_PAC_TYPEOF TOK_PAC_CONST_DEF
|
||||||
%token TOK_END_PAC
|
%token TOK_END_PAC
|
||||||
%token TOK_EXTERN
|
%token TOK_EXTERN TOK_NULLPTR
|
||||||
|
|
||||||
%nonassoc '=' TOK_PLUSEQ
|
%nonassoc '=' TOK_PLUSEQ
|
||||||
%left ';'
|
%left ';'
|
||||||
|
@ -66,6 +66,7 @@
|
||||||
%type <function> funcproto function
|
%type <function> funcproto function
|
||||||
%type <id> TOK_ID tok_id optfieldid
|
%type <id> TOK_ID tok_id optfieldid
|
||||||
%type <input> input
|
%type <input> input
|
||||||
|
%type <nullp> TOK_NULLPTR
|
||||||
%type <num> TOK_NUMBER
|
%type <num> TOK_NUMBER
|
||||||
%type <pacprimitive> embedded_pac_primitive
|
%type <pacprimitive> embedded_pac_primitive
|
||||||
%type <param> param
|
%type <param> param
|
||||||
|
@ -105,6 +106,7 @@
|
||||||
#include "pac_id.h"
|
#include "pac_id.h"
|
||||||
#include "pac_inputbuf.h"
|
#include "pac_inputbuf.h"
|
||||||
#include "pac_let.h"
|
#include "pac_let.h"
|
||||||
|
#include "pac_nullptr.h"
|
||||||
#include "pac_output.h"
|
#include "pac_output.h"
|
||||||
#include "pac_param.h"
|
#include "pac_param.h"
|
||||||
#include "pac_paramtype.h"
|
#include "pac_paramtype.h"
|
||||||
|
@ -160,6 +162,7 @@ extern Output* source_output;
|
||||||
InputBuffer *input;
|
InputBuffer *input;
|
||||||
LetFieldList *letfieldlist;
|
LetFieldList *letfieldlist;
|
||||||
LetField *letfield;
|
LetField *letfield;
|
||||||
|
Nullptr *nullp;
|
||||||
Number *num;
|
Number *num;
|
||||||
PacPrimitive *pacprimitive;
|
PacPrimitive *pacprimitive;
|
||||||
Param *param;
|
Param *param;
|
||||||
|
@ -576,6 +579,10 @@ expr : tok_id
|
||||||
{
|
{
|
||||||
$$ = new Expr($1);
|
$$ = new Expr($1);
|
||||||
}
|
}
|
||||||
|
| TOK_NULLPTR
|
||||||
|
{
|
||||||
|
$$ = new Expr($1);
|
||||||
|
}
|
||||||
| expr '[' expr ']'
|
| expr '[' expr ']'
|
||||||
{
|
{
|
||||||
$$ = new Expr(Expr::EXPR_SUBSCRIPT, $1, $3);
|
$$ = new Expr(Expr::EXPR_SUBSCRIPT, $1, $3);
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "pac_expr.h"
|
#include "pac_expr.h"
|
||||||
#include "pac_flow.h"
|
#include "pac_flow.h"
|
||||||
#include "pac_id.h"
|
#include "pac_id.h"
|
||||||
|
#include "pac_nullptr.h"
|
||||||
#include "pac_number.h"
|
#include "pac_number.h"
|
||||||
#include "pac_output.h"
|
#include "pac_output.h"
|
||||||
#include "pac_param.h"
|
#include "pac_param.h"
|
||||||
|
@ -200,6 +201,10 @@ ESCSEQ (\\([^\n]|[0-7]{3}|x[[:xdigit:]]{2}))
|
||||||
yylval.val = AnalyzerDataUnit::FLOWUNIT;
|
yylval.val = AnalyzerDataUnit::FLOWUNIT;
|
||||||
return TOK_DATAUNIT;
|
return TOK_DATAUNIT;
|
||||||
}
|
}
|
||||||
|
<INITIAL>nullptr {
|
||||||
|
yylval.nullp = new Nullptr();
|
||||||
|
return TOK_NULLPTR;
|
||||||
|
}
|
||||||
<INITIAL>of return TOK_OF;
|
<INITIAL>of return TOK_OF;
|
||||||
<INITIAL>offsetof return TOK_OFFSETOF;
|
<INITIAL>offsetof return TOK_OFFSETOF;
|
||||||
<INITIAL>padding return TOK_PADDING;
|
<INITIAL>padding return TOK_PADDING;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue