mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
factor out "print" statement's execution functionality
This commit is contained in:
parent
b792feccab
commit
22776167bb
3 changed files with 15 additions and 9 deletions
|
@ -12,8 +12,7 @@
|
|||
#include <krb5.h>
|
||||
#endif // NEED_KRB5_H
|
||||
|
||||
#include "zeek/Obj.h"
|
||||
#include "zeek/IntrusivePtr.h"
|
||||
#include "zeek/Val.h"
|
||||
#include "zeek/util.h"
|
||||
|
||||
namespace zeek {
|
||||
|
@ -23,6 +22,8 @@ namespace detail {
|
|||
class PrintStmt;
|
||||
class Attributes;
|
||||
|
||||
extern void do_print_stmt(const std::vector<ValPtr>& vals);
|
||||
|
||||
} // namespace detail;
|
||||
|
||||
class RecordVal;
|
||||
|
@ -84,7 +85,7 @@ public:
|
|||
|
||||
protected:
|
||||
|
||||
friend class detail::PrintStmt;
|
||||
friend void detail::do_print_stmt(const std::vector<ValPtr>& vals);
|
||||
|
||||
File() { Init(); }
|
||||
void Init();
|
||||
|
|
15
src/Stmt.cc
15
src/Stmt.cc
|
@ -306,18 +306,23 @@ ValPtr PrintStmt::DoExec(std::vector<ValPtr> vals,
|
|||
StmtFlowType& /* flow */)
|
||||
{
|
||||
RegisterAccess();
|
||||
do_print_stmt(vals);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void do_print_stmt(const std::vector<ValPtr>& vals)
|
||||
{
|
||||
if ( ! print_stdout )
|
||||
print_stdout = new File(stdout);
|
||||
|
||||
File* f = print_stdout;
|
||||
int offset = 0;
|
||||
|
||||
if ( vals.size() > 0 && (vals)[0]->GetType()->Tag() == TYPE_FILE )
|
||||
if ( vals.size() > 0 && vals[0] && vals[0]->GetType()->Tag() == TYPE_FILE )
|
||||
{
|
||||
f = (vals)[0]->AsFile();
|
||||
if ( ! f->IsOpen() )
|
||||
return nullptr;
|
||||
return;
|
||||
|
||||
++offset;
|
||||
}
|
||||
|
@ -331,7 +336,7 @@ ValPtr PrintStmt::DoExec(std::vector<ValPtr> vals,
|
|||
case BifEnum::Log::REDIRECT_ALL:
|
||||
{
|
||||
print_log(vals);
|
||||
return nullptr;
|
||||
return;
|
||||
}
|
||||
case BifEnum::Log::REDIRECT_STDOUT:
|
||||
if ( f->FileHandle() == stdout )
|
||||
|
@ -339,7 +344,7 @@ ValPtr PrintStmt::DoExec(std::vector<ValPtr> vals,
|
|||
// Should catch even printing to a "manually opened" stdout file,
|
||||
// like "/dev/stdout" or "-".
|
||||
print_log(vals);
|
||||
return nullptr;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -368,8 +373,6 @@ ValPtr PrintStmt::DoExec(std::vector<ValPtr> vals,
|
|||
describe_vals(vals, &d, offset);
|
||||
f->Write("\n", 1);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
ExprStmt::ExprStmt(ExprPtr arg_e) : Stmt(STMT_EXPR), e(std::move(arg_e))
|
||||
|
|
|
@ -62,6 +62,8 @@ protected:
|
|||
StmtPtr DoSubclassReduce(ListExprPtr singletons, Reducer* c) override;
|
||||
};
|
||||
|
||||
extern void do_print_stmt(const std::vector<ValPtr>& vals);
|
||||
|
||||
class ExprStmt : public Stmt {
|
||||
public:
|
||||
explicit ExprStmt(ExprPtr e);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue