diff -Naur d/d.h new/d.h --- d/d.h 2004-09-30 08:03:36.000000000 -0700 +++ new/d.h 2007-08-27 22:07:15.093750000 -0700 @@ -13,21 +13,44 @@ #include #include #include -#if !defined(__FreeBSD__) || (__FreeBSD_version >= 500000) + +#if defined(_MSC_VER) + +#include + +#pragma warning(disable: 4018) + +typedef unsigned int uint; + +#define strncasecmp(l, r, n) _strnicmp(l, r, n) +#define snprintf _snprintf +#define strtoll(str, endptr, base) _strtoi64(str, endptr, base) +#define open(filename, flag) _open(filename, flag) +#define read(fd, buffer, count) _read(fd, buffer, count) +#define close(fd) _close(fd) + +#elif !defined(__FreeBSD__) || (__FreeBSD_version >= 500000) #include #endif + #include #include -#ifndef __MINGW32__ +#if !(defined(__MINGW32__) || defined(_MSC_VER)) #include #include #endif +#if !defined(_MSC_VER) #include +#endif #include #include +#if !defined(_MSC_VER) #include +#endif #include +#if !defined(_MSC_VER) #include +#endif #include #include diff -Naur d/Jamfile.v2 new/Jamfile.v2 --- d/Jamfile.v2 1969-12-31 16:00:00.000000000 -0800 +++ new/Jamfile.v2 2007-08-27 22:12:45.328125000 -0700 @@ -0,0 +1,51 @@ +# +# Copyright (c) 2007 Alexey Pakhunov +# + +MAJOR_VERSION = 1 ; +MINOR_VERSION = 15 ; +BUILD_VERSION = 1 ; +VERSION = + D_MAJOR_VERSION=$(MAJOR_VERSION) + D_MINOR_VERSION=$(MINOR_VERSION) + D_BUILD_VERSION=$(BUILD_VERSION) + ; + +lib mkdparse + : + mkdparse.c + write_tables.c + grammar.g.c + gram.c + lex.c + lr.c + : + static + $(VERSION) + ; + +lib dparse + : + arg.c + parse.c + scan.c + symtab.c + util.c + read_binary.c + dparse_tree.c + : + static + $(VERSION) + ; + +exe make_dparser + : + make_dparser.c + version.c + mkdparse + dparse + : + $(VERSION) + ; + +install dist : mkdparse dparse make_dparser ; diff -Naur d/Jamroot new/Jamroot --- d/Jamroot 1969-12-31 16:00:00.000000000 -0800 +++ new/Jamroot 2007-08-28 22:44:56.640625000 -0700 @@ -0,0 +1,14 @@ +# +# Copyright (c) 2007 Alexey Pakhunov +# + +import os ; + +project win32.utf8 + : requirements + msvc:_CRT_SECURE_NO_DEPRECATE=1 + msvc:_SCL_SECURE_NO_WARNINGS=1 + : build-dir bin + ; + +variant free : release : on ; diff -Naur d/parse.c new/parse.c --- d/parse.c 2006-02-23 12:25:00.000000000 -0800 +++ new/parse.c 2007-08-27 22:07:15.015625000 -0700 @@ -834,6 +834,7 @@ cmp_priorities(PNode *x, PNode *y) { StackPNode psx, psy; StackInt isx, isy; + int r; stack_clear(&psx); stack_clear(&psy); stack_clear(&isx); stack_clear(&isy); get_exp_one(x, &psx, &isx); @@ -841,7 +842,7 @@ get_unshared_priorities(&psx, &psy, &isx, &isy); intsort(isx.start, stack_depth(&isx)); intsort(isy.start, stack_depth(&isy)); - int r = compare_priorities(isx.start, stack_depth(&isx), + r = compare_priorities(isx.start, stack_depth(&isx), isy.start, stack_depth(&isy)); stack_free(&psx); stack_free(&psy); stack_free(&isx); stack_free(&isy); return r; @@ -949,12 +950,12 @@ static int cmp_greedyness(PNode *x, PNode *y) { VecPNode pvx, pvy; + int ix = 0, iy = 0; vec_clear(&pvx); vec_clear(&pvy); get_unshared_pnodes(x, y, &pvx, &pvy); set_to_vec(&pvx); set_to_vec(&pvy); qsort(pvx.v, pvx.n, sizeof(PNode *), greedycmp); qsort(pvy.v, pvy.n, sizeof(PNode *), greedycmp); - int ix = 0, iy = 0; while (1) { if (pvx.n <= ix || pvy.n <= iy) return 0; @@ -1202,8 +1203,9 @@ static void set_add_znode_hash(VecZNode *v, ZNode *z) { VecZNode vv; + int i, j, n; vec_clear(&vv); - int i, j, n = v->n; + n = v->n; if (n) { uint h = ((uintptr_t)z->pn) % n; for (i = h, j = 0; @@ -1237,8 +1239,9 @@ static void set_add_znode(VecZNode *v, ZNode *z) { VecZNode vv; + int i, n; vec_clear(&vv); - int i, n = v->n; + n = v->n; if (n < INTEGRAL_VEC_SIZE) { vec_add(v, z); return; diff -Naur d/python/dparser.py new/python/dparser.py --- d/python/dparser.py 2006-10-18 07:44:00.000000000 -0700 +++ new/python/dparser.py 2007-08-27 22:12:44.015625000 -0700 @@ -117,12 +117,14 @@ class D_ParseNode(D_ParseNodePtr): def __del__(self): - if dparser_swigc: + if dparser_swigc and not self.deleted: dparser_swigc.remove_parse_tree_viewer(self.d_parser) + self.deleted = True def __init__(self, this, d_parser, buf): self.this = this self.d_parser = d_parser self.buf = buf + self.deleted = False dparser_swigc.add_parse_tree_viewer(self.d_parser) class Reject: pass diff -Naur d/python/setup_win32.cmd new/python/setup_win32.cmd --- d/python/setup_win32.cmd 1969-12-31 16:00:00.000000000 -0800 +++ new/python/setup_win32.cmd 2007-08-27 22:12:43.171875000 -0700 @@ -0,0 +1,7 @@ +set MSSdk=1 +set DISTUTILS_USE_SDK=1 + +rmdir /S /Q build +python setup_win32.py build +mt -manifest build\lib.win32-2.5\dparser_swigc.pyd.manifest -outputresource:build\lib.win32-2.5\dparser_swigc.pyd;2 +python setup_win32.py install diff -Naur d/python/setup_win32.py new/python/setup_win32.py --- d/python/setup_win32.py 1969-12-31 16:00:00.000000000 -0800 +++ new/python/setup_win32.py 2007-08-27 22:12:44.812500000 -0700 @@ -0,0 +1,30 @@ +from distutils.core import setup, Extension +from distutils.command.install_data import install_data +import os, sys + +#Pete Shinner's distutils data file fix... from distutils-sig +#data installer with improved intelligence over distutils +#data files are copied into the project directory instead +#of willy-nilly +class smart_install_data(install_data): + def run(self): + #need to change self.install_dir to the library dir + install_cmd = self.get_finalized_command('install') + self.install_dir = getattr(install_cmd, 'install_lib') + return install_data.run(self) + +module_swigc = Extension('dparser_swigc', + sources = ['dparser_wrap.c', 'pydparser.c', 'make_tables.c'], + define_macros = [('SWIG_GLOBAL', None)], + libraries = ['libmkdparse', 'libdparse'], + library_dirs = ['../dist'], + extra_compile_args = ['/Zi', '/D_CRT_SECURE_NO_WARNINGS=1'], + extra_link_args = ['/DEBUG'],) + +setup(name="dparser", + cmdclass = {"install_data": smart_install_data}, + version = "1.9", + description = 'DParser for Python', + py_modules = ["dparser"], + ext_modules = [module_swigc], +) diff -Naur d/read_binary.c new/read_binary.c --- d/read_binary.c 2006-02-22 20:16:27.000000000 -0800 +++ new/read_binary.c 2007-08-27 22:07:15.046875000 -0700 @@ -40,13 +40,15 @@ } else if (*intptr == -3) { *ptr = (void*)final_code; } else { - *ptr += (intptr_t)tables_buf; + // *ptr += (intptr_t)tables_buf; + *ptr = (char*)(*ptr) + (intptr_t)tables_buf; } } for (i=0; i