Thread overview
Possible problem with new array
May 02, 2008
bearophile
problem using std.xml
May 02, 2008
boyd
May 02, 2008
Gide Nwawudu
May 02, 2008
boyd
May 02, 2008
Gide Nwawudu
May 02, 2008
The following code:



void main() {

  int[1] a = [10];

  int i;

  int[] b = new int[a[i]];

}



Generates this error (DMD V.1.028):

need size of rightmost array, not type a[i]



Is this a DMD bug or an error of mine?



Thank you,

bear hugs,

bearophile
May 02, 2008
I've been trying to work with the D2 xml module. It compiles fine, but when I run it I get an access violation. Am I doing something wrong?

module main;

import std.stdio;
import std.file;
import std.xml;

int main(){
    string s = cast(string)std.file.read("widget.xml");

    check(s);
    auto doc = new Document(s);
    writefln(doc);

    return 0;
}

Cheers,
Boyd
May 02, 2008
On Thu, 01 May 2008 20:50:05 -0400, bearophile <bearophileHUGS@lycos.com> wrote:

>
>The following code:
>
>
>
>void main() {
>
>  int[1] a = [10];
>
>  int i;
>
>  int[] b = new int[a[i]];
>
>}
>
>
>
>Generates this error (DMD V.1.028):
>
>need size of rightmost array, not type a[i]
>
>
>
>Is this a DMD bug or an error of mine?

It doesn't compile on D2.013 either, looks like a bug. The workaround is to put a[i] in parenthesis.

>  int[] b = new int[a[i]];
int[] b = new int[(a[i])];

Gide
May 02, 2008
On Fri, 02 May 2008 09:34:00 +0200, boyd <gaboonviper@gmx.net> wrote:

>I've been trying to work with the D2 xml module. It compiles fine, but when I run it I get an access violation. Am I doing something wrong?
>
>module main;
>
>import std.stdio;
>import std.file;
>import std.xml;
>
>int main(){
>     string s = cast(string)std.file.read("widget.xml");
>
>     check(s);
>     auto doc = new Document(s);
>     writefln(doc);
>
>     return 0;
>}
>
>Cheers,
>Boyd

If widget.xml is malformed, it crashes. Probably a bug.

Tested with the following; the first errors, the second version  is ok.

[widget.xml]
<?xml version="1.0"?><widget>
[/widget.xml]

[widget.xml]
<?xml version="1.0"?><widget></widget>
[/widget.xml]

Gide
May 02, 2008
Except that the check(s) function that is supposed to check this, didn't give any errors.

I found the bug though. Apparently if a closed <node/> is written inside another node, an access violation occurs.

works:
	<?xml version="1.0"?><tag/>

doesn't work:
	<?xml version="1.0"?><something><tag/></something>

I'll post this on bugzilla. Thanks for trying to help though.

Cheers,
Boyd

-------
On Fri, 02 May 2008 14:38:36 +0200, Gide Nwawudu <gide@btinternet.com> wrote:

> On Fri, 02 May 2008 09:34:00 +0200, boyd <gaboonviper@gmx.net> wrote:
>
>> I've been trying to work with the D2 xml module. It compiles fine, but
>> when I run it I get an access violation. Am I doing something wrong?
>>
>> module main;
>>
>> import std.stdio;
>> import std.file;
>> import std.xml;
>>
>> int main(){
>>     string s = cast(string)std.file.read("widget.xml");
>>
>>     check(s);
>>     auto doc = new Document(s);
>>     writefln(doc);
>>
>>     return 0;
>> }
>>
>> Cheers,
>> Boyd
>
> If widget.xml is malformed, it crashes. Probably a bug.
>
> Tested with the following; the first errors, the second version  is
> ok.
>
> [widget.xml]
> <?xml version="1.0"?><widget>
> [/widget.xml]
>
> [widget.xml]
> <?xml version="1.0"?><widget></widget>
> [/widget.xml]
>
> Gide