mirror of
https://github.com/zeek/zeek.git
synced 2025-10-15 21:18:20 +00:00
55 lines
1.3 KiB
C++
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
|
|
}
|