Prelude.CAPIT is now a built-in primitive. It still generates &| in the Haskell runtime but will be intepreted in the C runtime

This commit is contained in:
kr.angelov
2014-10-09 19:34:12 +00:00
parent 57f7b61c6b
commit 4efb2d5a22
19 changed files with 48 additions and 4 deletions

View File

@@ -204,6 +204,7 @@ typedef enum {
PGF_SYMBOL_KP,
PGF_SYMBOL_BIND,
PGF_SYMBOL_SOFT_BIND,
PGF_SYMBOL_CAPIT,
PGF_SYMBOL_NE
} PgfSymbolTag;
@@ -238,6 +239,9 @@ typedef struct {
typedef struct {
} PgfSymbolBIND;
typedef struct {
} PgfSymbolCAPIT;
typedef GuBuf PgfProductionIdx;
typedef struct {

View File

@@ -904,6 +904,8 @@ pgf_lzr_linearize_symbols(PgfLzr* lzr, PgfCncTreeApp* fapp,
}
break;
}
case PGF_SYMBOL_CAPIT:
break;
default:
gu_impossible();
}

View File

@@ -137,6 +137,8 @@ pgf_prev_extern_sym(PgfSymbol sym)
case PGF_SYMBOL_BIND:
case PGF_SYMBOL_SOFT_BIND:
return *((PgfSymbol*) (((PgfSymbolBIND*) i.data)+1));
case PGF_SYMBOL_CAPIT:
return *((PgfSymbol*) (((PgfSymbolCAPIT*) i.data)+1));
case PGF_SYMBOL_NE:
return *((PgfSymbol*) (((PgfSymbolNE*) i.data)+1));
default:
@@ -1147,6 +1149,9 @@ pgf_symbols_cmp(GuString* psent, size_t sent_len, BIND_TYPE* pbind, PgfSymbols*
*pbind = BIND_SOFT;
break;
}
case PGF_SYMBOL_CAPIT: {
break;
}
case PGF_SYMBOL_NE: {
return -2;
}
@@ -1719,6 +1724,9 @@ pgf_parsing_symbol(PgfParsing* ps, PgfItem* item, PgfSymbol sym)
}
break;
}
case PGF_SYMBOL_CAPIT: {
break;
}
default:
gu_impossible();
}

View File

@@ -276,6 +276,10 @@ pgf_print_symbol(PgfSymbol sym, GuOut *out, GuExn *err)
gu_puts("SOFT_BIND", out, err);
break;
}
case PGF_SYMBOL_CAPIT: {
gu_puts("CAPIT", out, err);
break;
}
default:
gu_impossible();
}

View File

@@ -709,6 +709,13 @@ pgf_read_symbol(PgfReader* rdr)
gu_return_on_exn(rdr->err, gu_null_variant);
break;
}
case PGF_SYMBOL_CAPIT: {
gu_new_variant(PGF_SYMBOL_CAPIT,
PgfSymbolCAPIT,
&sym, rdr->opool);
gu_return_on_exn(rdr->err, gu_null_variant);
break;
}
default:
pgf_read_tag_error(rdr);
}