Functional-lang  0.0
An example functional programming language
Public Member Functions | List of all members
UnOpExpr Class Reference
Inheritance diagram for UnOpExpr:
Expr GCObj

Public Member Functions

 UnOpExpr (GCMain &gc, const TokenPos &pos, Operator op, Expr *expr)
 
Operator getOperator () const noexcept
 
const Expr & getExpression () const noexcept
 
virtual void mark (GCMain &gc) noexcept override
 If not marked mark itself and children.
 
virtual Expr * eval (GCMain &gc, Environment &env) noexcept override
 Evaluates expression one time. More...
 
virtual bool equals (const Expr *expr, bool exact=false) const noexcept override
 Checks if this expression and expr have the same structure, Every expression has the same structure as '_' (it's called ANY after all). More...
 
virtual Expr * optimize (GCMain &gc) noexcept override
 
virtual UnOpExpr * optimize (GCMain &gc, std::vector< Expr * > &exprs) noexcept
 
- Public Member Functions inherited from Expr
 Expr (GCMain &gc, ExprType type, const TokenPos &pos)
 
std::size_t getDepth () const noexcept
 
bool hasLastEval () const noexcept
 
const TokenPos & getTokenPos () const noexcept
 
virtual std::string toString () const noexcept
 
ExprType getExpressionType () const noexcept
 
Expr * evalWithLookup (GCMain &gc, Environment &env) noexcept
 
virtual Expr * replace (GCMain &gc, const std::string &name, Expr *expr) const noexcept
 Replace all identifiers equal to name with expr. More...
 
virtual std::vector< std::string > getIdentifiers () const noexcept
 
- Public Member Functions inherited from GCObj
 GCObj (GCMain &main) noexcept
 Initialize as not marked.
 
virtual bool isMarked (GCMain &main) const noexcept
 

Additional Inherited Members

- Protected Member Functions inherited from GCObj
virtual void markSelf (GCMain &main)
 Marks itself.
 
- Protected Attributes inherited from Expr
std::size_t depth
 
Expr * lastEval = nullptr
 

Member Function Documentation

◆ equals()

virtual bool UnOpExpr::equals ( const Expr *  expr,
bool  exact = false 
) const
overridevirtualnoexcept

Checks if this expression and expr have the same structure, Every expression has the same structure as '_' (it's called ANY after all).

Parameters
exprThe expression to compare to this.
exactIf true any must equal any and nothing else. Otherwise any is equal to anyting else.

Reimplemented from Expr.

◆ eval()

virtual Expr* UnOpExpr::eval ( GCMain &  gc,
Environment &  env 
)
overridevirtualnoexcept

Evaluates expression one time.

Parameters
gc
envEnvironment for accessing variables.
Returns
Returns itself if nothing evaluated, otherwise a new expression.

Reimplemented from Expr.

◆ optimize()

virtual Expr* UnOpExpr::optimize ( GCMain &  gc)
overridevirtualnoexcept
Returns
Returns an optimized version of this expression. If nothing was optimized, returns itself.

Reimplemented from Expr.


The documentation for this class was generated from the following file: