X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=06306743fb7945b5f2783c70663bf11ff4a04828;hp=d8b2608afe9b885a5e5b376761b80f1bed0d02c7;hb=0cacf19c2e6aaa182ae0fcc7dfaae345aedd0e74;hpb=8e14c298d9eaa47b81e27d5c25174bda958b445f diff --git a/source/programcompiler.h b/source/programcompiler.h index d8b2608a..06306743 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -216,7 +216,9 @@ private: virtual void visit(ProgramSyntax::Block &); virtual void visit(ProgramSyntax::UnaryExpression &); virtual void visit(ProgramSyntax::BinaryExpression &); + virtual void visit(ProgramSyntax::MemberAccess &); virtual void visit(ProgramSyntax::FunctionCall &); + virtual void visit(ProgramSyntax::VariableDeclaration &); virtual void visit(ProgramSyntax::Return &); }; @@ -225,12 +227,11 @@ private: typedef std::map ValueMap; const ValueMap *variable_values; - bool const_only; float result; bool result_valid; ExpressionEvaluator(); - ExpressionEvaluator(const ValueMap *, bool); + ExpressionEvaluator(const ValueMap &); using ProgramSyntax::NodeVisitor::visit; virtual void visit(ProgramSyntax::Literal &); @@ -243,13 +244,14 @@ private: struct ConstantConditionEliminator: BlockModifier { unsigned scope_level; - bool in_loop; + bool record_only; ExpressionEvaluator::ValueMap variable_values; ConstantConditionEliminator(); using Visitor::visit; virtual void visit(ProgramSyntax::Block &); + virtual void visit(ProgramSyntax::UnaryExpression &); virtual void visit(ProgramSyntax::Assignment &); virtual void visit(ProgramSyntax::VariableDeclaration &); virtual void visit(ProgramSyntax::Conditional &); @@ -323,6 +325,7 @@ private: using Visitor::visit; virtual void visit(ProgramSyntax::Block &); virtual void visit(ProgramSyntax::VariableDeclaration &); + virtual void visit(ProgramSyntax::Iteration &); }; struct PrecisionRemover: BlockModifier