Skip to content

Instantly share code, notes, and snippets.

@alexeypa
Created July 28, 2016 14:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexeypa/578d7263145d46018db8e9a290b92499 to your computer and use it in GitHub Desktop.
Save alexeypa/578d7263145d46018db8e9a290b92499 to your computer and use it in GitHub Desktop.
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 <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
-#if !defined(__FreeBSD__) || (__FreeBSD_version >= 500000)
+
+#if defined(_MSC_VER)
+
+#include <io.h>
+
+#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 <inttypes.h>
#endif
+
#include <limits.h>
#include <sys/types.h>
-#ifndef __MINGW32__
+#if !(defined(__MINGW32__) || defined(_MSC_VER))
#include <sys/mman.h>
#include <sys/uio.h>
#endif
+#if !defined(_MSC_VER)
#include <unistd.h>
+#endif
#include <fcntl.h>
#include <time.h>
+#if !defined(_MSC_VER)
#include <sys/time.h>
+#endif
#include <sys/stat.h>
+#if !defined(_MSC_VER)
#include <dirent.h>
+#endif
#include <ctype.h>
#include <string.h>
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 <alexeypa@gmail.com>
+#
+
+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
+ :
+ <link>static
+ <define>$(VERSION)
+ ;
+
+lib dparse
+ :
+ arg.c
+ parse.c
+ scan.c
+ symtab.c
+ util.c
+ read_binary.c
+ dparse_tree.c
+ :
+ <link>static
+ <define>$(VERSION)
+ ;
+
+exe make_dparser
+ :
+ make_dparser.c
+ version.c
+ mkdparse
+ dparse
+ :
+ <define>$(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 <alexeypa@gmail.com>
+#
+
+import os ;
+
+project win32.utf8
+ : requirements
+ <toolset>msvc:<define>_CRT_SECURE_NO_DEPRECATE=1
+ <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS=1
+ : build-dir bin
+ ;
+
+variant free : release : <debug-symbols>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<tables.n_strings; i++) {
intptr_t offset;
read_chk((void*)&offset, sizeof(intptr_t), 1, fp, &str);
- *(void**)(tables_buf+offset) += (intptr_t)strings_buf;
+ // *(void**)(tables_buf+offset) += (intptr_t)strings_buf;
+ *(void**)(tables_buf+offset) = (char*)(*(void**)(tables_buf+offset)) + (intptr_t)strings_buf;
}
if (fp)
fclose(fp);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment