This one-line code: /// test.d struct X; causes a crash when executing dmd -c -X test.d Here's a patch Index: json.c =================================================================== --- json.c (revision 432) +++ json.c (working copy) @@ -307,16 +307,19 @@ } } - JsonString(buf, Pmembers); - buf->writestring(" : [\n"); - size_t offset = buf->offset; - for (int i = 0; i < members->dim; i++) - { Dsymbol *s = (Dsymbol *)members->data[i]; - if (offset != buf->offset) - { buf->writestring(",\n"); - offset = buf->offset; + if(members) + { + JsonString(buf, Pmembers); + buf->writestring(" : [\n"); + size_t offset = buf->offset; + for (int i = 0; i < members->dim; i++) + { Dsymbol *s = (Dsymbol *)members->data[i]; + if (offset != buf->offset) + { buf->writestring(",\n"); + offset = buf->offset; + } + s->toJsonBuffer(buf); } - s->toJsonBuffer(buf); } JsonRemoveComma(buf); buf->writestring("]\n");
sorry, the patch produced wrong brackets. Here's a better version: Index: json.c =================================================================== --- json.c (revision 432) +++ json.c (working copy) @@ -307,19 +307,23 @@ } } - JsonString(buf, Pmembers); - buf->writestring(" : [\n"); - size_t offset = buf->offset; - for (int i = 0; i < members->dim; i++) - { Dsymbol *s = (Dsymbol *)members->data[i]; - if (offset != buf->offset) - { buf->writestring(",\n"); - offset = buf->offset; + if(members) + { + JsonString(buf, Pmembers); + buf->writestring(" : [\n"); + size_t offset = buf->offset; + for (int i = 0; i < members->dim; i++) + { Dsymbol *s = (Dsymbol *)members->data[i]; + if (offset != buf->offset) + { buf->writestring(",\n"); + offset = buf->offset; + } + s->toJsonBuffer(buf); } - s->toJsonBuffer(buf); + JsonRemoveComma(buf); + buf->writestring("]\n"); } JsonRemoveComma(buf); - buf->writestring("]\n"); buf->writestring("}\n"); }
An almost identical patch is also needed for incomplete EnumDeclarations: Index: json.c =================================================================== --- json.c (revision 433) +++ json.c (working copy) @@ -386,19 +386,23 @@ if (memtype) JsonProperty(buf, "base", memtype->toChars()); - JsonString(buf, Pmembers); - buf->writestring(" : [\n"); - size_t offset = buf->offset; - for (int i = 0; i < members->dim; i++) - { Dsymbol *s = (Dsymbol *)members->data[i]; - if (offset != buf->offset) - { buf->writestring(",\n"); - offset = buf->offset; + if(members) + { + JsonString(buf, Pmembers); + buf->writestring(" : [\n"); + size_t offset = buf->offset; + for (int i = 0; i < members->dim; i++) + { Dsymbol *s = (Dsymbol *)members->data[i]; + if (offset != buf->offset) + { buf->writestring(",\n"); + offset = buf->offset; + } + s->toJsonBuffer(buf); } - s->toJsonBuffer(buf); + JsonRemoveComma(buf); + buf->writestring("]\n"); } JsonRemoveComma(buf); - buf->writestring("]\n"); buf->writestring("}\n"); }
Fixed DMD2.044
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル