diff options
| author | krasimir <krasimir@chalmers.se> | 2017-04-12 10:24:56 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2017-04-12 10:24:56 +0000 |
| commit | a8eaa2f2e560547e63c7976960435e1ae23a22b1 (patch) | |
| tree | 06ce5fd0bc77a16113b5a53118843216fd3c1aea /src/runtime/c/pgf | |
| parent | 915747efa793e53a7b7e9cfd861b4b4a46ace4a4 (diff) | |
a patch from Bjørnar Luteberget for compatibility with MSVC
Diffstat (limited to 'src/runtime/c/pgf')
| -rw-r--r-- | src/runtime/c/pgf/data.h | 5 | ||||
| -rw-r--r-- | src/runtime/c/pgf/evaluator.c | 2 | ||||
| -rw-r--r-- | src/runtime/c/pgf/jit.c | 6 | ||||
| -rw-r--r-- | src/runtime/c/pgf/linearizer.h | 1 | ||||
| -rw-r--r-- | src/runtime/c/pgf/literals.c | 4 | ||||
| -rw-r--r-- | src/runtime/c/pgf/literals.h | 24 | ||||
| -rw-r--r-- | src/runtime/c/pgf/reader.c | 2 |
7 files changed, 34 insertions, 10 deletions
diff --git a/src/runtime/c/pgf/data.h b/src/runtime/c/pgf/data.h index 5b1842d74..3941580cb 100644 --- a/src/runtime/c/pgf/data.h +++ b/src/runtime/c/pgf/data.h @@ -56,7 +56,7 @@ typedef struct { PgfPatt patt; } PgfPattAs; -typedef void PgfPattWild; +typedef char PgfPattWild; typedef struct { PgfPatt patt; @@ -241,12 +241,15 @@ typedef struct PgfSymbolKP } PgfSymbolKP; typedef struct { + char nothing[0]; // Empty struct } PgfSymbolNE; typedef struct { + char nothing[0]; // Empty struct } PgfSymbolBIND; typedef struct { + char nothing[0]; // Empty struct } PgfSymbolCAPIT; typedef GuBuf PgfProductionIdx; diff --git a/src/runtime/c/pgf/evaluator.c b/src/runtime/c/pgf/evaluator.c index 457f60896..698601820 100644 --- a/src/runtime/c/pgf/evaluator.c +++ b/src/runtime/c/pgf/evaluator.c @@ -437,7 +437,7 @@ pgf_evaluate_accum_init_flt(PgfReasoner* rs, rs->pool); lit_flt->val = val; accum->enter_stack_ptr = rs->enter_stack_ptr; - rs->enter_stack_ptr = ((void*)accum)-sizeof(void*)*2; + rs->enter_stack_ptr = ((char*)accum)-sizeof(char*)*2; accum->consts = NULL; } diff --git a/src/runtime/c/pgf/jit.c b/src/runtime/c/pgf/jit.c index 4fe18d181..003fa2630 100644 --- a/src/runtime/c/pgf/jit.c +++ b/src/runtime/c/pgf/jit.c @@ -5,7 +5,7 @@ #include <pgf/reasoner.h> #include <pgf/reader.h> #include "lightning.h" -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) #include <malloc.h> #endif @@ -43,7 +43,7 @@ typedef struct { #define JIT_VSTATE JIT_V1 #define JIT_VCLOS JIT_V2 -#if defined(__MINGW32__) +#if defined(__MINGW32__) || defined(_MSC_VER) #include <windows.h> static int @@ -71,7 +71,7 @@ pgf_jit_alloc_page(PgfReader* rdr) #if defined(ANDROID) if ((page = memalign(page_size, page_size)) == NULL) { -#elif defined(__MINGW32__) +#elif defined(__MINGW32__) || defined(_MSC_VER) if ((page = malloc(page_size)) == NULL) { #else if (posix_memalign(&page, page_size, page_size) != 0) { diff --git a/src/runtime/c/pgf/linearizer.h b/src/runtime/c/pgf/linearizer.h index 8178facdb..08ebfd159 100644 --- a/src/runtime/c/pgf/linearizer.h +++ b/src/runtime/c/pgf/linearizer.h @@ -29,6 +29,7 @@ PgfCncTreeEnum* pgf_lzr_concretize(PgfConcr* concr, PgfExpr expr, GuExn* err, GuPool* pool); typedef struct { + char nothing[0]; // Empty struct } PgfLinNonExist; PgfCncTree diff --git a/src/runtime/c/pgf/literals.c b/src/runtime/c/pgf/literals.c index ac57b150f..b5332b1ec 100644 --- a/src/runtime/c/pgf/literals.c +++ b/src/runtime/c/pgf/literals.c @@ -334,7 +334,7 @@ pgf_match_name_lit(PgfLiteralCallback* self, PgfConcr* concr, return ep; } -PgfLiteralCallback pgf_nerc_literal_callback = +PGF_API_DATA PgfLiteralCallback pgf_nerc_literal_callback = { pgf_match_name_lit, pgf_predict_empty } ; static void @@ -419,7 +419,7 @@ pgf_match_unknown_lit(PgfLiteralCallback* self, PgfConcr* concr, return ep; } -PgfLiteralCallback pgf_unknown_literal_callback = +PGF_API_DATA PgfLiteralCallback pgf_unknown_literal_callback = { pgf_match_unknown_lit, pgf_predict_empty } ; PgfCallbacksMap* diff --git a/src/runtime/c/pgf/literals.h b/src/runtime/c/pgf/literals.h index 7de17b121..624d82f9f 100644 --- a/src/runtime/c/pgf/literals.h +++ b/src/runtime/c/pgf/literals.h @@ -1,13 +1,33 @@ #ifndef PGF_LITERALS_H_ #define PGF_LITERALS_H_ +// MSVC requires explicit export/import of +// symbols in DLLs. CMake takes care of this +// for functions, but not for data/variables. +#if defined(_MSC_VER) +#if defined(COMPILING_PGF) +#define PGF_API_DATA_DECL __declspec(dllexport) +#define PGF_API_DATA __declspec(dllexport) +#else +#define PGF_API_DATA_DECL __declspec(dllimport) +#define PGF_API_DATA ERROR_NOT_COMPILING_LIBPGF +#endif + +#else + +#define PGF_API_DATA_DECL extern +#define PGF_API_DATA +#endif +// end MSVC workaround + + #include <pgf/data.h> // literal for named entities recognition -extern PgfLiteralCallback pgf_nerc_literal_callback; +PGF_API_DATA_DECL PgfLiteralCallback pgf_nerc_literal_callback; // literal for finding unknown words -extern PgfLiteralCallback pgf_unknown_literal_callback; +PGF_API_DATA_DECL PgfLiteralCallback pgf_unknown_literal_callback; PgfCCat* pgf_literal_cat(PgfConcr* concr, PgfLiteral lit); diff --git a/src/runtime/c/pgf/reader.c b/src/runtime/c/pgf/reader.c index cb690a353..5d509220a 100644 --- a/src/runtime/c/pgf/reader.c +++ b/src/runtime/c/pgf/reader.c @@ -14,7 +14,7 @@ #include <math.h> #include <stdio.h> #include <stdlib.h> -#ifdef __MINGW32__ +#if defined(__MINGW32__) || defined(_MSC_VER) #include <malloc.h> #endif |
