diff options
author | Marius Kintel <marius@kintel.net> | 2012-10-07 19:24:08 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2012-10-07 19:24:08 (GMT) |
commit | 0cea83a35d302929d22ddddbaa60280af62bf4dc (patch) | |
tree | 554d284a761cf37704a43de8b034df5ff784aa60 | |
parent | fa9811c0f3314a0f343385c2cba7e691fa814b08 (diff) |
Fixed weakness in parser causing modifier characters not to work in front of 'if' statements. Fixes #197
20 files changed, 57 insertions, 26 deletions
diff --git a/src/parser.y b/src/parser.y index c11f0f2..3e485ff 100644 --- a/src/parser.y +++ b/src/parser.y @@ -233,6 +233,22 @@ ifelse_statement: } ; module_instantiation: + '!' module_instantiation { + $$ = $2; + if ($$) $$->tag_root = true; + } | + '#' module_instantiation { + $$ = $2; + if ($$) $$->tag_highlight = true; + } | + '%' module_instantiation { + $$ = $2; + if ($$) $$->tag_background = true; + } | + '*' module_instantiation { + delete $2; + $$ = NULL; + } | single_module_instantiation ';' { $$ = $1; } | @@ -271,26 +287,7 @@ single_module_instantiation: $$->argexpr = $3->argexpr; free($1); delete $3; - } | - '!' single_module_instantiation { - $$ = $2; - if ($$) - $$->tag_root = true; - } | - '#' single_module_instantiation { - $$ = $2; - if ($$) - $$->tag_highlight = true; - } | - '%' single_module_instantiation { - $$ = $2; - if ($$) - $$->tag_background = true; - } | - '*' single_module_instantiation { - delete $2; - $$ = NULL; - }; + } expr: TOK_TRUE { diff --git a/testdata/scad/features/background-modifier.scad b/testdata/scad/features/background-modifier.scad index ec7b28d..5430472 100644 --- a/testdata/scad/features/background-modifier.scad +++ b/testdata/scad/features/background-modifier.scad @@ -2,3 +2,4 @@ difference() { sphere(r=10); %cylinder(h=30, r=6, center=true); } +%if (true) cube([25,6,3], center=true); diff --git a/testdata/scad/features/disable-modifier.scad b/testdata/scad/features/disable-modifier.scad index b47e074..2b75339 100644 --- a/testdata/scad/features/disable-modifier.scad +++ b/testdata/scad/features/disable-modifier.scad @@ -2,3 +2,4 @@ difference() { *sphere(r=10); cylinder(h=30, r=6, center=true); } +*if (true) cube([25,6,3], center=true); diff --git a/testdata/scad/features/highlight-and-background-modifier.scad b/testdata/scad/features/highlight-and-background-modifier.scad index 945d6b4..5dca703 100644 --- a/testdata/scad/features/highlight-and-background-modifier.scad +++ b/testdata/scad/features/highlight-and-background-modifier.scad @@ -1,8 +1,10 @@ difference() { sphere(r=10); %#cylinder(h=30, r=6, center=true); + %#if (true) cube([6,25,3], center=true); } translate([13,0,0]) difference() { sphere(r=10); #%cylinder(h=30, r=6, center=true); + #%if (true) cube([6,25,3], center=true); } diff --git a/testdata/scad/features/highlight-modifier.scad b/testdata/scad/features/highlight-modifier.scad index 1156a88..f228d08 100644 --- a/testdata/scad/features/highlight-modifier.scad +++ b/testdata/scad/features/highlight-modifier.scad @@ -2,3 +2,4 @@ difference() { sphere(r=10); #cylinder(h=30, r=6, center=true); } +#if (true) cube([25,6,3], center=true); diff --git a/testdata/scad/features/hull3-tests.scad b/testdata/scad/features/hull3-tests.scad index b6b3fe4..e3fc8e7 100644 --- a/testdata/scad/features/hull3-tests.scad +++ b/testdata/scad/features/hull3-tests.scad @@ -19,10 +19,10 @@ translate([25,0,0]) hull() { // Don't Crash (issue 188) translate([-5,-5,-5]) { - hull() { - intersection(){ - cube([1,1,1]); - translate([-1,-1,-1]) cube([1,1,1]); - } + hull() { + intersection() { + cube([1,1,1]); + translate([-1,-1,-1]) cube([1,1,1]); + } + } } - diff --git a/tests/regression/cgalpngtest/highlight-modifier-expected.png b/tests/regression/cgalpngtest/highlight-modifier-expected.png Binary files differindex 29a4117..e220aa1 100644 --- a/tests/regression/cgalpngtest/highlight-modifier-expected.png +++ b/tests/regression/cgalpngtest/highlight-modifier-expected.png diff --git a/tests/regression/cgalpngtest/root-modifier-if-expected.png b/tests/regression/cgalpngtest/root-modifier-if-expected.png Binary files differnew file mode 100644 index 0000000..1fe2aa5 --- /dev/null +++ b/tests/regression/cgalpngtest/root-modifier-if-expected.png diff --git a/tests/regression/dumptest/background-modifier-expected.txt b/tests/regression/dumptest/background-modifier-expected.txt index 6e9ca57..ed769b3 100644 --- a/tests/regression/dumptest/background-modifier-expected.txt +++ b/tests/regression/dumptest/background-modifier-expected.txt @@ -2,4 +2,7 @@ sphere($fn = 0, $fa = 12, $fs = 2, r = 10); %cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); } + %group() { + cube(size = [25, 6, 3], center = true); + } diff --git a/tests/regression/dumptest/highlight-and-background-modifier-expected.txt b/tests/regression/dumptest/highlight-and-background-modifier-expected.txt index a525d68..20c82cc 100644 --- a/tests/regression/dumptest/highlight-and-background-modifier-expected.txt +++ b/tests/regression/dumptest/highlight-and-background-modifier-expected.txt @@ -1,11 +1,17 @@ difference() { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); %cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); + %group() { + cube(size = [6, 25, 3], center = true); + } } multmatrix([[1, 0, 0, 13], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); %cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); + %group() { + cube(size = [6, 25, 3], center = true); + } } } diff --git a/tests/regression/dumptest/highlight-modifier-expected.txt b/tests/regression/dumptest/highlight-modifier-expected.txt index c0f1da2..c6204bd 100644 --- a/tests/regression/dumptest/highlight-modifier-expected.txt +++ b/tests/regression/dumptest/highlight-modifier-expected.txt @@ -2,4 +2,7 @@ sphere($fn = 0, $fa = 12, $fs = 2, r = 10); cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); } + group() { + cube(size = [25, 6, 3], center = true); + } diff --git a/tests/regression/dumptest/hull3-tests-expected.txt b/tests/regression/dumptest/hull3-tests-expected.txt index af48b7f..4c05e2c 100644 --- a/tests/regression/dumptest/hull3-tests-expected.txt +++ b/tests/regression/dumptest/hull3-tests-expected.txt @@ -17,4 +17,14 @@ } } } + multmatrix([[1, 0, 0, -5], [0, 1, 0, -5], [0, 0, 1, -5], [0, 0, 0, 1]]) { + hull() { + intersection() { + cube(size = [1, 1, 1], center = false); + multmatrix([[1, 0, 0, -1], [0, 1, 0, -1], [0, 0, 1, -1], [0, 0, 0, 1]]) { + cube(size = [1, 1, 1], center = false); + } + } + } + } diff --git a/tests/regression/dumptest/root-modifier-if-expected.txt b/tests/regression/dumptest/root-modifier-if-expected.txt new file mode 100644 index 0000000..dfcd15a --- /dev/null +++ b/tests/regression/dumptest/root-modifier-if-expected.txt @@ -0,0 +1,7 @@ + group() { + sphere($fn = 0, $fa = 12, $fs = 2, r = 5); + } + group() { + cube(size = [5, 5, 5], center = false); + } + diff --git a/tests/regression/opencsgtest/background-modifier-expected.png b/tests/regression/opencsgtest/background-modifier-expected.png Binary files differindex 24149d0..2505331 100644 --- a/tests/regression/opencsgtest/background-modifier-expected.png +++ b/tests/regression/opencsgtest/background-modifier-expected.png diff --git a/tests/regression/opencsgtest/highlight-and-background-modifier-expected.png b/tests/regression/opencsgtest/highlight-and-background-modifier-expected.png Binary files differindex 72d03c3..8febe76 100644 --- a/tests/regression/opencsgtest/highlight-and-background-modifier-expected.png +++ b/tests/regression/opencsgtest/highlight-and-background-modifier-expected.png diff --git a/tests/regression/opencsgtest/highlight-modifier-expected.png b/tests/regression/opencsgtest/highlight-modifier-expected.png Binary files differindex 78d0309..af01e5b 100644 --- a/tests/regression/opencsgtest/highlight-modifier-expected.png +++ b/tests/regression/opencsgtest/highlight-modifier-expected.png diff --git a/tests/regression/opencsgtest/root-modifier-if-expected.png b/tests/regression/opencsgtest/root-modifier-if-expected.png Binary files differnew file mode 100644 index 0000000..5b9a786 --- /dev/null +++ b/tests/regression/opencsgtest/root-modifier-if-expected.png diff --git a/tests/regression/throwntogethertest/background-modifier-expected.png b/tests/regression/throwntogethertest/background-modifier-expected.png Binary files differindex 79810f5..2505331 100644 --- a/tests/regression/throwntogethertest/background-modifier-expected.png +++ b/tests/regression/throwntogethertest/background-modifier-expected.png diff --git a/tests/regression/throwntogethertest/highlight-modifier-expected.png b/tests/regression/throwntogethertest/highlight-modifier-expected.png Binary files differindex a1ec8fe..7973d82 100644 --- a/tests/regression/throwntogethertest/highlight-modifier-expected.png +++ b/tests/regression/throwntogethertest/highlight-modifier-expected.png diff --git a/tests/regression/throwntogethertest/root-modifier-if-expected.png b/tests/regression/throwntogethertest/root-modifier-if-expected.png Binary files differnew file mode 100644 index 0000000..5b9a786 --- /dev/null +++ b/tests/regression/throwntogethertest/root-modifier-if-expected.png |