zeek/tools/binpac/src/pac_param.cc

55 lines
1.3 KiB
C++

// See the file "COPYING" in the main distribution directory for copyright.
#include "pac_param.h"
#include "pac_decl.h"
#include "pac_exttype.h"
#include "pac_field.h"
#include "pac_id.h"
#include "pac_output.h"
#include "pac_type.h"
#include "pac_utils.h"
Param::Param(ID* id, Type* type) : id_(id), type_(type) {
if ( ! type_ )
type_ = extern_type_int->Clone();
decl_str_ = strfmt("%s %s", type_->DataTypeConstRefStr().c_str(), id_->Name());
param_field_ = new ParamField(this);
}
Param::~Param() {}
const string& Param::decl_str() const {
ASSERT(! decl_str_.empty());
return decl_str_;
}
string ParamDecls(ParamList* params) {
string param_decls;
int first = 1;
foreach (i, ParamList, params) {
Param* p = *i;
const char* decl_str = p->decl_str().c_str();
if ( first )
first = 0;
else
param_decls += ", ";
param_decls += decl_str;
}
return param_decls;
}
ParamField::ParamField(const Param* param)
: Field(PARAM_FIELD, TYPE_NOT_TO_BE_PARSED | CLASS_MEMBER | PUBLIC_READABLE, param->id(), param->type()) {}
void ParamField::GenInitCode(Output* out_cc, Env* env) {
out_cc->println("%s = %s;", env->LValue(id()), id()->Name());
env->SetEvaluated(id());
}
void ParamField::GenCleanUpCode(Output* out_cc, Env* env) {
// Do nothing
}