diff options
| author | don bright <hugh.m.bright@gmail.com> | 2013-03-11 23:40:51 (GMT) | 
|---|---|---|
| committer | don bright <hugh.m.bright@gmail.com> | 2013-03-11 23:40:51 (GMT) | 
| commit | ea0bb94be9a748744942798e080bdbfd10e3c270 (patch) | |
| tree | fb23c498afc75c03df8f97f7c2eda466d1168c30 /src | |
| parent | 79ce1e47d0ff250aed46ddc3058ea4f694900bb0 (diff) | |
| parent | d9c4b779421b226d0ad1eed492611eb5ddb843ed (diff) | |
Merge branch 'master' of github.com:openscad/openscad into resize5
Diffstat (limited to 'src')
| -rw-r--r-- | src/context.cc | 5 | ||||
| -rw-r--r-- | src/module.cc | 10 | ||||
| -rw-r--r-- | src/module.h | 5 | ||||
| -rw-r--r-- | src/openscad.cc | 8 | ||||
| -rw-r--r-- | src/parser.y | 17 | 
5 files changed, 18 insertions, 27 deletions
| diff --git a/src/context.cc b/src/context.cc index a2a8d13..97ea5b9 100644 --- a/src/context.cc +++ b/src/context.cc @@ -51,9 +51,8 @@ Context::Context(const Context *parent, const Module *library)  		this->functions_p = &library->functions;  		this->modules_p = &library->modules;  		this->usedlibs_p = &library->usedlibs; -		for (size_t j = 0; j < library->assignments_var.size(); j++) { -			this->set_variable(library->assignments_var[j],  -												 library->assignments_expr[j]->evaluate(this)); +		BOOST_FOREACH(const std::string &var, library->assignments_var) { +			this->set_variable(var, library->assignments.at(var)->evaluate(this));  		}  	}  	else { diff --git a/src/module.cc b/src/module.cc index cfd73cc..e6dcb57 100644 --- a/src/module.cc +++ b/src/module.cc @@ -136,7 +136,7 @@ std::vector<AbstractNode*> IfElseModuleInstantiation::evaluateElseChildren(const  Module::~Module()  { -	BOOST_FOREACH (Expression *v, assignments_expr) delete v; +	BOOST_FOREACH (const AssignmentContainer::value_type &v, assignments) delete v.second;  	BOOST_FOREACH (FunctionContainer::value_type &f, functions) delete f.second;  	BOOST_FOREACH (AbstractModuleContainer::value_type &m, modules) delete m.second;  	BOOST_FOREACH (ModuleInstantiation *v, children) delete v; @@ -158,8 +158,8 @@ AbstractNode *Module::evaluate(const Context *ctx, const ModuleInstantiation *in  	else  		c.usedlibs_p = NULL; -	for (size_t i = 0; i < assignments_var.size(); i++) { -		c.set_variable(assignments_var[i], assignments_expr[i]->evaluate(&c)); +	BOOST_FOREACH(const std::string &var, assignments_var) { +		c.set_variable(var, assignments.at(var)->evaluate(&c));  	}  	AbstractNode *node = new AbstractNode(inst); @@ -192,8 +192,8 @@ std::string Module::dump(const std::string &indent, const std::string &name) con  	BOOST_FOREACH(const AbstractModuleContainer::value_type &m, modules) {  		dump << m.second->dump(indent + tab, m.first);  	} -	for (size_t i = 0; i < assignments_var.size(); i++) { -		dump << indent << tab << assignments_var[i] << " = " << *assignments_expr[i] << ";\n"; +	BOOST_FOREACH(const std::string &var, assignments_var) { +		dump << indent << tab << var << " = " << *assignments.at(var) << ";\n";  	}  	for (size_t i = 0; i < children.size(); i++) {  		dump << children[i]->dump(indent + tab); diff --git a/src/module.h b/src/module.h index 879d249..cc82f81 100644 --- a/src/module.h +++ b/src/module.h @@ -74,8 +74,9 @@ public:  	bool is_handling_dependencies;  	bool handleDependencies(); -	std::vector<std::string> assignments_var; -	std::vector<Expression*> assignments_expr; +	std::list<std::string> assignments_var; +	typedef boost::unordered_map<std::string, Expression*> AssignmentContainer; +	AssignmentContainer assignments;  	typedef boost::unordered_map<std::string, class AbstractFunction*> FunctionContainer;  	FunctionContainer functions; diff --git a/src/openscad.cc b/src/openscad.cc index 75d7b9d..682ccb7 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -55,7 +55,9 @@  #ifdef Q_WS_MAC  #include "EventFilter.h"  #include "AppleEvents.h" -#include "SparkleAutoUpdater.h" +#ifdef OPENSCAD_DEPLOY +  #include "SparkleAutoUpdater.h" +#endif  #endif  #include "Camera.h" @@ -483,13 +485,11 @@ int main(int argc, char **argv)  		installAppleEventHandlers();  #endif		 -#ifndef DEBUG -#ifdef Q_WS_MAC +#if defined(OPENSCAD_DEPLOY) && defined(Q_WS_MAC)  		AutoUpdater *updater = new SparkleAutoUpdater;  		AutoUpdater::setUpdater(updater);  		if (updater->automaticallyChecksForUpdates()) updater->checkForUpdates();  #endif -#endif  		QString qfilename;  		if (filename) qfilename = QString::fromStdString(boosty::stringy(boosty::absolute(filename))); diff --git a/src/parser.y b/src/parser.y index 3e485ff..536f4ef 100644 --- a/src/parser.y +++ b/src/parser.y @@ -151,19 +151,10 @@ statement:  		}  	} |  	TOK_ID '=' expr ';' { -		bool add_new_assignment = true; -		for (size_t i = 0; i < currmodule->assignments_var.size(); i++) { -			if (currmodule->assignments_var[i] != $1) -				continue; -			delete currmodule->assignments_expr[i]; -			currmodule->assignments_expr[i] = $3; -			add_new_assignment = false; -		} -		if (add_new_assignment) { -			currmodule->assignments_var.push_back($1); -			currmodule->assignments_expr.push_back($3); -			free($1); -		} +          std::list<std::string>::iterator found = std::find(currmodule->assignments_var.begin(), currmodule->assignments_var.end(),$1); +          if (found != currmodule->assignments_var.end()) currmodule->assignments_var.erase(found); +          currmodule->assignments_var.push_back($1); +          currmodule->assignments[$1] = $3;  	} |  	TOK_MODULE TOK_ID '(' arguments_decl optional_commas ')' {  		Module *p = currmodule; | 
