Add 'xo-expression/' from commit '5ac3c03a0c'
git-subtree-dir: xo-expression git-subtree-mainline:d0f5ccc1cegit-subtree-split:5ac3c03a0c
This commit is contained in:
commit
aecabbb144
46 changed files with 3241 additions and 0 deletions
52
xo-expression/include/xo/expression/Sequence.hpp
Normal file
52
xo-expression/include/xo/expression/Sequence.hpp
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/** @file Sequence.hpp
|
||||
*
|
||||
* Author: Roland Conybeare
|
||||
**/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Expression.hpp"
|
||||
//#include <cstdint>
|
||||
|
||||
namespace xo {
|
||||
namespace ast {
|
||||
class Sequence : public Expression {
|
||||
public:
|
||||
Sequence(const std::vector<rp<Expression>> & xv)
|
||||
: Expression(exprtype::sequence,
|
||||
xv[xv.size() - 1]->valuetype()),
|
||||
expr_v_(xv) {}
|
||||
|
||||
static rp<Sequence> make(const std::vector<rp<Expression>> & xv) { return new Sequence(xv); }
|
||||
|
||||
std::size_t size() const { return expr_v_.size(); }
|
||||
const rp<Expression> & operator[](std::size_t i) const { return expr_v_[i]; }
|
||||
|
||||
// ----- from Expression -----
|
||||
|
||||
/** note: broken if .expr_v_ contains any def-exprs
|
||||
* (will treat references to so-defined vars as free).
|
||||
* must rewrite these first
|
||||
**/
|
||||
virtual std::set<std::string> get_free_variables() const override;
|
||||
virtual std::size_t visit_preorder(VisitFn visitor_fn) override;
|
||||
/** note: borken if .expr_v_ contains any def-exprs **/
|
||||
virtual std::size_t visit_layer(VisitFn visitor_fn) override;
|
||||
virtual rp<Expression> xform_layer(TransformFn visitor_fn) override;
|
||||
virtual void attach_envs(ref::brw<Environment> parent) override;
|
||||
|
||||
// ----- from GeneralizedExpression ----
|
||||
|
||||
virtual void display(std::ostream & os) const override;
|
||||
|
||||
private:
|
||||
/** sequence of expressions; evaluate in left-to-right order.
|
||||
**/
|
||||
std::vector<rp<Expression>> expr_v_;
|
||||
};
|
||||
} /*namespace ast*/
|
||||
|
||||
} /*namespace xo*/
|
||||
|
||||
|
||||
/** end Sequence.hpp **/
|
||||
Loading…
Add table
Add a link
Reference in a new issue