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:
Jon Siwek 2020-10-06 12:19:49 -07:00
commit f9f6140c15
7 changed files with 108 additions and 63 deletions

View file

@ -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 {