From e453e4a8b38f9b47e9f2eb4963cad758b371f35e Mon Sep 17 00:00:00 2001 From: Daniel Murphy Date: Sun, 16 Aug 2015 16:47:01 +1000 Subject: [PATCH] Generate D version of impcnvtab from impcnvgen --- src/impcnvgen.c | 179 ++++++++++++++++++++++++++++++++------------- src/magicport.json | 16 +--- src/posix.mak | 10 +-- src/win32.mak | 12 +-- 4 files changed, 141 insertions(+), 76 deletions(-) diff --git a/src/impcnvgen.c b/src/impcnvgen.c index c48e6d1ca842..2444207583f7 100644 --- a/src/impcnvgen.c +++ b/src/impcnvgen.c @@ -447,75 +447,154 @@ int main() init(); - FILE *fp = fopen("impcnvtab.c","wb"); + { + FILE *fp = fopen("impcnvtab.c","wb"); - fprintf(fp,"// This file is generated by impcnvgen.c\n"); - fprintf(fp,"#include \"mtype.h\"\n"); + fprintf(fp,"// This file is generated by impcnvgen.c\n"); + fprintf(fp,"#include \"mtype.h\"\n"); - fprintf(fp,"unsigned char impcnvResult[TMAX][TMAX] =\n{\n"); - for (i = 0; i < TMAX; i++) - { - if (i) - fprintf(fp, ","); - fprintf(fp, "{"); - for (j = 0; j < TMAX; j++) + fprintf(fp,"unsigned char impcnvResult[TMAX][TMAX] =\n{\n"); + for (i = 0; i < TMAX; i++) { - if (j) + if (i) fprintf(fp, ","); - fprintf(fp, "%d",impcnvResultTab[i][j]); + fprintf(fp, "{"); + for (j = 0; j < TMAX; j++) + { + if (j) + fprintf(fp, ","); + fprintf(fp, "%d",impcnvResultTab[i][j]); + } + fprintf(fp, "}\n"); } - fprintf(fp, "}\n"); - } - fprintf(fp,"};\n"); + fprintf(fp,"};\n"); - fprintf(fp,"unsigned char impcnvType1[TMAX][TMAX] =\n{\n"); - for (i = 0; i < TMAX; i++) - { - if (i) - fprintf(fp, ","); - fprintf(fp, "{"); - for (j = 0; j < TMAX; j++) + fprintf(fp,"unsigned char impcnvType1[TMAX][TMAX] =\n{\n"); + for (i = 0; i < TMAX; i++) + { + if (i) + fprintf(fp, ","); + fprintf(fp, "{"); + for (j = 0; j < TMAX; j++) + { + if (j) + fprintf(fp, ","); + fprintf(fp, "%d",impcnvType1Tab[i][j]); + } + fprintf(fp, "}\n"); + } + fprintf(fp,"};\n"); + + fprintf(fp,"unsigned char impcnvType2[TMAX][TMAX] =\n{\n"); + for (i = 0; i < TMAX; i++) { - if (j) + if (i) fprintf(fp, ","); - fprintf(fp, "%d",impcnvType1Tab[i][j]); + fprintf(fp, "{"); + for (j = 0; j < TMAX; j++) + { + if (j) + fprintf(fp, ","); + fprintf(fp, "%d",impcnvType2Tab[i][j]); + } + fprintf(fp, "}\n"); } - fprintf(fp, "}\n"); - } - fprintf(fp,"};\n"); + fprintf(fp,"};\n"); - fprintf(fp,"unsigned char impcnvType2[TMAX][TMAX] =\n{\n"); - for (i = 0; i < TMAX; i++) - { - if (i) - fprintf(fp, ","); - fprintf(fp, "{"); - for (j = 0; j < TMAX; j++) + fprintf(fp,"unsigned char impcnvWarn[TMAX][TMAX] =\n{\n"); + for (i = 0; i < TMAX; i++) { - if (j) + if (i) fprintf(fp, ","); - fprintf(fp, "%d",impcnvType2Tab[i][j]); + fprintf(fp, "{"); + for (j = 0; j < TMAX; j++) + { + if (j) + fprintf(fp, ","); + fprintf(fp, "%d",impcnvWarnTab[i][j]); + } + fprintf(fp, "}\n"); } - fprintf(fp, "}\n"); + fprintf(fp,"};\n"); + + fclose(fp); } - fprintf(fp,"};\n"); - fprintf(fp,"unsigned char impcnvWarn[TMAX][TMAX] =\n{\n"); - for (i = 0; i < TMAX; i++) { - if (i) - fprintf(fp, ","); - fprintf(fp, "{"); - for (j = 0; j < TMAX; j++) + FILE *fp = fopen("impcnvtab.d", "wb"); + + fprintf(fp, "// This file is generated by impcnvgen.c\n"); + fprintf(fp, "module ddmd.impcnvtab;\n"); + fprintf(fp, "\n"); + fprintf(fp, "import ddmd.mtype;\n"); + fprintf(fp, "\n"); + + fprintf(fp, "extern (C++) __gshared ubyte[TMAX][TMAX] impcnvResult =\n[\n"); + for (i = 0; i < TMAX; i++) { - if (j) - fprintf(fp, ","); - fprintf(fp, "%d",impcnvWarnTab[i][j]); + if (i) + fprintf(fp, ",\n"); + fprintf(fp, " ["); + for (j = 0; j < TMAX; j++) + { + if (j) + fprintf(fp, ","); + fprintf(fp, "%d", impcnvResultTab[i][j]); + } + fprintf(fp, "]"); + } + fprintf(fp, "\n];\n"); + + fprintf(fp, "extern (C++) __gshared ubyte[TMAX][TMAX] impcnvType1 =\n[\n"); + for (i = 0; i < TMAX; i++) + { + if (i) + fprintf(fp, ",\n"); + fprintf(fp, " ["); + for (j = 0; j < TMAX; j++) + { + if (j) + fprintf(fp, ","); + fprintf(fp, "%d", impcnvType1Tab[i][j]); + } + fprintf(fp, "]"); + } + fprintf(fp, "\n];\n"); + + fprintf(fp, "extern (C++) __gshared ubyte[TMAX][TMAX] impcnvType2 =\n[\n"); + for (i = 0; i < TMAX; i++) + { + if (i) + fprintf(fp, ",\n"); + fprintf(fp, " ["); + for (j = 0; j < TMAX; j++) + { + if (j) + fprintf(fp, ","); + fprintf(fp, "%d",impcnvType2Tab[i][j]); + } + fprintf(fp, "]"); } - fprintf(fp, "}\n"); + fprintf(fp,"\n];\n"); + + fprintf(fp,"extern (C++) __gshared ubyte[TMAX][TMAX] impcnvWarn =\n[\n"); + for (i = 0; i < TMAX; i++) + { + if (i) + fprintf(fp, ",\n"); + fprintf(fp, " ["); + for (j = 0; j < TMAX; j++) + { + if (j) + fprintf(fp, ","); + fprintf(fp, "%d", impcnvWarnTab[i][j]); + } + fprintf(fp, "]"); + } + fprintf(fp, "\n];\n"); + + fclose(fp); } - fprintf(fp,"};\n"); - fclose(fp); return EXIT_SUCCESS; } diff --git a/src/magicport.json b/src/magicport.json index 16a0d0d1e6b1..2e2b19e440ea 100644 --- a/src/magicport.json +++ b/src/magicport.json @@ -16,7 +16,7 @@ "arrayop.c", "aliasthis.h", "aliasthis.c", "json.h", "json.c", "unittests.c", "imphint.c", "argtypes.c", "apply.c", "sapply.c", "sideeffect.c", "ctfe.h", "canthrow.c", "target.c", "target.h", - "impcnvtab.c", "visitor.h", "lib.h", "nogc.c", "nspace.h", "nspace.c", + "visitor.h", "lib.h", "nogc.c", "nspace.h", "nspace.c", "errors.c", "errors.h", "tokens.c", "tokens.h", "globals.c", "globals.h", @@ -3246,20 +3246,6 @@ [ "function response_expand" ] - }, - { - "module" : "impcnvtab", - "package" : "", - "imports" : [ - "mtype" - ], - "members" : - [ - "variable impcnvResult", - "variable impcnvType1", - "variable impcnvType2", - "variable impcnvWarn" - ] } ], "basicTypes" : diff --git a/src/posix.mak b/src/posix.mak index 9e7eddd4e751..ff7f28e85092 100644 --- a/src/posix.mak +++ b/src/posix.mak @@ -345,7 +345,7 @@ endif clean: rm -f $(DMD_OBJS) $(ROOT_OBJS) $(GLUE_OBJS) $(BACK_OBJS) dmd optab.o id.o impcnvgen idgen id.c id.h \ - impcnvtab.c optabgen debtab.c optab.c cdxxx.c elxxx.c fltables.c \ + impcnvtab.d id.d impcnvtab.c optabgen debtab.c optab.c cdxxx.c elxxx.c fltables.c \ tytab.c verstr.h core \ *.cov *.deps *.gcda *.gcno *.a \ $(GENSRC) $(MAGICPORT) @@ -398,7 +398,7 @@ idgen: idgen.d $(HOST_DC) ######### impcnvgen generates some source -impcnvtab_output = impcnvtab.c +impcnvtab_output = impcnvtab.c impcnvtab.d $(impcnvtab_output) : impcnvgen impcnvgen : mtype.h impcnvgen.c @@ -619,7 +619,7 @@ GENSRC=access.d aggregate.d aliasthis.d apply.d \ target.d dtemplate.d traits.d dunittest.d \ utf.d dversion.d visitor.d lib.d \ nogc.d nspace.d errors.d tokens.d \ - globals.d escape.d impcnvtab.d \ + globals.d escape.d \ $(ROOT)/aav.d $(ROOT)/outbuffer.d $(ROOT)/stringtable.d \ $(ROOT)/file.d $(ROOT)/filename.d $(ROOT)/speller.d \ $(ROOT)/man.d $(ROOT)/response.d @@ -629,7 +629,7 @@ MANUALSRC= \ entity.d backend.d \ $(ROOT)/array.d $(ROOT)/longdouble.d \ $(ROOT)/rootobject.d $(ROOT)/port.d \ - $(ROOT)/rmem.d id.d + $(ROOT)/rmem.d id.d impcnvtab.d ifeq ($(D_OBJC),1) GENSRC += objc.d @@ -637,7 +637,7 @@ else MANUALSRC += objc.di objc_stubs.d endif -mars.d : $(SRC) $(ROOT_SRC) magicport.json $(MAGICPORT) id.c impcnvtab.c +mars.d : $(SRC) $(ROOT_SRC) magicport.json $(MAGICPORT) $(MAGICPORT) . . DSRC= $(GENSRC) $(MANUALSRC) diff --git a/src/win32.mak b/src/win32.mak index e60b29d90985..014e645264f5 100644 --- a/src/win32.mak +++ b/src/win32.mak @@ -344,7 +344,7 @@ GENSRC=access.d aggregate.d aliasthis.d apply.d \ target.d dtemplate.d traits.d dunittest.d \ utf.d dversion.d visitor.d lib.d \ nogc.d nspace.d errors.d tokens.d \ - globals.d escape.d impcnvtab.d \ + globals.d escape.d \ $(ROOT)\aav.d $(ROOT)\outbuffer.d $(ROOT)\stringtable.d \ $(ROOT)\file.d $(ROOT)\filename.d $(ROOT)\speller.d \ $(ROOT)\man.d $(ROOT)\response.d @@ -354,9 +354,9 @@ MANUALSRC= \ entity.d backend.d objc.di objc_stubs.d \ $(ROOT)\array.d $(ROOT)\longdouble.d \ $(ROOT)\rootobject.d $(ROOT)\port.d \ - $(ROOT)\rmem.d id.d + $(ROOT)\rmem.d id.d impcnvtab.d -$(GENSRC) : $(SRCS) $(ROOTSRC) magicport.json $(MAGICPORT) id.c impcnvtab.c +$(GENSRC) : $(SRCS) $(ROOTSRC) magicport.json $(MAGICPORT) $(MAGICPORT) . . DSRC= $(GENSRC) $(MANUALSRC) @@ -370,8 +370,8 @@ clean: $(DEL) *.obj *.lib *.map $(DEL) msgs.h msgs.c $(DEL) elxxx.c cdxxx.c optab.c debtab.c fltables.c tytab.c - $(DEL) impcnvtab.c impcnvgen.exe optabgen.exe - $(DEL) id.h id.c + $(DEL) impcnvtab.d impcnvtab.c impcnvgen.exe optabgen.exe + $(DEL) id.h id.c id.d $(DEL) verstr.h $(DEL) $(GENSRC) $(DEL) $(MAGICPORT) $(MAGICPORTDIR)\*.obj @@ -447,7 +447,7 @@ elxxx.c cdxxx.c optab.c debtab.c fltables.c tytab.c : \ $(CC) -cpp -ooptabgen.exe $C\optabgen -DMARS -DDM_TARGET_CPU_X86=1 -I$(TK) .\optabgen.exe -impcnvtab.c : impcnvgen.c +impcnvtab.c impcnvtab.d : impcnvgen.c $(CC) -I$(ROOT) -cpp -DDM_TARGET_CPU_X86=1 impcnvgen .\impcnvgen.exe