diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-08-23 13:17:45 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-08-23 13:17:45 +0000 |
| commit | a20cd77d251192b8912587de17ebb87fa3cfb053 (patch) | |
| tree | 24cba6146320eeff2e0eda2ee731546c247c577b /src/runtime | |
| parent | 7c98267193726f4031c4551cf8a24c34c75fef94 (diff) | |
nonExist now does the expected thing
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/c/pgf/data.h | 5 | ||||
| -rw-r--r-- | src/runtime/c/pgf/linearizer.c | 4 | ||||
| -rw-r--r-- | src/runtime/c/pgf/parser.c | 7 | ||||
| -rw-r--r-- | src/runtime/c/pgf/printer.c | 4 | ||||
| -rw-r--r-- | src/runtime/c/pgf/reader.c | 7 | ||||
| -rw-r--r-- | src/runtime/haskell/PGF/Binary.hs | 2 | ||||
| -rw-r--r-- | src/runtime/haskell/PGF/Data.hs | 1 |
7 files changed, 29 insertions, 1 deletions
diff --git a/src/runtime/c/pgf/data.h b/src/runtime/c/pgf/data.h index b7a13d07d..5e32d8e5e 100644 --- a/src/runtime/c/pgf/data.h +++ b/src/runtime/c/pgf/data.h @@ -180,7 +180,8 @@ typedef enum { PGF_SYMBOL_LIT, PGF_SYMBOL_VAR, PGF_SYMBOL_KS, - PGF_SYMBOL_KP + PGF_SYMBOL_KP, + PGF_SYMBOL_NE } PgfSymbolTag; typedef struct { @@ -208,6 +209,8 @@ typedef struct PgfSymbolKP * symbol. */ } PgfSymbolKP; +typedef struct { +} PgfSymbolNE; typedef GuSeq PgfSequence; // -> PgfSymbol typedef GuList(PgfSequence) PgfSequences; diff --git a/src/runtime/c/pgf/linearizer.c b/src/runtime/c/pgf/linearizer.c index c5aac7f4f..b110f3a78 100644 --- a/src/runtime/c/pgf/linearizer.c +++ b/src/runtime/c/pgf/linearizer.c @@ -532,6 +532,10 @@ pgf_lzr_linearize(PgfConcr* concr, PgfCncTree ctree, size_t lin_idx, PgfLinFuncs } break; } + case PGF_SYMBOL_NE: { + // Nothing to be done here + break; + } default: gu_impossible(); } diff --git a/src/runtime/c/pgf/parser.c b/src/runtime/c/pgf/parser.c index ea68ba8ca..0cf588aa1 100644 --- a/src/runtime/c/pgf/parser.c +++ b/src/runtime/c/pgf/parser.c @@ -163,6 +163,8 @@ pgf_prev_extern_sym(PgfSymbol sym) return *((PgfSymbol*) (((PgfSymbolLit*) i.data)+1)); case PGF_SYMBOL_VAR: return *((PgfSymbol*) (((PgfSymbolVar*) i.data)+1)); + case PGF_SYMBOL_NE: + return *((PgfSymbol*) (((PgfSymbolNE*) i.data)+1)); default: gu_impossible(); return gu_null_variant; @@ -1410,6 +1412,10 @@ pgf_parsing_symbol(PgfParseState* before, PgfParseState* after, case PGF_SYMBOL_VAR: // XXX TODO proper support break; + case PGF_SYMBOL_NE: { + // Nothing to be done here + break; + } default: gu_impossible(); } @@ -2743,6 +2749,7 @@ pgf_parser_leftcorner_item(PgfLeftcornerFn* clo, PgfItem* item) break; } case PGF_SYMBOL_LIT: + case PGF_SYMBOL_NE: // Nothing to be done here break; case PGF_SYMBOL_VAR: diff --git a/src/runtime/c/pgf/printer.c b/src/runtime/c/pgf/printer.c index 71ccda1f4..b0822e577 100644 --- a/src/runtime/c/pgf/printer.c +++ b/src/runtime/c/pgf/printer.c @@ -258,6 +258,10 @@ pgf_print_symbol(PgfSymbol sym, GuWriter *wtr, GuExn *err) gu_printf(wtr, err, "<%d,$%d>", svar->d, svar->r); break; } + case PGF_SYMBOL_NE: { + gu_puts("nonExist", wtr, err); + break; + } default: gu_impossible(); } diff --git a/src/runtime/c/pgf/reader.c b/src/runtime/c/pgf/reader.c index a43ebdba0..f58809ef5 100644 --- a/src/runtime/c/pgf/reader.c +++ b/src/runtime/c/pgf/reader.c @@ -717,6 +717,13 @@ pgf_read_symbol(PgfReader* rdr) } break; } + case PGF_SYMBOL_NE: { + gu_new_variant(PGF_SYMBOL_NE, + PgfSymbolNE, + &sym, rdr->opool); + gu_return_on_exn(rdr->err, gu_null_variant); + break; + } default: pgf_read_tag_error(rdr); } diff --git a/src/runtime/haskell/PGF/Binary.hs b/src/runtime/haskell/PGF/Binary.hs index 0d743c1f4..865f98417 100644 --- a/src/runtime/haskell/PGF/Binary.hs +++ b/src/runtime/haskell/PGF/Binary.hs @@ -152,6 +152,7 @@ instance Binary Symbol where put (SymVar n l) = putWord8 2 >> put (n,l)
put (SymKS ts) = putWord8 3 >> put ts
put (SymKP d vs) = putWord8 4 >> put (d,vs)
+ put SymNE = putWord8 5
get = do tag <- getWord8
case tag of
0 -> liftM2 SymCat get get
@@ -159,6 +160,7 @@ instance Binary Symbol where 2 -> liftM2 SymVar get get
3 -> liftM SymKS get
4 -> liftM2 (\d vs -> SymKP d vs) get get
+ 5 -> return SymNE
_ -> decodingError
instance Binary PArg where
diff --git a/src/runtime/haskell/PGF/Data.hs b/src/runtime/haskell/PGF/Data.hs index 357dcc92e..58ced6a1e 100644 --- a/src/runtime/haskell/PGF/Data.hs +++ b/src/runtime/haskell/PGF/Data.hs @@ -60,6 +60,7 @@ data Symbol | SymVar {-# UNPACK #-} !Int {-# UNPACK #-} !Int | SymKS [Token] | SymKP [Token] [Alternative] + | SymNE -- non exist deriving (Eq,Ord,Show) data Production = PApply {-# UNPACK #-} !FunId [PArg] |
