X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=8c4f54537c7bc0da9f70ce9a744acf154157bb5d;hp=d8b2608afe9b885a5e5b376761b80f1bed0d02c7;hb=8468279a03d906f79fb6158162c7970d4d7fff60;hpb=8e14c298d9eaa47b81e27d5c25174bda958b445f diff --git a/source/programcompiler.h b/source/programcompiler.h index d8b2608a..8c4f5453 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -29,12 +29,12 @@ private: struct BlockModifier: Visitor { bool remove_node; - std::vector > insert_nodes; + std::vector > insert_nodes; BlockModifier(); void flatten_block(ProgramSyntax::Block &); - void apply_and_increment(ProgramSyntax::Block &, std::list >::iterator &); + void apply_and_increment(ProgramSyntax::Block &, ProgramSyntax::NodeList::iterator &); using Visitor::visit; virtual void visit(ProgramSyntax::Block &); }; @@ -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 &); @@ -277,6 +279,7 @@ private: std::vector variables; ProgramSyntax::Assignment *assignment; bool assignment_target; + bool assign_to_subscript; bool global_scope; UnusedVariableLocator(); @@ -323,6 +326,7 @@ private: using Visitor::visit; virtual void visit(ProgramSyntax::Block &); virtual void visit(ProgramSyntax::VariableDeclaration &); + virtual void visit(ProgramSyntax::Iteration &); }; struct PrecisionRemover: BlockModifier @@ -356,6 +360,7 @@ private: LegacyConverter(const Version &); bool check_version(const Version &) const; + bool check_extension(const Extension &) const; using Visitor::visit; bool supports_unified_interface_syntax() const; virtual void visit(ProgramSyntax::VariableReference &);