diff options
| -rw-r--r-- | mainwin.cc | 2 | ||||
| -rw-r--r-- | openscad.cc | 11 | ||||
| -rw-r--r-- | openscad.h | 1 | ||||
| -rw-r--r-- | parser.y | 16 | 
4 files changed, 23 insertions, 7 deletions
| @@ -411,7 +411,7 @@ void MainWindow::compile(bool procevents)  	root_ctx.set_variable("$vpr", vpr);  	last_compiled_doc = editor->toPlainText(); -	root_module = parse(last_compiled_doc.toAscii().data(), false); +	root_module = parse((last_compiled_doc + commandline_commands).toAscii().data(), false);  	delete highlighter;  	highlighter = new Highlighter(editor->document()); diff --git a/openscad.cc b/openscad.cc index fc9efc8..571ead5 100644 --- a/openscad.cc +++ b/openscad.cc @@ -30,11 +30,13 @@  static void help(const char *progname)  { -	fprintf(stderr, "Usage: %s [ -m make_command ] [ filename ]\n", progname); -	fprintf(stderr, "       %s { -s stl_file | -o off_file } [ -d deps_file ] [ -m make_command ] filename\n", progname); +	fprintf(stderr, "Usage: %s [ { -s stl_file | -o off_file } [ -d deps_file ] ]\\\n" +			"%*s[ -m make_command ] [ -D var=val [..] ] filename\n", +			progname, strlen(progname)+8, "");  	exit(1);  } +QString commandline_commands;  const char *make_command = NULL;  QSet<QString> dependencies; @@ -80,7 +82,7 @@ int main(int argc, char **argv)  	int opt; -	while ((opt = getopt(argc, argv, "s:o:d:m:")) != -1) +	while ((opt = getopt(argc, argv, "s:o:d:m:D:")) != -1)  	{  		switch (opt)  		{ @@ -104,6 +106,9 @@ int main(int argc, char **argv)  				help(argv[0]);  			make_command = optarg;  			break; +		case 'D': +			commandline_commands += QString(optarg) + QString(";\n"); +			break;  		default:  			help(argv[0]);  		} @@ -828,6 +828,7 @@ public slots:  extern AbstractModule *parse(const char *text, int debug);  extern int get_fragments_from_r(double r, double fn, double fs, double fa); +extern QString commandline_commands;  extern int parser_error_pos;  extern QPointer<MainWindow> current_win; @@ -112,9 +112,19 @@ statement:  		}  	} |  	TOK_ID '=' expr ';' { -		module->assignments_var.append($1); -		module->assignments_expr.append($3); -		free($1); +		bool add_new_assignment = true; +		for (int i = 0; i < module->assignments_var.size(); i++) { +			if (module->assignments_var[i] != QString($1)) +				continue; +			delete module->assignments_expr[i]; +			module->assignments_expr[i] = $3; +			add_new_assignment = false; +		} +		if (add_new_assignment) { +			module->assignments_var.append($1); +			module->assignments_expr.append($3); +			free($1); +		}  	} |  	TOK_MODULE TOK_ID '(' arguments_decl optional_commas ')' {  		Module *p = module; | 
