#include "xsb_config.h"
#include "xsb_debug.h"
#include "debugs/debug_biassert.h"
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include "setjmp_xsb.h"
#include "auxlry.h"
#include "cell_xsb.h"
#include "psc_xsb.h"
#include "error_xsb.h"
#include "cinterf.h"
#include "memory_xsb.h"
#include "heap_xsb.h"
#include "register.h"
#include "flags_xsb.h"
#include "deref.h"
#include "inst_xsb.h"
#include "token_xsb.h"
#include "loader_xsb.h"
#include "trie_internals.h"
#include "choice.h"
#include "macro_xsb.h"
#include "tr_utils.h"
#include "trassert.h"
#include "context.h"
#include "thread_xsb.h"
#include "debug_xsb.h"
#include "biassert_defs.h"
Data Structures | |
struct | DispBlk_t |
struct | DispBlkHdr_t |
struct | flatten_elt |
struct | flatten_q |
struct | instruction |
struct | instruction_q |
struct | RegStat_t |
struct | ClRefHdrI |
Defines | |
#define | MARKED_FOR_DELETION 66 |
#define | write_word(Buff, Loc, w) |
#define | write_byte(Buff, Loc, w) { *(pb)((pb)Buff + *(Loc)) = (byte)(w); *(Loc) += 1; } |
#define | pad64bits(Loc) {} |
#define | dbgen_printinst3_macro(Opcode, Arg1, Arg2, Arg3) dbgen_printinst3(Opcode, Arg1, Arg2, Arg3) |
#define | dbgen_printinst_macro(Opcode, Arg1, Arg2) dbgen_printinst(Opcode, Arg1, Arg2) |
#define | dbgen_inst3_tv(Opcode, Arg1, Arg2, Arg3, Buff, Loc) |
#define | dbgen_inst3_sob(Opcode, Arg1, Arg2, Arg3, Buff, Loc) |
#define | dbgen_inst_pvv(Opcode, Arg1, Arg2, Buff, Loc) |
#define | dbgen_inst_ppv(Opcode, Arg1, Buff, Loc) |
#define | dbgen_inst_ppvw(Opcode, Arg1, Arg2, Buff, Loc) |
#define | dbgen_inst_ppvw_safe(Opcode, Arg1, Arg2, Buff, Loc) |
#define | dbgen_inst_ppvww(Opcode, Arg1, Arg2, Arg3, Buff, Loc) |
#define | dbgen_inst_pppw(Opcode, Arg1, Buff, Loc) |
#define | dbgen_inst_ppp(Opcode, Buff, Loc) |
#define | dbgen_instB3_tv(Opcode, Arg1, Arg2, Arg3) |
#define | dbgen_instB3_sob(Opcode, Arg1, Arg2, Arg3) |
#define | dbgen_instB_pvv(Opcode, Arg1, Arg2) |
#define | dbgen_instB_ppv(Opcode, Arg1) |
#define | dbgen_instB_ppvw(Opcode, Arg1, Arg2) |
#define | dbgen_instB_pppw(Opcode, Arg1) |
#define | dbgen_instB_ppp(Opcode) |
#define | FLATTEN_STACK_SIZE 512 |
#define | INST_QUEUE_SIZE 512 |
#define | ERR_FUNCTOR 1 |
#define | ERR_REGISTER 2 |
#define | RVAR -1 |
#define | TVAR -2 |
#define | HIGHBIT 0x80000000 |
#define | PredOpCode(P) (cell_opcode(&(P)->Instr)) |
#define | ClRefAddr(Cl) ((CPtr)((ClRef)(Cl)-1)) |
#define | ClRefSize(Cl) (((ClRef)(Cl))[-1].buflen & ~0x3 & ~HIGHBIT) |
#define | ClRefType(Cl) (((ClRef)(Cl))[-1].buflen & 0x3) |
#define | SetClRefSize(Cl, len) |
#define | SetClRefType(Cl, type) |
#define | ClRefPrev(Cl) (((ClRef)(Cl))[-1].prev) |
#define | ClRefWord(Cl, pos) (((CPtr)(Cl))[(pos)]) |
#define | SetClRefPrev(Cl, Prv) (((ClRef)(Cl))[-1].prev = (ClRef)(Prv)) |
#define | UNINDEXED_CL 0 |
#define | SOB_RECORD 1 |
#define | TRIE_CL 2 |
#define | INDEXED_CL 3 |
#define | MakeClRef(ptr, Type, NCells) |
#define | ClRefTryInstr(Cl) (ClRefWord((Cl),0)) |
#define | ClRefTryOpCode(Cl) (cell_opcode(&ClRefTryInstr(Cl))) |
#define | ClRefNext(Cl) ((ClRef)ClRefWord((Cl),1)) |
#define | SetClRefNext(Cl, Nxt) (ClRefWord((Cl),1)=(Cell)(Nxt)) |
#define | ClRefEntryPoint(Cl) (&ClRefWord((Cl),2)) |
#define | ClRefCompiledCode(Cl) (ClRefWord((Cl),3)) |
#define | ClRefSOBInstr(Cl) (ClRefWord((Cl),2)) |
#define | ClRefHashSize(Cl) (ClRefWord((Cl),4)) |
#define | ClRefJumpInstr(Cl) (ClRefWord((Cl),5)) |
#define | ClRefFirstIndex(Cl) (ClRefWord((Cl),6)) |
#define | ClRefLastIndex(Cl) (ClRefWord((Cl),7)) |
#define | ClRefNumNonemptyBuckets(Cl) (ClRefWord((Cl),8)) |
#define | ClRefHashTable(Cl) (&ClRefWord((Cl),9)) |
#define | ClRefHashBucket(Cl, b) ((CPtr)(ClRefHashTable(Cl)[(b)])) |
#define | ClRefSOBArg(Cl, n) (cell_operandn(&ClRefWord((Cl),2),(n))) |
#define | ClRefPrRef(Cl) ((PrRef)&ClRefWord((Cl),5)) |
#define | PrRefClRef(Pr) ((ClRef)((CPtr)(Pr)-5)) |
#define | ClRefUpSOB(Cl) (PrRefClRef(ClRefNext(Cl))) |
#define | ClRefNumInds(Cl) ( (cell_operand3(&ClRefWord((Cl),2))/(sizeof(Cell)/2) + 1)/4 ) |
#define | ClRefIndPtr(Cl, Ind) (&ClRefWord((Cl),(Ind)*4)) |
#define | IndPtrClRef(IP, Ind) ((ClRef)((CPtr)(IP)-(Ind)*4)) |
#define | IndRefNoop(IndPtr) ((IndPtr)[-2]) |
#define | IndRefPrev(IndPtr) (((CPtr *)(IndPtr))[-1]) |
#define | IndRefTryInstr(IndPtr) ((IndPtr)[0]) |
#define | IndRefNext(IndPtr) (((CPtr *)(IndPtr))[1]) |
#define | IC_CELLS(NI) (4*(NI)+2) |
#define | ClRefIEntryPoint(Cl, NI) (&ClRefWord((Cl),IC_CELLS(NI))) |
#define | ClRefEntryAny(Cl) |
#define | ClRefNotRetracted(Cl) |
#define | NUMHASHSIZES 16 |
#define | CheckSOBClause(H, Ind, sob, Level) |
#define | NextSOB(sob, curLevel, IndLevel, Ind, Head) |
#define | FirstClauseSOB(sob, curLevel, IndLevel, Head, Ind) |
#define | delete_from_chain(c, PC, Displ) |
#define | is_dynamic_clause_inst(inst) ((int) inst == dynretrymeelse || (int) inst == dyntrustmeelsefail) |
#define | mark_clref(pClRef) (ClRef_Buflen(pClRef -1) = ClRef_Buflen(pClRef - 1) | HIGHBIT) |
#define | unmark_clref(pClRef) (ClRef_Buflen(pClRef -1) = ClRef_Buflen(pClRef - 1 ) & (~HIGHBIT)) |
#define | clref_is_marked(pClRef) (ClRef_Buflen(pClRef -1 ) & HIGHBIT) |
#define | Free_DelCF(pDCF, pPRREF, chain_begin) |
#define | check_insert_private_delcf_pred(prref, psc) check_insert_global_delcf_pred(prref,psc) |
#define | check_insert_private_delcf_clause(prref, psc, clref) check_insert_global_delcf_clause(prref,psc,clref) |
#define | FIXED_BLOCK_SIZE_FOR_TABLED_PRED (8 * sizeof(Cell)) |
#define | clref_fld(x) ((CPtr) *(x +1)) |
#define | next_clref(x) ((CPtr) *(x +1)) |
#define | last_clref(PRREF) ((CPtr)((PrRef)(PRREF))->LastClRef) |
#define | try_type_instr_fld(x) (ClRefTryOpCode(x)) |
#define | code_to_run(x) (cell_opcode(ClRefEntryPoint(x))) |
#define | first_instr_to_run(x) (cell_opcode(ClRefWord(x,3))) |
#define | MAXDYNFREEBUFF 200 |
Typedefs | |
typedef RegStat_t * | RegStat |
typedef ClRefHdrI * | ClRefI |
typedef ClRef | SOBRef |
Functions | |
Cell | val_to_hash (Cell) |
void | add_prog_seg (Psc, byte *, long) |
void | remove_prog_seg (byte *) |
PrRef | clref_to_prref (ClRef clref) |
PrRef | dynpredep_to_prref (CTXTdeclc void *pred_ep) |
static void | dbgen_printinst3 (Opcode, Arg1, Arg2, Arg3) |
static void | dbgen_printinst (Opcode, Arg1, Arg2) |
static void | assertcmp_throw (CTXTdeclc int num) |
static int | arity (CTXTdeclc prolog_term T0) |
static void | assertcmp_printerror (CTXTdeclc int num) |
static Integer | p2c_float_as_int (prolog_term T0) |
static int | is_frozen_var (prolog_term T0) |
static void | flatten_stack_init (struct flatten_q *flatten_stackq) |
static int | flatten_stack_size (struct flatten_q *flatten_stackq) |
static void | flatten_stack_push (struct flatten_q *flatten_stackq, int argno, Cell term) |
static void | flatten_stack_pop (struct flatten_q *flatten_stackq, int *argnop, Cell *termp) |
static void | inst_queue_init (struct instruction_q *inst_queue) |
static int | inst_queue_empty (struct instruction_q *inst_queue) |
static void | inst_queue_push (struct instruction_q *inst_queue, Cell opcode, Cell arg1, Cell arg2) |
static void | inst_queue_pop (struct instruction_q *inst_queue, Cell *opcodep, Cell *arg1p, Cell *arg2p) |
static void | inst_queue_rem (struct instruction_q *inst_queue, Cell *opcodep, Cell *arg1p, Cell *arg2p) |
static void | inst_queue_add (struct instruction_q *inst_queue, Cell opcodep, Cell arg1p, Cell arg2p) |
static void | inst_queue_rotate (struct instruction_q *inst_queue) |
static void | reg_init (RegStat Reg, int Size) |
static int | reg_get (CTXTdeclc RegStat Reg, int Type) |
static void | reg_release (RegStat Reg, int R0) |
static char * | buff_realloc (CTXTdecl) |
static void | db_genmvs (CTXTdeclc struct instruction_q *, RegStat) |
static void | db_putterm (CTXTdeclc int, prolog_term, RegStat, struct flatten_q *) |
static void | db_gentopinst (CTXTdeclc prolog_term, int, RegStat) |
static void | db_genterms (CTXTdeclc struct instruction_q *, RegStat) |
static void | db_geninst (CTXTdeclc prolog_term, RegStat, struct instruction_q *) |
static void | db_bldsubs (CTXTdeclc prolog_term, RegStat, struct flatten_q *) |
static void | db_genaput (CTXTdeclc prolog_term, int, struct instruction_q *, RegStat) |
int | assert_code_to_buff_p (CTXTdeclc prolog_term) |
int | assert_code_to_buff (CTXTdecl) |
static xsbBool | target_is_not_source (struct instruction_q *inst_queue, int Reg) |
static xsbBool | source_is_not_target (struct instruction_q *inst_queue, int Reg) |
static void | db_addbuff (byte, ClRef, PrRef, int, int, int) |
static void | db_addbuff_i (byte, ClRef, PrRef, int, int *, int, prolog_term, int) |
static void | get_indexes (prolog_term prolog_ind, int *Index, int *NI) |
xsbBool | assert_buff_to_clref_p (CTXTdeclc prolog_term, byte, PrRef, int, prolog_term, int, ClRef *) |
xsbBool | assert_buff_to_clref (CTXTdecl) |
static void | prefix_to_chain (int ifSOB, byte Arity, ClRef FirstClause, ClRef NewClause) |
static void | append_to_chain (byte Arity, ClRef LastClause, ClRef NewClause) |
static int | hash_resize (PrRef Pred, SOBRef SOBrec, unsigned int OldTabSize) |
static int | hash_val (int Ind, prolog_term Head, int TabSize) |
static SOBRef | new_SOBblock (int ThisTabSize, int Ind, Psc psc) |
static void | addto_hashchain (int AZ, int Hashval, SOBRef SOBrec, CPtr NewInd, int Arity) |
static void | addto_allchain (int AZ, ClRef Clause, SOBRef SOBrec, byte Arity) |
static void | find_usable_index (prolog_term Head, ClRef *s, int *ILevel, int *Index) |
ClRef | first_clref (PrRef Pred, prolog_term Head, int *ILevel, int *Index) |
ClRef | next_clref (PrRef Pred, ClRef Clause, prolog_term Head, int *IndexLevel, int *Ind) |
static void | delete_from_hashchain (ClRef Clause, int Ind, int NI) |
static void | delete_from_allchain (ClRef Clause) |
static void | delete_from_sobchain (ClRef Clause) |
ClRef | clref_from_try_addr (ClRef code_addr) |
int | mark_cpstack_retract (CTXTdeclc ClRef clref) |
void | unmark_cpstack_retract (CTXTdecl) |
int | mark_cpstack_retractall (CTXTdecl) |
static int | dyntabled_incomplete (CTXTdeclc Psc psc) |
int | check_cpstack_retractall (CTXTdeclc PrRef prref) |
DelCFptr | new_DelCF_pred (CTXTdeclc PrRef pPrRef, Psc pPSC, DelCFptr *chain_begin) |
DelCFptr | new_DelCF_clause (PrRef pPrRef, Psc pPSC, ClRef pClRef, DelCFptr *chain_begin) |
void | check_insert_global_delcf_pred (CTXTdeclc PrRef prref, Psc psc) |
void | check_insert_global_delcf_clause (CTXTdeclc PrRef prref, Psc psc, ClRef clref) |
void | mark_delcf_subchain (CTXTdeclc DelCFptr delcf, ClRef clref) |
int | mark_dynamic (CTXTdecl) |
void | gc_retractall (CTXTdeclc ClRef) |
int | determine_if_safe_to_delete (ClRef) |
static int | really_delete_clause (ClRef) |
int | sweep_dynamic (CTXTdeclc DelCFptr *chain_begin) |
int | gc_dynamic (CTXTdecl) |
static void | mark_for_deletion (CTXTdeclc ClRef Clause) |
static void | retract_clause (CTXTdeclc ClRef Clause, Psc psc) |
ClRef | previous_clref (ClRef Clause) |
CPtr | get_ClRefEntryPoint (ClRef Clause) |
ClRef | db_get_clause_code_space (PrRef Pred, ClRef Clause, CPtr *CodeBegAddr, CPtr *CodeEndAddr) |
xsbBool | db_get_last_clause (CTXTdecl) |
xsbBool | db_get_clause (CTXTdecl) |
xsbBool | db_reclaim0 (CTXTdecl) |
xsbBool | db_retract0 (CTXTdecl) |
static void | allocate_prref_tab (CTXTdeclc Psc psc, PrRef *prref, pb *new_ep) |
PrRef | build_prref (CTXTdeclc Psc psc) |
xsbBool | db_build_prref (CTXTdecl) |
PrRef | get_prref (CTXTdeclc Psc psc) |
xsbBool | db_get_prref (CTXTdecl) |
void | free_prref (CTXTdeclc CPtr *p, Psc psc) |
PrRef | sob_to_prref (ClRef clref) |
static int | clref_trie_asserted (CPtr Clref) |
static void | abolish_trie_asserted_stuff (CTXTdeclc PrRef prref) |
static int | another_buff (Cell Instr) |
void | retractall_prref (CTXTdeclc PrRef prref) |
int | gen_retract_all (CTXTdecl) |
void | db_remove_prref_1 (CTXTdeclc Psc psc) |
xsbBool | db_abolish0 (CTXTdecl) |
static void | retractall_clause (CTXTdeclc ClRef Clause, Psc psc, int flag) |
void | db_retractall0 (CTXTdecl) |
void | init_dbclause_cgc_blocks (void) |
void | init_standard_cgc_blocks (void) |
xsbBool | dynamic_code_function (CTXTdecl) |
static CPtr | trie_asserted_clref (CPtr prref) |
static void | print_bytes (CPtr x, int lo, int hi) |
BTNptr | trie_asserted_trienode (CPtr clref) |
int | trie_assert (CTXTdecl) |
int | trie_retract (CTXTdecl) |
int | trie_retract_safe (CTXTdecl) |
Variables | |
int | xsb_profiling_enabled |
CPtr | dbclause_cgc_block_gl = NULL |
CPtr | standard_cgc_block_begin_gl = NULL |
CPtr | standard_cgc_block_end_gl = NULL |
DispBlkHdr_t | DispBlkHdr |
static jmp_buf | assertcmp_env |
asrtBuff_t | asrtBuffB = {NULL,512,NULL,0,0} |
asrtBuff_t * | asrtBuff = &asrtBuffB |
static int | hashsizes_table [NUMHASHSIZES] |
DelCFptr | delcf_chain_begin = (DelCFptr) NULL |
|
|
|
|
|
Value: { int h, t ; \ ClRef cl ; \ t = ClRefHashSize(sob); \ h = hash_val( (Ind), (H), t ) ; \ cl = (ClRef) ClRefHashTable(sob)[h] ; \ if ((pb)cl != (pb)&dynfail_inst) \ return IndPtrClRef(cl,Level) ; \ } |
|
|
|
|
|
|
|
|
|
Value: ((CPtr) \ ((ClRefType(Cl)&1) == UNINDEXED_CL ? ClRefEntryPoint(Cl) :\ ClRefIEntryPoint((Cl),ClRefNumInds(Cl)) \ )) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: (cell_opcode(ClRefEntryAny(Cl))!=fail || \ cell_operand1(ClRefEntryAny(Cl))!=MARKED_FOR_DELETION) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: { \ dbgen_printinst3_macro(Opcode, Arg1, Arg2, Arg3); \ write_byte(Buff,Loc,Opcode); write_byte(Buff,Loc,Arg1>>16); \ write_byte(Buff,Loc,Arg1>>8); write_byte(Buff,Loc,Arg1); \ pad64bits(Loc); \ write_word(Buff,Loc,Arg2); write_word(Buff,Loc,Arg3); \ } |
|
Value: { \ dbgen_printinst3_macro(Opcode, Arg1, Arg2, Arg3); \ write_byte(Buff,Loc,Opcode); write_byte(Buff,Loc,Arg1); \ write_byte(Buff,Loc,Arg2); write_byte(Buff,Loc,Arg3); \ pad64bits(Loc); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, 0, 0); \ write_byte(Buff,Loc,Opcode); write_byte(Buff,Loc,0); \ write_byte(Buff,Loc,0); write_byte(Buff,Loc,0); \ pad64bits(Loc); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, (Integer)Arg1, 0); \ write_byte(Buff,Loc,Opcode); write_byte(Buff,Loc,0); \ write_byte(Buff,Loc,0); write_byte(Buff,Loc,0); \ pad64bits(Loc); \ write_word(Buff,Loc,Arg1); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, Arg1, 0); \ write_byte(Buff,Loc,Opcode); write_byte(Buff,Loc,0); \ write_byte(Buff,Loc,0); write_byte(Buff,Loc,Arg1); \ pad64bits(Loc); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, Arg1, (Integer)Arg2); \ write_byte(Buff,Loc,Opcode); write_byte(Buff,Loc,0); \ write_byte(Buff,Loc,0); write_byte(Buff,Loc,Arg1); \ pad64bits(Loc); \ write_word(Buff,Loc,Arg2); \ } |
|
Value: { \ int tLoc = 0, tempLoc = *Loc; char tBuff[4]; \ dbgen_printinst_macro(Opcode, Arg1, (Integer)Arg2); \ *Loc += 4; \ pad64bits(Loc); \ write_word(Buff,Loc,Arg2); \ write_byte(tBuff,&tLoc,Opcode); write_byte(tBuff,&tLoc,0); \ write_byte(tBuff,&tLoc,0); write_byte(tBuff,&tLoc,Arg1); \ memmove(Buff+tempLoc,tBuff,4); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, Arg1, (Integer)Arg2); \ write_byte(Buff,Loc,Opcode); write_byte(Buff,Loc,0); \ write_byte(Buff,Loc,0); write_byte(Buff,Loc,Arg1); \ pad64bits(Loc); \ write_word(Buff,Loc,Arg2); \ write_word(Buff,Loc,Arg3); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, Arg1, (Integer)Arg2); \ write_byte(Buff,Loc,Opcode); write_byte(Buff,Loc,0); \ write_byte(Buff,Loc,Arg1); write_byte(Buff,Loc,Arg2); \ pad64bits(Loc); \ } |
|
Value: { \ dbgen_printinst3_macro(Opcode, Arg1, Arg2, Arg3); \ if (*asrtBuff->Loc >= asrtBuff->BLim) asrtBuff->Buff = buff_realloc(CTXT); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Opcode); write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg1>>16); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg1>>8); write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg1); \ pad64bits(asrtBuff->Loc); \ write_word(asrtBuff->Buff,asrtBuff->Loc,Arg2); write_word(asrtBuff->Buff,asrtBuff->Loc,Arg3); \ } |
|
Value: { \ dbgen_printinst3_macro(Opcode, Arg1, Arg2, Arg3); \ if (*asrtBuff->Loc >= asrtBuff->BLim) asrtBuff->Buff = buff_realloc(CTXT); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Opcode); write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg1); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg2); write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg3); \ pad64bits(asrtBuff->Loc); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode,0,0); \ if (*asrtBuff->Loc >= asrtBuff->BLim) asrtBuff->Buff = buff_realloc(CTXT); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Opcode); write_byte(asrtBuff->Buff,asrtBuff->Loc,0); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,0); write_byte(asrtBuff->Buff,asrtBuff->Loc,0); \ pad64bits(asrtBuff->Loc); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, (Integer)Arg1, 0); \ if (*asrtBuff->Loc >= asrtBuff->BLim) asrtBuff->Buff = buff_realloc(CTXT); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Opcode); write_byte(asrtBuff->Buff,asrtBuff->Loc,0); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,0); write_byte(asrtBuff->Buff,asrtBuff->Loc,0); \ pad64bits(asrtBuff->Loc); \ write_word(asrtBuff->Buff,asrtBuff->Loc,Arg1); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, Arg1,0); \ if (*asrtBuff->Loc >= asrtBuff->BLim) asrtBuff->Buff = buff_realloc(CTXT); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Opcode); write_byte(asrtBuff->Buff,asrtBuff->Loc,0); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,0); write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg1); \ pad64bits(asrtBuff->Loc); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, Arg1, (Integer)Arg2); \ if (*asrtBuff->Loc >= asrtBuff->BLim) asrtBuff->Buff = buff_realloc(CTXT); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Opcode); write_byte(asrtBuff->Buff,asrtBuff->Loc,0); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,0); write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg1); \ pad64bits(asrtBuff->Loc); \ write_word(asrtBuff->Buff,asrtBuff->Loc,Arg2); \ } |
|
Value: { \ dbgen_printinst_macro(Opcode, Arg1, (Integer)Arg2); \ if (*asrtBuff->Loc >= asrtBuff->BLim) asrtBuff->Buff = buff_realloc(CTXT); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Opcode); write_byte(asrtBuff->Buff,asrtBuff->Loc,0); \ write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg1); write_byte(asrtBuff->Buff,asrtBuff->Loc,Arg2); \ pad64bits(asrtBuff->Loc); \ } |
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: { for(;;) \ if( curLevel < *IndLevel ) /* sob node */ \ { sob = ClRefPrRef(sob)->FirstClRef; /* go down */ \ curLevel++ ; \ } \ else /* curLevel == *IndLevel -> sob leaf */ \ { CheckSOBClause(Head,*Ind,sob,curLevel) ; \ NextSOB(sob,curLevel,IndLevel,Ind,Head) ; \ } \ } |
|
|
|
|
|
Value: { \ if (DCF_PrevDCF(pDCF) == 0) { \ chain_begin = DCF_NextDCF(pDCF); \ } \ else { \ DCF_NextDCF(DCF_PrevDCF(pDCF)) = DCF_NextDCF(pDCF); \ } \ if (DCF_NextDCF(pDCF) != 0) { \ DCF_PrevDCF(DCF_NextDCF(pDCF)) = DCF_PrevDCF(pDCF); \ } \ if (DCF_PrevPredDCF(pDCF) == 0 && pPRREF) { \ PrRef_DelCF(pPRREF) = DCF_NextPredDCF(pDCF); \ } \ else { \ DCF_NextPredDCF(DCF_PrevPredDCF(pDCF)) = DCF_NextPredDCF(pDCF); \ } \ if (DCF_NextPredDCF(pDCF) != 0) { \ DCF_PrevPredDCF(DCF_NextPredDCF(pDCF)) = DCF_PrevPredDCF(pDCF); \ } \ mem_dealloc(pDCF,sizeof(DeletedTableFrame),ASSERT_SPACE); \ } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: { long sz = (((NCells)*sizeof(Cell)+sizeof(ClRefHdr) + 7) & ~0x7); \ (ptr) = (ClRef)mem_calloc(sz,1,ASSERT_SPACE);\ (ptr)->buflen = ((Type)&3)+sz;\ (ptr)++;\ } |
|
|
|
|
|
|
|
|
|
Value: { while( ClRefTryOpCode(sob) == dyntrustmeelsefail \ || ClRefTryOpCode(sob) == noop ) /* end of sob chain */ \ if( curLevel-- == 1 ) /* root of sob tree */ \ return 0 ; \ else sob = ClRefUpSOB(sob) ; /* go up */ \ sob = ClRefNext(sob) ; /* follow sob chain */ \ if (curLevel == 1) { /* may have changed indexes?!? */ \ find_usable_index(Head,&sob,IndLevel,Ind); \ curLevel = *IndLevel; \ } \ if( ClRefType(sob) != SOB_RECORD ) return sob; \ } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: |
|
Value: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else if( cell_opcode(PI) == noop) IndRefPrev(PI) = (Cell) &dynfail_inst ; || cell_opcode(PI) == trymeelse |
|
|
|
|
|
|
|
|
|
|
|
The following macros traverse the SOB chains/trees and pick the first (next) clause since a given sob |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Initial value: {17,503,5003,49999,200003,400009,700001,1000003, 1000033,1000037,1000039,1000081,1000099,1000117,1000121,1000133} |
|
|
|
|
|
|