method has no return statement with switch

2015-11-06 Thread crimaniak via Digitalmars-d-learn

Hi!

I have the error message:
source/url.cache.d(20,16): Error: function 
url.Cache.UrlCache.doRequest has no return statement, but is 
expected to return a value of type string


Inserting dummy return statement doesn't help. final switch / 
switch with default - no matter.


As I understand compiler must detect when end of function is 
unreachable (and in fact it detects it - see comment about return 
""; line) and do not try to check for return value. Is this my or 
compiler's error here?



dmd --version

DMD64 D Compiler v2.069.0
Copyright (c) 1999-2015 by Digital Mars written by Walter Bright


[code]
module url.Cache;

import std.conv;
import core.exception;
import mysql.d;
import std.digest.md;
import std.net.curl;

enum Method { GET="GET", POST="POST" }

class UrlCache
{
// ...
public string doRealRequest(string url, Method method)
{
final switch(method)
{
case Method.GET:
return std.net.curl.get!AutoProtocol(url).text;
case Method.POST:
return std.net.curl.post(url, []).text;
}
		// return ""; // produces 'statement is not reachable' warning, 
don't fix the problem

}
// ...  
}
[/code]



Re: method has no return statement with switch

2015-11-06 Thread Adam D. Ruppe via Digitalmars-d-learn

On Saturday, 7 November 2015 at 00:21:57 UTC, crimaniak wrote:
Inserting dummy return statement doesn't help. final switch / 
switch with default - no matter.



Try inserting assert(0); instead of a dummy return.


Re: method has no return statement with switch

2015-11-06 Thread crimaniak via Digitalmars-d-learn

On Saturday, 7 November 2015 at 00:27:02 UTC, Adam D. Ruppe wrote:

On Saturday, 7 November 2015 at 00:21:57 UTC, crimaniak wrote:
Inserting dummy return statement doesn't help. final switch / 
switch with default - no matter.



Try inserting assert(0); instead of a dummy return.


 Done, no difference.


Re: method has no return statement with switch

2015-11-06 Thread BBaz via Digitalmars-d-learn

On Saturday, 7 November 2015 at 00:30:29 UTC, crimaniak wrote:
On Saturday, 7 November 2015 at 00:27:02 UTC, Adam D. Ruppe 
wrote:

On Saturday, 7 November 2015 at 00:21:57 UTC, crimaniak wrote:
Inserting dummy return statement doesn't help. final switch / 
switch with default - no matter.



Try inserting assert(0); instead of a dummy return.


 Done, no difference.


Wow, that impossible. You switch is well final.

here DMD 2.068, linux x86_64 the folling compiles and runs:


enum Method { GET="GET", POST="POST" }

class UrlCache
{
public string doRealRequest(string url, Method method)
{
final switch(method)
{
case Method.GET:
return std.net.curl.get!AutoProtocol(url).idup;
case Method.POST:
return std.net.curl.post(url, []).idup;
}
}
}

void main()
{auto test = new UrlCache;}


are you sure that the error you get doesnt come from another 
location ?!


Re: method has no return statement with switch

2015-11-06 Thread tcak via Digitalmars-d-learn

On Saturday, 7 November 2015 at 00:21:57 UTC, crimaniak wrote:

Hi!

I have the error message:
source/url.cache.d(20,16): Error: function 
url.Cache.UrlCache.doRequest has no return statement, but is 
expected to return a value of type string


[...]


Because the "switch" is marked as "final", eventually one of 
cases will be followed. Because both cases have a "return" point, 
code will never get out of switch statement. So the compiler acts 
correctly.


Re: method has no return statement with switch

2015-11-06 Thread BBaz via Digitalmars-d-learn

On Saturday, 7 November 2015 at 00:21:57 UTC, crimaniak wrote:

[...]
url.Cache.UrlCache.doRequest has no return statement, but is 
expected to return a value of type string

[...]
public string doRealRequest(string url, Method method)



You posted the wrong code sample: your code shows doRealRequest 
but the message is about doRequest !


Re: method has no return statement with switch

2015-11-07 Thread crimaniak via Digitalmars-d-learn

On Saturday, 7 November 2015 at 06:02:49 UTC, BBaz wrote:

On Saturday, 7 November 2015 at 00:21:57 UTC, crimaniak wrote:

[...]
url.Cache.UrlCache.doRequest has no return statement, but is 
expected to return a value of type string

[...]
public string doRealRequest(string url, Method method)



You posted the wrong code sample: your code shows doRealRequest 
but the message is about doRequest !


 Yes! It's just my inattention. Thanks!

p.s. Don't program at 3 am