Thread overview | ||||||
---|---|---|---|---|---|---|
|
March 23, 2007 Strange "Statement is not reachable" | ||||
---|---|---|---|---|
| ||||
I created and Actor Class like this: class Actor { public this() { frameQ[this.type].add(this); //add myself to the queue HP=this.MaxHP; MP=this.MaxMP; if (this.type==ActorType.Other) return; if (heartQ[0].size()>heartQ[1].size()) heartQ[1].add(this); else heartQ[0].add(this); if (this.type==ActorType.Creature) AIQ.add(this); return; /*****/ } public final static const ActorType type=ActorType.Other; } (ignore functions calls, they aren't relevant) and then on the Player Class public class Player : Actor { public this(float x, float y, ubyte level) { this.level=level; super(x, y); } public final static const ActorType type=ActorType.HumanPlayer; } Now the problem lies on the line marked with "***" (the return statement in Actor's ctr). If it is there, DMD says that "statement is not reachable" without giving me any information on why or which line: semantic2 actor semantic3 actor warning - Error: statement is not reachable Process terminated with status 1 (0 minutes, 0 seconds) 0 errors, 0 warnings So, if I remove the "return;", the program compiles fine. What happened? Btw, it is my (Assembly) programming habit to put a "return;" at the end of every function, even if it is not void or is unreachable. |
March 23, 2007 Re: Strange "Statement is not reachable" | ||||
---|---|---|---|---|
| ||||
Posted in reply to Orgoton | Fergot to post: public this(in float x, in float y) { coord.x=x; coord.y=y; this(); } on the Actor class... Whether or not this functions has a "return;" at the end, the problem occurs. |
March 23, 2007 Re: Strange "Statement is not reachable" | ||||
---|---|---|---|---|
| ||||
Posted in reply to Orgoton | Orgoton escribió:
> I created and Actor Class like this:
>
> class Actor
> {
> public this()
> {
> frameQ[this.type].add(this); //add myself to the queue
> HP=this.MaxHP;
> MP=this.MaxMP;
> if (this.type==ActorType.Other) return;
> if (heartQ[0].size()>heartQ[1].size()) heartQ[1].add(this);
> else heartQ[0].add(this);
> if (this.type==ActorType.Creature) AIQ.add(this);
> return; /*****/
> }
> public final static const ActorType type=ActorType.Other;
> }
>
> (ignore functions calls, they aren't relevant)
>
> and then on the Player Class
>
> public class Player : Actor
> {
> public this(float x, float y, ubyte level)
> {
> this.level=level;
> super(x, y);
> }
> public final static const ActorType type=ActorType.HumanPlayer;
> }
>
> Now the problem lies on the line marked with "***" (the return statement in Actor's ctr). If it is there, DMD says that "statement is not reachable" without giving me any information on why or which line:
>
> semantic2 actor
> semantic3 actor
> warning - Error: statement is not reachable
> Process terminated with status 1 (0 minutes, 0 seconds)
> 0 errors, 0 warnings
>
> So, if I remove the "return;", the program compiles fine. What happened?
>
> Btw, it is my (Assembly) programming habit to put a "return;" at the end of every function, even if it is not void or is unreachable.
I think this is caused because the semantic pass adds a return statement at the end of the constructor, so if you specify a return you get two return statements, one of which is not reachable. But this is just a guess because I've just snooped the semantic code.
Ary
|
March 24, 2007 Re: Strange "Statement is not reachable" | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ary Manzana | I have other functions and constructors with return statements and none other gives out the same error. Besides, it is strange that the DMD does not supply me with information as to where the error occurs (in this case, which line is unreachable). Furthermore, the compiling log shows at the end: "0 warnings, 0 errors" when there were at least one, but this may be related to Code::Blocks. |
Copyright © 1999-2021 by the D Language Foundation