Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
June 24, 2006 Internal error from DMD | ||||
---|---|---|---|---|
| ||||
Is this a bug? Should the DMD compiler ever give an internal error? import std.stdio; import std.boxer; void main() { Object[] l; l ~= cast(Object) box(1); int a = unbox!(int)(cast(Box) l[0]); writefln("value %d", a); } >dmd tmp.d c:\dmd\src\phobos\std\boxer.d tmp.d(6): e2ir: cannot cast from Box to object.Object tmp.d(7): e2ir: cannot cast from object.Object to Box Internal error: e2ir.c 267 Thanks, Bradley |
June 24, 2006 Re: Internal error from DMD | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bradley Smith | "Bradley Smith" <digitalmars-com@baysmith.com> wrote in message news:e7hvil$1ffi$1@digitaldaemon.com... > Is this a bug? Should the DMD compiler ever give an internal error? Considering it's in alpha, the compiler is allowed to have some slack ;) But no, it's not _supposed_ to have internal errors. Any internal error is a bug. > import std.stdio; > import std.boxer; > > void main() { > Object[] l; > l ~= cast(Object) box(1); You can't cast a box to Object; box is a struct, not a class. If you want an array of boxes, hava a look at boxArray(). > int a = unbox!(int)(cast(Box) l[0]); > writefln("value %d", a); > } > > >dmd tmp.d c:\dmd\src\phobos\std\boxer.d > tmp.d(6): e2ir: cannot cast from Box to object.Object > tmp.d(7): e2ir: cannot cast from object.Object to Box > Internal error: e2ir.c 267 |
June 24, 2006 Re: Internal error from DMD | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | I didn't mean to be overly critical of the compiler. I wasn't sure how to interpret the "Internal error" message, and I just wanted to confirm that the objective was to not have any internal errors.
What is the proper procedure for reporting a bug?
Thanks for the pointer about Box and Object. I'm still learning how D handles data.
Thanks,
Bradley
Jarrett Billingsley wrote:
> "Bradley Smith" <digitalmars-com@baysmith.com> wrote in message news:e7hvil$1ffi$1@digitaldaemon.com...
>> Is this a bug? Should the DMD compiler ever give an internal error?
>
> Considering it's in alpha, the compiler is allowed to have some slack ;) But no, it's not _supposed_ to have internal errors. Any internal error is a bug.
>
>> import std.stdio;
>> import std.boxer;
>>
>> void main() {
>> Object[] l;
>> l ~= cast(Object) box(1);
>
> You can't cast a box to Object; box is a struct, not a class. If you want an array of boxes, hava a look at boxArray().
>
>> int a = unbox!(int)(cast(Box) l[0]);
>> writefln("value %d", a);
>> }
>>
>>> dmd tmp.d c:\dmd\src\phobos\std\boxer.d
>> tmp.d(6): e2ir: cannot cast from Box to object.Object
>> tmp.d(7): e2ir: cannot cast from object.Object to Box
>> Internal error: e2ir.c 267
>
>
|
June 25, 2006 Re: Internal error from DMD | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bradley Smith | "Bradley Smith" <digitalmars-com@baysmith.com> wrote in message news:449CF0E7.3020107@baysmith.com... >I didn't mean to be overly critical of the compiler. I wasn't sure how to interpret the "Internal error" message, and I just wanted to confirm that the objective was to not have any internal errors. Oh no, I didn't take it that way. Don't worry about it. > What is the proper procedure for reporting a bug? The most proper is through the D bugzilla: http://d.puremagic.com/bugzilla/index.cgi You'll set up an account and then you can add the bug using the "Enter a new issue" link. As far as I can find, this issue hasn't been added to bugzilla yet. > Thanks for the pointer about Box and Object. I'm still learning how D handles data. Sure. Just wondering what you're trying to store? There might be a simpler way to store it, whatever it is; I've personally never had to use boxes, though maybe you're coming from a dynamically typed background. |
June 26, 2006 Re: Internal error from DMD | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | Jarrett Billingsley wrote:
> Sure. Just wondering what you're trying to store? There might be a simpler way to store it, whatever it is; I've personally never had to use boxes, though maybe you're coming from a dynamically typed background.
>
I'm experimenting with converting some Java code to D, and the code stores int, boolean, and String data in a list through the Integer and Boolean wrapper objects. Using the D boxer is the only way I've found to create a heterogeneous array which includes primitive data elements.
Perhaps the need for boxing could be eliminated by making the code more D-like, but at this point, I'm only trying a straight translation.
Bradley
|
June 26, 2006 Re: Internal error from DMD | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bradley Smith | Bradley Smith wrote:
> Jarrett Billingsley wrote:
>
>> Sure. Just wondering what you're trying to store? There might be a simpler way to store it, whatever it is; I've personally never had to use boxes, though maybe you're coming from a dynamically typed background.
>
>
> I'm experimenting with converting some Java code to D, and the code stores int, boolean, and String data in a list through the Integer and Boolean wrapper objects. Using the D boxer is the only way I've found to create a heterogeneous array which includes primitive data elements.
>
> Perhaps the need for boxing could be eliminated by making the code more D-like, but at this point, I'm only trying a straight translation.
>
> Bradley
Well, if it only ever works with those three types, you could go with a Var struct.
# enum VarType { Int, Bool, String }
#
# struct Var {
# VarType type ;
#
# union {
# bool b ;
# int i ;
# char[] s ;
# }
# }
#
# Var[] array;
You can simplify creation of Var structs with a set of static call operators, like such:
# struct Var {
# // ...
# static Var opCall (bool value) {
# Var var ;
#
# var.type = VarType.Bool ;
# var.b = value ;
#
# return var;
# }
# }
While it isn't /the/ most elegant solution possible, its tried and true, and pretty effective for definite sets of types.
-- Chris Nicholson-Sauls
|
Copyright © 1999-2021 by the D Language Foundation