mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 02:28:21 +00:00
Merge remote-tracking branch 'origin/topic/robin/gh-425-record-perf'
- Removed a now-unused-local-variable - Added std::move() in AssignExpr::SetOp2() * origin/topic/robin/gh-425-record-perf: Avoid unnecessary temporary value when coercing a record that's already the right type. Optimize record constructor expression. Unify type comparisions for records.
This commit is contained in:
commit
f9f6140c15
7 changed files with 108 additions and 63 deletions
18
src/Expr.h
18
src/Expr.h
|
@ -504,6 +504,11 @@ public:
|
|||
ValPtr InitVal(const zeek::Type* t, ValPtr aggr) const override;
|
||||
bool IsPure() const override;
|
||||
|
||||
void SetOp2(ExprPtr e)
|
||||
{
|
||||
op2 = std::move(e);
|
||||
}
|
||||
|
||||
protected:
|
||||
bool TypeCheck(const AttributesPtr& attrs = nullptr);
|
||||
bool TypeCheckArithmetics(TypeTag bt1, TypeTag bt2);
|
||||
|
@ -625,16 +630,25 @@ protected:
|
|||
int field;
|
||||
};
|
||||
|
||||
class RecordConstructorExpr final : public UnaryExpr {
|
||||
class RecordConstructorExpr final : public Expr {
|
||||
public:
|
||||
explicit RecordConstructorExpr(ListExprPtr constructor_list);
|
||||
~RecordConstructorExpr() override;
|
||||
|
||||
ListExpr* Op() const { return op.get(); }
|
||||
|
||||
ValPtr Eval(Frame* f) const override;
|
||||
|
||||
bool IsPure() const override;
|
||||
|
||||
TraversalCode Traverse(TraversalCallback* cb) const override;
|
||||
|
||||
protected:
|
||||
ValPtr InitVal(const zeek::Type* t, ValPtr aggr) const override;
|
||||
ValPtr Fold(Val* v) const override;
|
||||
|
||||
void ExprDescribe(ODesc* d) const override;
|
||||
|
||||
ListExprPtr op;
|
||||
};
|
||||
|
||||
class TableConstructorExpr final : public UnaryExpr {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue