summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-08-23 13:17:45 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-08-23 13:17:45 +0000
commita20cd77d251192b8912587de17ebb87fa3cfb053 (patch)
tree24cba6146320eeff2e0eda2ee731546c247c577b /src/runtime/c/pgf
parent7c98267193726f4031c4551cf8a24c34c75fef94 (diff)
nonExist now does the expected thing
Diffstat (limited to 'src/runtime/c/pgf')
-rw-r--r--src/runtime/c/pgf/data.h5
-rw-r--r--src/runtime/c/pgf/linearizer.c4
-rw-r--r--src/runtime/c/pgf/parser.c7
-rw-r--r--src/runtime/c/pgf/printer.c4
-rw-r--r--src/runtime/c/pgf/reader.c7
5 files changed, 26 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);
}