digitalmars.D - reasoning of evaluating code after return in current block (static if
- bastien penavayre (33/33) May 07 2017 Hi something's been bugging me for a while,
- Adam D. Ruppe (6/24) May 07 2017 It isn't evaluated, it is just compiled. The compile happens
- bastien penavayre (34/36) May 07 2017 I just realized that I accidentally posted this while editing.
- Stefan Koch (3/9) May 08 2017 compile your code with the -vcg-ast switch and look at the .cg
Hi something's been bugging me for a while, for the following code: { auto t = tuple(0,0); return true; auto v = t[5]; return false; } Why is the code following "return true" evaluated ? I know that it's the same with the C++ but I was wondering why ? My guess is for goto/labels but I find odd to evaluate it by default. Furthermore one of my issues with this is that it has a negative impact on "static if" and make it cumbersome in some situations. For instance this snippet comming from "https://github.com/uncrustify/uncrustify/issues/252" ClLinearExpression opBinary(string op) (double constant) { static if (op == "+") return new ClLinearExpression(this, 1, constant); else static if (op == "-") return new ClLinearExpression(this, 1, -constant); else static if (op == "*") return new ClLinearExpression(this, constant, 0); else static if (op == "/") return new ClLinearExpression(this, 1.0 / constant, 0); }
May 07 2017
On Sunday, 7 May 2017 at 22:34:14 UTC, bastien penavayre wrote:Why is the code following "return true" evaluated ?It isn't evaluated, it is just compiled. The compile happens before it is run, so it doesn't really know if it is reachable yet.ClLinearExpression opBinary(string op) (double constant) { static if (op == "+") return new ClLinearExpression(this, 1, constant); else static if (op == "-") return new ClLinearExpression(this, 1, -constant); else static if (op == "*") return new ClLinearExpression(this, constant, 0); else static if (op == "/") return new ClLinearExpression(this, 1.0 / constant, 0); }I would just write it `else static if` all on one line and not indent further. Then it barely looks any different anyway.
May 07 2017
On Sunday, 7 May 2017 at 23:20:26 UTC, Adam D. Ruppe wrote:I would just write it `else static if` all on one line and not indent further. Then it barely looks any different anyway.I just realized that I accidentally posted this while editing. I agree with you on that this is barely different from just adding "else". The example that I wanted to put was the following. { enum index = ...; static if (I >= args.length) return ...; //uses index else { enum result = ...; static if (!result[0]) { static if (name.length == 0) return ...; else static if (result[2] >= txt.length) return ...; else return ...; } else { enum next = ...; static if (!next[0]) return ...; else { ... return ...; } } } }
May 07 2017
On Sunday, 7 May 2017 at 23:41:00 UTC, bastien penavayre wrote:On Sunday, 7 May 2017 at 23:20:26 UTC, Adam D. Ruppe wrote:compile your code with the -vcg-ast switch and look at the .cg output.[...]I just realized that I accidentally posted this while editing. I agree with you on that this is barely different from just adding "else". [...]
May 08 2017