Back to index

lightning-sunbird  0.9+nobinonly
Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Private Member Functions | Friends
morkParser Class Reference

#include <morkParser.h>

Inheritance diagram for morkParser:
Inheritance graph
[legend]
Collaboration diagram for morkParser:
Collaboration graph
[legend]

List of all members.

Public Member Functions

virtual void CloseMorkNode (morkEnv *ev)
virtual ~morkParser ()
 morkParser (morkEnv *ev, const morkUsage &inUsage, nsIMdbHeap *ioHeap, morkStream *ioStream, mdb_count inBytesPerParseSegment, nsIMdbHeap *ioSlotHeap)
void CloseParser (morkEnv *ev)
mork_bool IsParser () const
mork_bool GoodParserTag () const
void NonGoodParserError (morkEnv *ev)
void NonUsableParserError (morkEnv *ev)
virtual void MidToYarn (morkEnv *ev, const morkMid &inMid, mdbYarn *outYarn)=0
virtual void OnNewPort (morkEnv *ev, const morkPlace &inPlace)=0
virtual void OnPortGlitch (morkEnv *ev, const morkGlitch &inGlitch)=0
virtual void OnPortEnd (morkEnv *ev, const morkSpan &inSpan)=0
virtual void OnNewGroup (morkEnv *ev, const morkPlace &inPlace, mork_gid inGid)=0
virtual void OnGroupGlitch (morkEnv *ev, const morkGlitch &inGlitch)=0
virtual void OnGroupCommitEnd (morkEnv *ev, const morkSpan &inSpan)=0
virtual void OnGroupAbortEnd (morkEnv *ev, const morkSpan &inSpan)=0
virtual void OnNewPortRow (morkEnv *ev, const morkPlace &inPlace, const morkMid &inMid, mork_change inChange)=0
virtual void OnPortRowGlitch (morkEnv *ev, const morkGlitch &inGlitch)=0
virtual void OnPortRowEnd (morkEnv *ev, const morkSpan &inSpan)=0
virtual void OnNewTable (morkEnv *ev, const morkPlace &inPlace, const morkMid &inMid, mork_bool inCutAllRows)=0
virtual void OnTableGlitch (morkEnv *ev, const morkGlitch &inGlitch)=0
virtual void OnTableEnd (morkEnv *ev, const morkSpan &inSpan)=0
virtual void OnNewMeta (morkEnv *ev, const morkPlace &inPlace)=0
virtual void OnMetaGlitch (morkEnv *ev, const morkGlitch &inGlitch)=0
virtual void OnMetaEnd (morkEnv *ev, const morkSpan &inSpan)=0
virtual void OnMinusRow (morkEnv *ev)=0
virtual void OnNewRow (morkEnv *ev, const morkPlace &inPlace, const morkMid &inMid, mork_bool inCutAllCols)=0
virtual void OnRowPos (morkEnv *ev, mork_pos inRowPos)=0
virtual void OnRowGlitch (morkEnv *ev, const morkGlitch &inGlitch)=0
virtual void OnRowEnd (morkEnv *ev, const morkSpan &inSpan)=0
virtual void OnNewDict (morkEnv *ev, const morkPlace &inPlace)=0
virtual void OnDictGlitch (morkEnv *ev, const morkGlitch &inGlitch)=0
virtual void OnDictEnd (morkEnv *ev, const morkSpan &inSpan)=0
virtual void OnAlias (morkEnv *ev, const morkSpan &inSpan, const morkMid &inMid)=0
virtual void OnAliasGlitch (morkEnv *ev, const morkGlitch &inGlitch)=0
virtual void OnMinusCell (morkEnv *ev)=0
virtual void OnNewCell (morkEnv *ev, const morkPlace &inPlace, const morkMid *inMid, const morkBuf *inBuf)=0
virtual void OnCellGlitch (morkEnv *ev, const morkGlitch &inGlitch)=0
virtual void OnCellForm (morkEnv *ev, mork_cscode inCharsetFormat)=0
virtual void OnCellEnd (morkEnv *ev, const morkSpan &inSpan)=0
virtual void OnValue (morkEnv *ev, const morkSpan &inSpan, const morkBuf &inBuf)=0
virtual void OnValueMid (morkEnv *ev, const morkSpan &inSpan, const morkMid &inMid)=0
virtual void OnRowMid (morkEnv *ev, const morkSpan &inSpan, const morkMid &inMid)=0
virtual void OnTableMid (morkEnv *ev, const morkSpan &inSpan, const morkMid &inMid)=0
mdb_count ParseMore (morkEnv *ev, mork_pos *outPos, mork_bool *outDone, mork_bool *outBroken)
void SetFrozen ()
void SetMutable ()
void SetAsleep ()
mork_bool IsFrozen () const
mork_bool IsMutable () const
mork_bool IsAsleep () const
void SetNodeClean ()
void SetNodeDirty ()
mork_bool IsNodeClean () const
mork_bool IsNodeDirty () const
void ZapOld (morkEnv *ev, nsIMdbHeap *ioHeap)
voidoperator new (size_t inSize, nsIMdbHeap &ioHeap, morkEnv *ev) CPP_THROW_NEW
void CloseNode (morkEnv *ev)
mdb_err CloseMdbObject (morkEnv *ev)
NS_IMETHOD CloseMdbObject (nsIMdbEnv *ev)
mork_bool IsNode () const
void RefsUnderUsesWarning (morkEnv *ev) const
void NonNodeError (morkEnv *ev) const
void NilHeapError (morkEnv *ev) const
void NonOpenNodeError (morkEnv *ev) const
void NonMutableNodeError (morkEnv *ev) const
void RefsOverflowWarning (morkEnv *ev) const
void UsesOverflowWarning (morkEnv *ev) const
void RefsUnderflowWarning (morkEnv *ev) const
void UsesUnderflowWarning (morkEnv *ev) const
mork_bool GoodRefs () const
mork_bool BadRefs () const
mork_uses StrongRefsOnly () const
mork_refs WeakRefsOnly () const
virtual mork_refs AddStrongRef (morkEnv *ev)
virtual mork_refs CutStrongRef (morkEnv *ev)
mork_refs AddWeakRef (morkEnv *ev)
mork_refs CutWeakRef (morkEnv *ev)
const char * GetNodeAccessAsString () const
const char * GetNodeUsageAsString () const
mork_usage NodeUsage () const
mork_bool IsHeapNode () const
mork_bool IsOpenNode () const
mork_bool IsShutNode () const
mork_bool IsDeadNode () const
mork_bool IsClosingNode () const
mork_bool IsOpenOrClosingNode () const
mork_bool HasNodeAccess () const
void MarkShut ()
void MarkClosing ()
void MarkDead ()

Static Public Member Functions

static void UnexpectedEofError (morkEnv *ev)
static void EofInsteadOfHexError (morkEnv *ev)
static void ExpectedEqualError (morkEnv *ev)
static void ExpectedHexDigitError (morkEnv *ev, int c)
static void NonParserTypeError (morkEnv *ev)
static void UnexpectedByteInMetaWarning (morkEnv *ev)
static void SlotWeakParser (morkParser *me, morkEnv *ev, morkParser **ioSlot)
static void SlotStrongParser (morkParser *me, morkEnv *ev, morkParser **ioSlot)
static voidMakeNew (size_t inSize, nsIMdbHeap &ioHeap, morkEnv *ev)
static void SlotWeakNode (morkNode *me, morkEnv *ev, morkNode **ioSlot)
static void SlotStrongNode (morkNode *me, morkEnv *ev, morkNode **ioSlot)

Public Attributes

nsIMdbHeapmNode_Heap
mork_base mNode_Base
mork_derived mNode_Derived
mork_access mNode_Access
mork_usage mNode_Usage
mork_able mNode_Mutable
mork_load mNode_Load
mork_uses mNode_Uses
mork_refs mNode_Refs

Protected Member Functions

void ParseLoop (morkEnv *ev)
void StartParse (morkEnv *ev)
void StopParse (morkEnv *ev)
int NextChar (morkEnv *ev)
void OnCellState (morkEnv *ev)
void OnMetaState (morkEnv *ev)
void OnRowState (morkEnv *ev)
void OnTableState (morkEnv *ev)
void OnDictState (morkEnv *ev)
void OnPortState (morkEnv *ev)
void OnStartState (morkEnv *ev)
void ReadCell (morkEnv *ev)
void ReadRow (morkEnv *ev, int c)
void ReadRowPos (morkEnv *ev)
void ReadTable (morkEnv *ev)
void ReadTableMeta (morkEnv *ev)
void ReadDict (morkEnv *ev)
mork_bool ReadContent (morkEnv *ev, mork_bool inInsideGroup)
void ReadGroup (morkEnv *ev)
mork_bool ReadEndGroupId (morkEnv *ev)
mork_bool ReadAt (morkEnv *ev, mork_bool inInsideGroup)
mork_bool FindGroupEnd (morkEnv *ev)
void ReadMeta (morkEnv *ev, int inEndMeta)
void ReadAlias (morkEnv *ev)
mork_id ReadHex (morkEnv *ev, int *outNextChar)
morkBufReadValue (morkEnv *ev)
morkBufReadName (morkEnv *ev, int c)
mork_bool ReadMid (morkEnv *ev, morkMid *outMid)
void ReadDictForm (morkEnv *ev)
void ReadCellForm (morkEnv *ev, int c)
mork_bool MatchPattern (morkEnv *ev, const char *inPattern)
void EndSpanOnThisByte (morkEnv *ev, morkSpan *ioSpan)
void EndSpanOnLastByte (morkEnv *ev, morkSpan *ioSpan)
void StartSpanOnLastByte (morkEnv *ev, morkSpan *ioSpan)
void StartSpanOnThisByte (morkEnv *ev, morkSpan *ioSpan)
int eat_line_break (morkEnv *ev, int inLast)
int eat_line_continue (morkEnv *ev)
int eat_comment (morkEnv *ev)

Protected Attributes

nsIMdbHeapmParser_Heap
morkStreammParser_Stream
mork_u4 mParser_Tag
mork_count mParser_MoreGranularity
mork_u4 mParser_State
mork_pos mParser_GroupContentStartPos
morkMid mParser_TableMid
morkMid mParser_RowMid
morkMid mParser_CellMid
mork_gid mParser_GroupId
mork_bool mParser_InPort
mork_bool mParser_InDict
mork_bool mParser_InCell
mork_bool mParser_InMeta
mork_bool mParser_InPortRow
mork_bool mParser_InRow
mork_bool mParser_InTable
mork_bool mParser_InGroup
mork_change mParser_AtomChange
mork_change mParser_CellChange
mork_change mParser_RowChange
mork_change mParser_TableChange
mork_change mParser_Change
mork_bool mParser_IsBroken
mork_bool mParser_IsDone
mork_bool mParser_DoMore
morkMid mParser_Mid
morkCoil mParser_ScopeCoil
morkCoil mParser_ValueCoil
morkCoil mParser_ColumnCoil
morkCoil mParser_StringCoil
morkSpool mParser_ScopeSpool
morkSpool mParser_ValueSpool
morkSpool mParser_ColumnSpool
morkSpool mParser_StringSpool
morkYarn mParser_MidYarn
morkSpan mParser_PortSpan
morkSpan mParser_GroupSpan
morkSpan mParser_DictSpan
morkSpan mParser_AliasSpan
morkSpan mParser_MetaSpan
morkSpan mParser_TableSpan
morkSpan mParser_RowSpan
morkSpan mParser_CellSpan
morkSpan mParser_ColumnSpan
morkSpan mParser_SlotSpan

Private Member Functions

mork_pos HerePos () const
void SetHerePos (mork_pos inPos)
void CountLineBreak ()
 morkParser (const morkParser &other)
morkParseroperator= (const morkParser &other)

Friends

class morkHandleFrame

Detailed Description

Definition at line 233 of file morkParser.h.


Constructor & Destructor Documentation

morkParser::~morkParser ( ) [virtual]

Definition at line 99 of file morkParser.cpp.

morkParser::morkParser ( morkEnv ev,
const morkUsage inUsage,
nsIMdbHeap ioHeap,
morkStream ioStream,
mdb_count  inBytesPerParseSegment,
nsIMdbHeap ioSlotHeap 
)

Definition at line 106 of file morkParser.cpp.

: morkNode(ev, inUsage, ioHeap)
, mParser_Heap( 0 )
, mParser_Stream( 0 )
, mParser_MoreGranularity( inBytesPerParseSegment )
, mParser_State( morkParser_kStartState )

, mParser_GroupContentStartPos( 0 )

, mParser_TableMid(  )
, mParser_RowMid(  )
, mParser_CellMid(  )
    
, mParser_InPort( morkBool_kFalse )
, mParser_InDict( morkBool_kFalse )
, mParser_InCell( morkBool_kFalse )
, mParser_InMeta( morkBool_kFalse )
    
, mParser_InPortRow( morkBool_kFalse )
, mParser_InRow( morkBool_kFalse )
, mParser_InTable( morkBool_kFalse )
, mParser_InGroup( morkBool_kFalse )

, mParser_AtomChange( morkChange_kNil )
, mParser_CellChange( morkChange_kNil )
, mParser_RowChange( morkChange_kNil )
, mParser_TableChange( morkChange_kNil )

, mParser_Change( morkChange_kNil )
, mParser_IsBroken( morkBool_kFalse )
, mParser_IsDone( morkBool_kFalse )
, mParser_DoMore( morkBool_kTrue )
    
, mParser_Mid()

, mParser_ScopeCoil(ev, ioSlotHeap)
, mParser_ValueCoil(ev, ioSlotHeap)
, mParser_ColumnCoil(ev, ioSlotHeap)
, mParser_StringCoil(ev, ioSlotHeap)

, mParser_ScopeSpool(ev, &mParser_ScopeCoil)
, mParser_ValueSpool(ev, &mParser_ValueCoil)
, mParser_ColumnSpool(ev, &mParser_ColumnCoil)
, mParser_StringSpool(ev, &mParser_StringCoil)

, mParser_MidYarn(ev, morkUsage_kMember, ioSlotHeap)
{
  if ( inBytesPerParseSegment < morkParser_kMinGranularity )
    inBytesPerParseSegment = morkParser_kMinGranularity;
  else if ( inBytesPerParseSegment > morkParser_kMaxGranularity )
    inBytesPerParseSegment = morkParser_kMaxGranularity;
    
  mParser_MoreGranularity = inBytesPerParseSegment;

  if ( ioSlotHeap && ioStream )
  {
    nsIMdbHeap_SlotStrongHeap(ioSlotHeap, ev, &mParser_Heap);
    morkStream::SlotStrongStream(ioStream, ev, &mParser_Stream);
    
    if ( ev->Good() )
    {
      mParser_Tag = morkParser_kTag;
      mNode_Derived = morkDerived_kParser;
    }
  }
  else
    ev->NilPointerError();
}

Here is the call graph for this function:

morkParser::morkParser ( const morkParser other) [private]

Member Function Documentation

mork_uses morkNode::AddStrongRef ( morkEnv ev) [virtual, inherited]

Reimplemented in morkTable.

Definition at line 510 of file morkNode.cpp.

{
  mork_uses outUses = 0;
  if ( this )
  {
    if ( this->IsNode() )
    {
      mork_uses uses = mNode_Uses;
      mork_refs refs = mNode_Refs;
      if ( refs < uses ) // need to fix broken refs/uses relation?
      { 
        this->RefsUnderUsesWarning(ev);
        mNode_Refs = mNode_Uses = refs = uses;
      }
      if ( refs < morkNode_kMaxRefCount ) // not too great?
      {
        mNode_Refs = ++refs;
        mNode_Uses = ++uses;
      }
      else
        this->RefsOverflowWarning(ev);

      outUses = uses;
    }
    else
      this->NonNodeError(ev);
  }
  else
    ev->NilPointerError();
  return outUses;
}

Here is the call graph for this function:

Here is the caller graph for this function:

mork_refs morkNode::AddWeakRef ( morkEnv ev) [inherited]

Definition at line 599 of file morkNode.cpp.

{
  mork_refs outRefs = 0;
  if ( this )
  {
    if ( this->IsNode() )
    {
      mork_refs refs = mNode_Refs;
      if ( refs < morkNode_kMaxRefCount ) // not too great?
        mNode_Refs = ++refs;
      else
        this->RefsOverflowWarning(ev);
        
      outRefs = refs;
    }
    else
      this->NonNodeError(ev);
  }
  else
    ev->NilPointerError();
  return outRefs;
}

Here is the call graph for this function:

Here is the caller graph for this function:

mork_bool morkNode::BadRefs ( ) const [inline, inherited]

Definition at line 217 of file morkNode.h.

{ return mNode_Refs < mNode_Uses; }
mdb_err morkNode::CloseMdbObject ( morkEnv ev) [inherited]

Definition at line 243 of file morkNode.cpp.

{
  // if only one ref, Handle_CutStrongRef will clean up better.
  if (mNode_Uses == 1)
    return CutStrongRef(ev);

  mdb_err outErr = 0;
  
  if ( IsNode() && IsOpenNode() )
  {
    if ( ev )
    {
      CloseMorkNode(ev);
      outErr = ev->AsErr();
    }
  }
  return outErr;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Reimplemented in orkinFactory, orkinPortTableCursor, orkinRowCellCursor, orkinRow, orkinTableRowCursor, orkinThumb, morkStore, orkinCell, orkinEnv, orkinFile, orkinSorting, orkinStore, orkinTable, morkObject, and morkCursor.

Definition at line 238 of file morkNode.cpp.

{
  return morkNode::CloseMdbObject((morkEnv *) mev);
}

Here is the call graph for this function:

void morkParser::CloseMorkNode ( morkEnv ev) [virtual]

Reimplemented from morkNode.

Reimplemented in morkBuilder.

Definition at line 88 of file morkParser.cpp.

{
  if ( this->IsOpenNode() )
  {
    this->MarkClosing();
    this->CloseParser(ev);
    this->MarkShut();
  }
}

Here is the call graph for this function:

void morkNode::CloseNode ( morkEnv ev) [inherited]

Definition at line 384 of file morkNode.cpp.

{
  if ( this )
  {
    if ( this->IsNode() )
      this->MarkShut();
    else
      this->NonNodeError(ev);
  }
  else
    ev->NilPointerError();
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 179 of file morkParser.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::CountLineBreak ( ) [inline, private]

Definition at line 327 of file morkParser.h.

Here is the caller graph for this function:

mork_uses morkNode::CutStrongRef ( morkEnv ev) [virtual, inherited]

Reimplemented in morkTable.

Definition at line 580 of file morkNode.cpp.

{
  mork_refs outRefs = 0;
  if ( this )
  {
    if ( this->IsNode() )
    {
      if ( this->cut_use_count(ev) )
        outRefs = this->CutWeakRef(ev);
    }
    else
      this->NonNodeError(ev);
  }
  else
    ev->NilPointerError();
  return outRefs;
}

Here is the call graph for this function:

Here is the caller graph for this function:

mork_refs morkNode::CutWeakRef ( morkEnv ev) [inherited]

Definition at line 623 of file morkNode.cpp.

{
  mork_refs outRefs = 0;
  if ( this )
  {
    if ( this->IsNode() )
    {
      mork_uses uses = mNode_Uses;
      mork_refs refs = mNode_Refs;
      if ( refs ) // not yet zero?
        mNode_Refs = --refs;
      else
        this->RefsUnderflowWarning(ev);

      if ( refs < uses ) // need to fix broken refs/uses relation?
      { 
        this->RefsUnderUsesWarning(ev);
        mNode_Refs = mNode_Uses = refs = uses;
      }
        
      outRefs = refs;
      if ( !refs ) // last reference gone? time to destroy node?
        this->ZapOld(ev, mNode_Heap); // self destroy, use this no longer
    }
    else
      this->NonNodeError(ev);
  }
  else
    ev->NilPointerError();
  return outRefs;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int morkParser::eat_comment ( morkEnv ev) [protected]

Definition at line 317 of file morkParser.cpp.

{
  morkStream* s = mParser_Stream;
  // Note morkStream::Getc() returns EOF when an error occurs, so
  // we don't need to check for both c != EOF and ev->Good() below.
  
  register int c = s->Getc(ev);
  if ( c == '/' ) // C++ style comment?
  {
    while ( (c = s->Getc(ev)) != EOF && c != 0xA && c != 0xD )
      /* empty */;
      
    if ( c == 0xA || c == 0xD )
      c = this->eat_line_break(ev, c);
  }
  else if ( c == '*' ) /* C style comment? */
  {
    int depth = 1; // count depth of comments until depth reaches zero
    
    while ( depth > 0 && c != EOF ) // still looking for comment end(s)?
    {
      while ( (c = s->Getc(ev)) != EOF && c != '/' && c != '*' )
      {
        if ( c == 0xA || c == 0xD ) // need to count a line break?
        {
          c = this->eat_line_break(ev, c);
          if ( c == '/' || c == '*' )
            break; // end while loop
        }
      }
        
      if ( c == '*' ) // maybe end of a comment, if next char is '/'?
      {
        if ( (c = s->Getc(ev)) == '/' ) // end of comment?
        {
          --depth; // depth of comments has decreased by one
          if ( !depth ) // comments all done?
            c = s->Getc(ev); // return the byte after end of comment
        }
        else if ( c != EOF ) // need to put the char back?
          s->Ungetc(c); // especially need to put back '*', 0xA, or 0xD
      }
      else if ( c == '/' ) // maybe nested comemnt, if next char is '*'?
      {
        if ( (c = s->Getc(ev)) == '*' ) // nested comment?
          ++depth; // depth of comments has increased by one
        else if ( c != EOF ) // need to put the char back?
          s->Ungetc(c); // especially need to put back '/', 0xA, or 0xD
      }
        
      if ( ev->Bad() )
        c = EOF;
    }
    if ( c == EOF && depth > 0 )
      ev->NewWarning("EOF before end of comment");
  }
  else
    ev->NewWarning("expected / or *");
  
  return c;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int morkParser::eat_line_break ( morkEnv ev,
int  inLast 
) [protected]

Definition at line 379 of file morkParser.cpp.

{
  morkStream* s = mParser_Stream;
  register int c = s->Getc(ev); // get next char after 0xA or 0xD
  this->CountLineBreak();
  if ( c == 0xA || c == 0xD ) // another line break character?
  {
    if ( c != inLast ) // not the same as the last one?
      c = s->Getc(ev); // get next char after two-byte linebreak
  }
  return c;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int morkParser::eat_line_continue ( morkEnv ev) [protected]

Definition at line 392 of file morkParser.cpp.

{
  morkStream* s = mParser_Stream;
  register int c = s->Getc(ev);
  if ( c == 0xA || c == 0xD ) // linebreak follows \ as expected?
  {
    c = this->eat_line_break(ev, c);
  }
  else
    ev->NewWarning("expected linebreak");
  
  return c;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::EndSpanOnLastByte ( morkEnv ev,
morkSpan ioSpan 
) [protected]

Definition at line 1370 of file morkParser.cpp.

{
  mork_pos here;
  nsIMdbEnv *ev = mev->AsMdbEnv();
  nsresult rv= mParser_Stream->Tell(ev, &here);
  if ( NS_SUCCEEDED(rv) && mev->Good() )
  {
    if ( here > 0 )
      --here;
    else
      here = 0;

    this->SetHerePos(here);
    ioSpan->SetEndWithEnd(mParser_PortSpan);
  }
}

Here is the call graph for this function:

void morkParser::EndSpanOnThisByte ( morkEnv ev,
morkSpan ioSpan 
) [protected]

Definition at line 1358 of file morkParser.cpp.

{
  mork_pos here;
  nsIMdbEnv *ev = mev->AsMdbEnv();
  nsresult rv = mParser_Stream->Tell(ev, &here);
  if (NS_SUCCEEDED(rv) && mev->Good() )
  {
    this->SetHerePos(here);
    ioSpan->SetEndWithEnd(mParser_PortSpan);
  }
}

Here is the call graph for this function:

Definition at line 866 of file morkParser.cpp.

{
  ev->NewWarning("eof instead of hex");
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 879 of file morkParser.cpp.

{
  ev->NewWarning("expected '='");
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ExpectedHexDigitError ( morkEnv ev,
int  c 
) [static]

Definition at line 872 of file morkParser.cpp.

{
  MORK_USED_1(c);
  ev->NewWarning("expected hex digit");
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 1154 of file morkParser.cpp.

{
  mork_bool foundEnd = morkBool_kFalse;
  
  // char gidBuf[ 64 ]; // to hold hex pattern we want
  // (void) ev->TokenAsHex(gidBuf, mParser_GroupId);
  
  morkStream* s = mParser_Stream;
  register int c;
  
  while ( (c = s->Getc(ev)) != EOF && ev->Good() && !foundEnd )
  {
    if ( c == '@' ) // maybe start of group ending?
    {
      // this->EndSpanOnThisByte(ev, &mParser_GroupSpan);
      if ( (c = s->Getc(ev)) == '$' ) // '$' follows '@' ?
      {
        if ( (c = s->Getc(ev)) == '$' ) // '$' follows "@$" ?
        {
          if ( (c = s->Getc(ev)) == '}' )
          {
            foundEnd = this->ReadEndGroupId(ev);
            // this->EndSpanOnThisByte(ev, &mParser_GroupSpan);

          }
          else
            ev->NewError("expected '}' after @$$");
        }
      }
      if ( !foundEnd && c == '@' )
        s->Ungetc(c);
    }
  }

  return foundEnd && ev->Good();
}

Here is the call graph for this function:

Here is the caller graph for this function:

const char * morkNode::GetNodeAccessAsString ( ) const [inherited]

Definition at line 658 of file morkNode.cpp.

{
  const char* outString = morkNode_kBroken;
  switch( mNode_Access )
  {
    case morkAccess_kOpen: outString = "open"; break;
    case morkAccess_kClosing: outString = "closing"; break;
    case morkAccess_kShut: outString = "shut"; break;
    case morkAccess_kDead: outString = "dead"; break;
  }
  return outString;
}
const char * morkNode::GetNodeUsageAsString ( ) const [inherited]

Definition at line 672 of file morkNode.cpp.

{
  const char* outString = morkNode_kBroken;
  switch( mNode_Usage )
  {
    case morkUsage_kHeap: outString = "heap"; break;
    case morkUsage_kStack: outString = "stack"; break;
    case morkUsage_kMember: outString = "member"; break;
    case morkUsage_kGlobal: outString = "global"; break;
    case morkUsage_kPool: outString = "pool"; break;
    case morkUsage_kNone: outString = "none"; break;
  }
  return outString;
}

Definition at line 362 of file morkParser.h.

Here is the caller graph for this function:

mork_bool morkNode::GoodRefs ( ) const [inline, inherited]

Definition at line 216 of file morkNode.h.

{ return mNode_Refs >= mNode_Uses; }
mork_bool morkNode::HasNodeAccess ( ) const [inline, inherited]

Definition at line 251 of file morkNode.h.

  { return ( IsOpenNode() || IsShutNode() || IsClosingNode() ); }

Here is the call graph for this function:

mork_pos morkParser::HerePos ( ) const [inline, private]

Definition at line 321 of file morkParser.h.

Here is the caller graph for this function:

mork_bool morkNode::IsAsleep ( ) const [inline, inherited]

Definition at line 142 of file morkNode.h.

mork_bool morkNode::IsClosingNode ( ) const [inline, inherited]

Definition at line 245 of file morkNode.h.

Here is the caller graph for this function:

mork_bool morkNode::IsDeadNode ( ) const [inline, inherited]

Definition at line 242 of file morkNode.h.

Here is the caller graph for this function:

mork_bool morkNode::IsFrozen ( ) const [inline, inherited]

Definition at line 140 of file morkNode.h.

Here is the caller graph for this function:

mork_bool morkNode::IsHeapNode ( ) const [inline, inherited]

Definition at line 233 of file morkNode.h.

  { return mNode_Usage == morkUsage_kHeap; }
mork_bool morkNode::IsMutable ( ) const [inline, inherited]

Definition at line 141 of file morkNode.h.

Here is the caller graph for this function:

mork_bool morkNode::IsNode ( ) const [inline, inherited]

Definition at line 193 of file morkNode.h.

  { return mNode_Base == morkBase_kNode; }
mork_bool morkNode::IsNodeClean ( ) const [inline, inherited]

Definition at line 147 of file morkNode.h.

{ return mNode_Load == morkLoad_kClean; }

Here is the caller graph for this function:

mork_bool morkNode::IsNodeDirty ( ) const [inline, inherited]

Definition at line 148 of file morkNode.h.

{ return mNode_Load == morkLoad_kDirty; }

Here is the caller graph for this function:

mork_bool morkNode::IsOpenNode ( ) const [inline, inherited]

Definition at line 236 of file morkNode.h.

mork_bool morkNode::IsOpenOrClosingNode ( ) const [inline, inherited]

Definition at line 248 of file morkNode.h.

  { return IsOpenNode() || IsClosingNode(); }

Here is the call graph for this function:

Here is the caller graph for this function:

mork_bool morkParser::IsParser ( ) const [inline]

Definition at line 348 of file morkParser.h.

Here is the call graph for this function:

mork_bool morkNode::IsShutNode ( ) const [inline, inherited]

Definition at line 239 of file morkNode.h.

Here is the caller graph for this function:

void * morkNode::MakeNew ( size_t  inSize,
nsIMdbHeap ioHeap,
morkEnv ev 
) [static, inherited]

Definition at line 177 of file morkNode.cpp.

{
  void* node = 0;
  if ( &ioHeap )
  {
    ioHeap.Alloc(ev->AsMdbEnv(), inSize, (void **) &node);
    if ( !node )
      ev->OutOfMemoryError();
  }
  else
    ev->NilPointerError();
  
  return node;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkNode::MarkClosing ( ) [inline, inherited]

Definition at line 255 of file morkNode.h.

void morkNode::MarkDead ( ) [inline, inherited]

Definition at line 256 of file morkNode.h.

void morkNode::MarkShut ( ) [inline, inherited]

Definition at line 254 of file morkNode.h.

mork_bool morkParser::MatchPattern ( morkEnv ev,
const char *  inPattern 
) [protected]

Definition at line 1137 of file morkParser.cpp.

{
  // if an error occurs, we want original inPattern in the debugger:
  const char* pattern = inPattern; // mutable copy of pointer
  morkStream* s = mParser_Stream;
  register int c;
  while ( *pattern && ev->Good() )
  {
    char byte = *pattern++;
    if ( (c = s->Getc(ev)) != byte )
    {
      ev->NewError("byte not in expected pattern");
    }
  }
  return ev->Good();
}

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void morkParser::MidToYarn ( morkEnv ev,
const morkMid inMid,
mdbYarn outYarn 
) [pure virtual]

Implemented in morkBuilder.

int morkParser::NextChar ( morkEnv ev) [protected]

Definition at line 406 of file morkParser.cpp.

{
  morkStream* s = mParser_Stream;
  register int c = s->Getc(ev);
  while ( c > 0 && ev->Good() )
  {
    if ( c == '/' )
      c = this->eat_comment(ev);
    else if ( c == 0xA || c == 0xD )
      c = this->eat_line_break(ev, c);
    else if ( c == '\\' )
      c = this->eat_line_continue(ev);
    else if ( morkCh_IsWhite(c) )
      c = s->Getc(ev);
    else  
      break; // end while loop when return c is acceptable
  }
  if ( ev->Bad() )
  {
    mParser_State = morkParser_kBrokenState;
    mParser_DoMore = morkBool_kFalse;
    mParser_IsDone = morkBool_kTrue;
    mParser_IsBroken = morkBool_kTrue;
    c = EOF;
  }
  else if ( c == EOF )
  {
    mParser_DoMore = morkBool_kFalse;
    mParser_IsDone = morkBool_kTrue;
  }
  return c;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkNode::NilHeapError ( morkEnv ev) const [inherited]

Definition at line 354 of file morkNode.cpp.

{
  ev->NewError("nil mNode_Heap");
}

Here is the caller graph for this function:

mork_usage morkNode::NodeUsage ( ) const [inline, inherited]

Definition at line 231 of file morkNode.h.

{ return mNode_Usage; }

Definition at line 207 of file morkParser.cpp.

{
  ev->NewError("non-morkNode");
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkNode::NonMutableNodeError ( morkEnv ev) const [inherited]

Definition at line 348 of file morkNode.cpp.

{
  ev->NewError("non-mutable-morkNode");
}

Here is the caller graph for this function:

void morkNode::NonNodeError ( morkEnv ev) const [inherited]

Definition at line 336 of file morkNode.cpp.

{
  ev->NewError("non-morkNode");
}
void morkNode::NonOpenNodeError ( morkEnv ev) const [inherited]

Definition at line 342 of file morkNode.cpp.

{
  ev->NewError("non-open-morkNode");
}

Here is the caller graph for this function:

Definition at line 1132 of file morkParser.cpp.

{
  ev->NewError("non morkParser");
}

Here is the call graph for this function:

Definition at line 213 of file morkParser.cpp.

{
  if ( this->IsNode() )
  {
    if ( this->IsOpenNode() )
    {
      if (  this->GoodParserTag() )
      {
         // okay
      }
      else
        this->NonGoodParserError(ev);
    }
    else
      this->NonOpenNodeError(ev);
  }
  else
    this->NonNodeError(ev);
}

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void morkParser::OnAlias ( morkEnv ev,
const morkSpan inSpan,
const morkMid inMid 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnAliasGlitch ( morkEnv ev,
const morkGlitch inGlitch 
) [pure virtual]

Implemented in morkBuilder.

virtual void morkParser::OnCellEnd ( morkEnv ev,
const morkSpan inSpan 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnCellForm ( morkEnv ev,
mork_cscode  inCharsetFormat 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnCellGlitch ( morkEnv ev,
const morkGlitch inGlitch 
) [pure virtual]

Implemented in morkBuilder.

void morkParser::OnCellState ( morkEnv ev) [protected]

Definition at line 440 of file morkParser.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void morkParser::OnDictEnd ( morkEnv ev,
const morkSpan inSpan 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnDictGlitch ( morkEnv ev,
const morkGlitch inGlitch 
) [pure virtual]

Implemented in morkBuilder.

void morkParser::OnDictState ( morkEnv ev) [protected]

Definition at line 464 of file morkParser.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void morkParser::OnGroupAbortEnd ( morkEnv ev,
const morkSpan inSpan 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnGroupCommitEnd ( morkEnv ev,
const morkSpan inSpan 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnGroupGlitch ( morkEnv ev,
const morkGlitch inGlitch 
) [pure virtual]

Implemented in morkBuilder.

virtual void morkParser::OnMetaEnd ( morkEnv ev,
const morkSpan inSpan 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnMetaGlitch ( morkEnv ev,
const morkGlitch inGlitch 
) [pure virtual]

Implemented in morkBuilder.

void morkParser::OnMetaState ( morkEnv ev) [protected]

Definition at line 446 of file morkParser.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void morkParser::OnMinusCell ( morkEnv ev) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnMinusRow ( morkEnv ev) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnNewCell ( morkEnv ev,
const morkPlace inPlace,
const morkMid inMid,
const morkBuf inBuf 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnNewDict ( morkEnv ev,
const morkPlace inPlace 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnNewGroup ( morkEnv ev,
const morkPlace inPlace,
mork_gid  inGid 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnNewMeta ( morkEnv ev,
const morkPlace inPlace 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnNewPort ( morkEnv ev,
const morkPlace inPlace 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnNewPortRow ( morkEnv ev,
const morkPlace inPlace,
const morkMid inMid,
mork_change  inChange 
) [pure virtual]

Implemented in morkBuilder.

virtual void morkParser::OnNewRow ( morkEnv ev,
const morkPlace inPlace,
const morkMid inMid,
mork_bool  inCutAllCols 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnNewTable ( morkEnv ev,
const morkPlace inPlace,
const morkMid inMid,
mork_bool  inCutAllRows 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnPortEnd ( morkEnv ev,
const morkSpan inSpan 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnPortGlitch ( morkEnv ev,
const morkGlitch inGlitch 
) [pure virtual]

Implemented in morkBuilder.

virtual void morkParser::OnPortRowEnd ( morkEnv ev,
const morkSpan inSpan 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnPortRowGlitch ( morkEnv ev,
const morkGlitch inGlitch 
) [pure virtual]

Implemented in morkBuilder.

void morkParser::OnPortState ( morkEnv ev) [protected]

Definition at line 1468 of file morkParser.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void morkParser::OnRowEnd ( morkEnv ev,
const morkSpan inSpan 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnRowGlitch ( morkEnv ev,
const morkGlitch inGlitch 
) [pure virtual]

Implemented in morkBuilder.

virtual void morkParser::OnRowMid ( morkEnv ev,
const morkSpan inSpan,
const morkMid inMid 
) [pure virtual]

Implemented in morkBuilder.

virtual void morkParser::OnRowPos ( morkEnv ev,
mork_pos  inRowPos 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

void morkParser::OnRowState ( morkEnv ev) [protected]

Definition at line 452 of file morkParser.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::OnStartState ( morkEnv ev) [protected]

Definition at line 1484 of file morkParser.cpp.

{
  morkStream* s = mParser_Stream;
  nsIMdbEnv *ev = mev->AsMdbEnv();
  if ( s && s->IsNode() && s->IsOpenNode() )
  {
    mork_pos outPos;
    nsresult rv = s->Seek(ev, 0, &outPos);
    if (NS_SUCCEEDED(rv) && mev->Good() )
    {
      this->StartParse(mev);
      mParser_State = morkParser_kPortState;
    }
  }
  else
    mev->NilPointerError();

  if ( mev->Bad() )
    mParser_State = morkParser_kBrokenState;
}

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void morkParser::OnTableEnd ( morkEnv ev,
const morkSpan inSpan 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnTableGlitch ( morkEnv ev,
const morkGlitch inGlitch 
) [pure virtual]

Implemented in morkBuilder.

virtual void morkParser::OnTableMid ( morkEnv ev,
const morkSpan inSpan,
const morkMid inMid 
) [pure virtual]

Implemented in morkBuilder.

void morkParser::OnTableState ( morkEnv ev) [protected]

Definition at line 458 of file morkParser.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void morkParser::OnValue ( morkEnv ev,
const morkSpan inSpan,
const morkBuf inBuf 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

virtual void morkParser::OnValueMid ( morkEnv ev,
const morkSpan inSpan,
const morkMid inMid 
) [pure virtual]

Implemented in morkBuilder.

Here is the caller graph for this function:

void* morkNode::operator new ( size_t  inSize,
nsIMdbHeap ioHeap,
morkEnv ev 
) [inline, inherited]

Reimplemented in morkTable, morkFactory, morkPool, and morkSorting.

Definition at line 159 of file morkNode.h.

  { return morkNode::MakeNew(inSize, ioHeap, ev); }

Here is the call graph for this function:

morkParser& morkParser::operator= ( const morkParser other) [private]
void morkParser::ParseLoop ( morkEnv ev) [protected]

Definition at line 1506 of file morkParser.cpp.

{
  mParser_Change = morkChange_kNil;
  mParser_DoMore = morkBool_kTrue;
            
  while ( mParser_DoMore )
  {
    switch ( mParser_State )
    {
      case morkParser_kCellState: // 0
        this->OnCellState(ev); break;
        
      case morkParser_kMetaState: // 1
        this->OnMetaState(ev); break;
        
      case morkParser_kRowState: // 2
        this->OnRowState(ev); break;
        
      case morkParser_kTableState: // 3
        this->OnTableState(ev); break;
        
      case morkParser_kDictState: // 4
        this->OnDictState(ev); break;
        
      case morkParser_kPortState: // 5
        this->OnPortState(ev); break;
        
      case morkParser_kStartState: // 6
        this->OnStartState(ev); break;
       
      case morkParser_kDoneState: // 7
        mParser_DoMore = morkBool_kFalse;
        mParser_IsDone = morkBool_kTrue;
        this->StopParse(ev);
        break;
      case morkParser_kBrokenState: // 8
        mParser_DoMore = morkBool_kFalse;
        mParser_IsBroken = morkBool_kTrue;
        this->StopParse(ev);
        break;
      default: // ?
        MORK_ASSERT(morkBool_kFalse);
        mParser_State = morkParser_kBrokenState;
        break;
    }
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

mdb_count morkParser::ParseMore ( morkEnv ev,
mork_pos outPos,
mork_bool outDone,
mork_bool outBroken 
)

Definition at line 1555 of file morkParser.cpp.

{
  mdb_count outCount = 0;
  if ( this->IsNode() && this->GoodParserTag() && this->IsOpenNode() )
  {
    mork_pos startPos = this->HerePos();

    if ( !mParser_IsDone && !mParser_IsBroken )
      this->ParseLoop(ev);
  
    mork_pos endPos = this->HerePos();
    if ( outDone )
      *outDone = mParser_IsDone;
    if ( outBroken )
      *outBroken = mParser_IsBroken;
    if ( outPos )
      *outPos = endPos;
      
    if ( endPos > startPos )
      outCount = (mdb_count) (endPos - startPos);
  }
  else
  {
    this->NonUsableParserError(ev);
    if ( outDone )
      *outDone = morkBool_kTrue;
    if ( outBroken )
      *outBroken = morkBool_kTrue;
    if ( outPos )
      *outPos = 0;
  }
  return outCount;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadAlias ( morkEnv ev) [protected]

Definition at line 1023 of file morkParser.cpp.

{
  // this->StartSpanOnLastByte(ev, &mParser_AliasSpan);

  int nextChar;
  mork_id hex = this->ReadHex(ev, &nextChar);
  register int c = nextChar;

  mParser_Mid.ClearMid();
  mParser_Mid.mMid_Oid.mOid_Id = hex;

  if ( morkCh_IsWhite(c) && ev->Good() )
    c = this->NextChar(ev);

  if ( ev->Good() )
  {
    if ( c == '<')
    {
      ReadDictForm(ev);
      if (ev->Good())
        c = this->NextChar(ev);
    }
    if ( c == '=' )
    {
      mParser_Mid.mMid_Buf = this->ReadValue(ev);
      if ( mParser_Mid.mMid_Buf )
      {
        // this->EndSpanOnThisByte(ev, &mParser_AliasSpan);
        this->OnAlias(ev, mParser_AliasSpan, mParser_Mid);
        // need to reset this somewhere.
        mParser_ValueCoil.mText_Form = 0;

      }
    }
    else
      this->ExpectedEqualError(ev);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

mork_bool morkParser::ReadAt ( morkEnv ev,
mork_bool  inInsideGroup 
) [protected]

Definition at line 1234 of file morkParser.cpp.

{
  if ( this->MatchPattern(ev, "$$") )
  {
    morkStream* s = mParser_Stream;
     register int c;
    if ( ((c = s->Getc(ev)) == '{' || c == '}') && ev->Good() )
     {
       if ( c == '{' ) // start of new group?
       {
         if ( !inInsideGroup )
           this->ReadGroup(ev);
         else
           ev->NewError("nested @$${ inside another group");
       }
       else // c == '}' // end of old group?
       {
         if ( inInsideGroup )
         {
          this->ReadEndGroupId(ev);
          mParser_GroupId = 0;
         }
         else
           ev->NewError("unmatched @$$} outside any group");
       }
     }
     else
       ev->NewError("expected '{' or '}' after @$$");
  }
  return ev->Good();
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadCell ( morkEnv ev) [protected]

Definition at line 544 of file morkParser.cpp.

{
  mParser_CellMid.ClearMid();
  // this->StartSpanOnLastByte(ev, &mParser_CellSpan);
  morkMid* cellMid = 0; // if mid syntax is used for column
  morkBuf* cellBuf = 0; // if naked string is used for column

  morkStream* s = mParser_Stream;
  register int c;
  if ( (c = s->Getc(ev)) != EOF && ev->Good() )
  {
    // this->StartSpanOnLastByte(ev, &mParser_ColumnSpan);
    if ( c == '^' )
    {
      cellMid = &mParser_CellMid;
      this->ReadMid(ev, cellMid);
      // if ( !mParser_CellMid.mMid_Oid.mOid_Scope )
      //  mParser_CellMid.mMid_Oid.mOid_Scope = (mork_scope) 'c';
    }
    else
    {
      if (mParser_InMeta && c == morkStore_kFormColumn)
      {
        ReadCellForm(ev, c);
        return;
      }
      else
        cellBuf = this->ReadName(ev, c); 
    }
    if ( ev->Good() )
    {
      // this->EndSpanOnThisByte(ev, &mParser_ColumnSpan);

      mParser_InCell = morkBool_kTrue;
      this->OnNewCell(ev, *mParser_CellSpan.AsPlace(),
        cellMid, cellBuf); // , mParser_CellChange

      mParser_CellChange = morkChange_kNil;
      if ( (c = this->NextChar(ev)) != EOF && ev->Good() )
      {
        // this->StartSpanOnLastByte(ev, &mParser_SlotSpan);
        if ( c == '=' )
        {
          morkBuf* buf = this->ReadValue(ev);
          if ( buf )
          {
            // this->EndSpanOnThisByte(ev, &mParser_SlotSpan);
            this->OnValue(ev, mParser_SlotSpan, *buf);
          }
        }
        else if ( c == '^' )
        {
          if ( this->ReadMid(ev, &mParser_Mid) )
          {
            // this->EndSpanOnThisByte(ev, &mParser_SlotSpan);
            if ( (c = this->NextChar(ev)) != EOF && ev->Good() )
            {
              if ( c != ')' )
                ev->NewError("expected ')' after cell ^ID value");
            }
            else if ( c == EOF )
              this->UnexpectedEofError(ev);
            
            if ( ev->Good() )
              this->OnValueMid(ev, mParser_SlotSpan, mParser_Mid);
          }
        }
        else if ( c == 'r' || c == 't' || c == '"' || c == '\'' )
        {
          ev->NewError("cell syntax not yet supported");
        }
        else
        {
          ev->NewError("unknown cell syntax");
        }
      }
      
      // this->EndSpanOnThisByte(ev, &mParser_CellSpan);
      mParser_InCell = morkBool_kFalse;
      this->OnCellEnd(ev, mParser_CellSpan);
    }
  }
  mParser_CellChange = morkChange_kNil;
  
  if ( c == EOF && ev->Good() )
    this->UnexpectedEofError(ev);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadCellForm ( morkEnv ev,
int  c 
) [protected]

Definition at line 992 of file morkParser.cpp.

{
  MORK_ASSERT (c == morkStore_kFormColumn);
  int nextChar;
  nextChar = this->NextChar(ev);
  int cellForm;

  if (nextChar == '=')
  {
    cellForm = this->NextChar(ev);
    nextChar = this->NextChar(ev);
  }
  else if (nextChar == '^')
  {
    cellForm = this->ReadHex(ev, &nextChar);
  }
  else
  {
    ev->NewWarning("unexpected byte in cell form");
    return;
  }
  // ### not sure about this. Which form should we set?
  //    mBuilder_CellForm = mBuilder_RowForm = cellForm;
  if (nextChar == ')')
  {
    OnCellForm(ev, cellForm);
    return;
  }
  ev->NewWarning("unexpected byte in cell form");
}

Here is the call graph for this function:

Here is the caller graph for this function:

mork_bool morkParser::ReadContent ( morkEnv ev,
mork_bool  inInsideGroup 
) [protected]

Definition at line 1419 of file morkParser.cpp.

{
  int c;
  while ( (c = this->NextChar(ev)) != EOF && ev->Good() )
  {
    switch ( c )
    {
      case '[': // row
        this->ReadRow(ev, '[');
        break;
        
      case '{': // table
        this->ReadTable(ev);
        break;
        
      case '<': // dict
        this->ReadDict(ev);
        break;
        
      case '@': // group
        return this->ReadAt(ev, inInsideGroup);
        // break;
        
      // case '+': // plus
      //   mParser_Change = morkChange_kAdd;
      //   break;
        
      // case '-': // minus
      //   mParser_Change = morkChange_kCut;
      //   break;
        
      // case '!': // bang
      //   mParser_Change = morkChange_kSet;
      //   break;
        
      default:
        ev->NewWarning("unexpected byte in ReadContent()");
        break;
    }
  }
  if ( ev->Bad() )
    mParser_State = morkParser_kBrokenState;
  else if ( c == EOF )
    mParser_State = morkParser_kDoneState;
    
  return ( ev->Good() && c != EOF );
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadDict ( morkEnv ev) [protected]

Definition at line 1316 of file morkParser.cpp.

{
  mParser_Change = morkChange_kNil;
  mParser_AtomChange = morkChange_kNil;
  
  // this->StartSpanOnLastByte(ev, &mParser_DictSpan);
  mParser_InDict = morkBool_kTrue;
  this->OnNewDict(ev, *mParser_DictSpan.AsPlace());
  
  int c;
  while ( (c = this->NextChar(ev)) != EOF && ev->Good() && c != '>' )
  {
    switch ( c )
    {
      case '(': // alias
        this->ReadAlias(ev);
        break;
        
      case '<': // meta
        this->ReadMeta(ev, '>');
        break;
        
      default:
        ev->NewWarning("unexpected byte in dict");
        break;
    }
  }

  // this->EndSpanOnThisByte(ev, &mParser_DictSpan);
  mParser_InDict = morkBool_kFalse;
  this->OnDictEnd(ev, mParser_DictSpan);
  
  if ( ev->Bad() )
    mParser_State = morkParser_kBrokenState;
  else if ( c == EOF )
    mParser_State = morkParser_kDoneState;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadDictForm ( morkEnv ev) [protected]

Definition at line 954 of file morkParser.cpp.

{
  int nextChar;
  nextChar = this->NextChar(ev);
  if (nextChar == '(')
  {
    nextChar = this->NextChar(ev);
    if (nextChar == morkStore_kFormColumn)
    {
      int dictForm;

      nextChar = this->NextChar(ev);
      if (nextChar == '=')
      {
        dictForm = this->NextChar(ev);
        nextChar = this->NextChar(ev);
      }
      else if (nextChar == '^')
      {
        dictForm = this->ReadHex(ev, &nextChar);
      }
      else
      {
        ev->NewWarning("unexpected byte in dict form");
        return;
      }
      mParser_ValueCoil.mText_Form = dictForm;
      if (nextChar == ')')
      {
        nextChar = this->NextChar(ev);
        if (nextChar == '>')
          return;
      }
    }
  }
  ev->NewWarning("unexpected byte in dict form");
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 1274 of file morkParser.cpp.

{
  mork_bool outSawGroupId = morkBool_kFalse;
  morkStream* s = mParser_Stream;
  register int c;
  if ( (c = s->Getc(ev)) != EOF && ev->Good() )
  {
    if ( c == '~' ) // transaction is aborted?
    {
      this->MatchPattern(ev, "~}@"); // finish rest of pattern
    }
    else // push back byte and read expected trailing hex id
    {
      s->Ungetc(c);
      int next = 0;
      mork_gid endGroupId = this->ReadHex(ev, &next);
      if ( ev->Good() )
      {
        if ( endGroupId == mParser_GroupId ) // matches start?
        {
          if ( next == '}' ) // '}' after @$$}id ?
          {
            if ( (c = s->Getc(ev)) == '@' ) // '@' after @$$}id} ?
            {
              // looks good, so return with no error
              outSawGroupId = morkBool_kTrue;
            }
            else
              ev->NewError("expected '@' after @$$}id}");
          }
          else
            ev->NewError("expected '}' after @$$}id");
        }
        else
          ev->NewError("end group id mismatch");
      }
    }
  }
  return ( outSawGroupId && ev->Good() );
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadGroup ( morkEnv ev) [protected]

Definition at line 1191 of file morkParser.cpp.

{
  nsIMdbEnv *ev = mev->AsMdbEnv();
  int next = 0;
  mParser_GroupId = this->ReadHex(mev, &next);
  if ( next == '{' )
  {
    morkStream* s = mParser_Stream;
     register int c;
    if ( (c = s->Getc(mev)) == '@' )
    {
       // we really need the following span inside morkBuilder::OnNewGroup():
      this->StartSpanOnThisByte(mev, &mParser_GroupSpan);
      mork_pos startPos = mParser_GroupSpan.mSpan_Start.mPlace_Pos;

      // if ( !store->mStore_FirstCommitGroupPos )
      //   store->mStore_FirstCommitGroupPos = startPos;
      // else if ( !store->mStore_SecondCommitGroupPos )
      //   store->mStore_SecondCommitGroupPos = startPos;
      
      if ( this->FindGroupEnd(mev) )
      {
        mork_pos outPos;
        s->Seek(ev, startPos, &outPos);
        if ( mev->Good() )
        {
          this->OnNewGroup(mev, mParser_GroupSpan.mSpan_Start,
            mParser_GroupId);
          
          this->ReadContent(mev, /*inInsideGroup*/ morkBool_kTrue);

          this->OnGroupCommitEnd(mev, mParser_GroupSpan);
        }
      }
    }
    else
      mev->NewError("expected '@' after @$${id{");
  }
  else
    mev->NewError("expected '{' after @$$id");
    
}

Here is the call graph for this function:

Here is the caller graph for this function:

mork_id morkParser::ReadHex ( morkEnv ev,
int outNextChar 
) [protected]

Definition at line 826 of file morkParser.cpp.

{
  mork_id hex = 0;

  morkStream* s = mParser_Stream;
  register int c = this->NextChar(ev);
    
  if ( ev->Good() )
  {
    if ( c != EOF )
    {
      if ( morkCh_IsHex(c) )
      {
        do
        {
          if ( morkCh_IsDigit(c) ) // '0' through '9'?
            c -= '0';
          else if ( morkCh_IsUpper(c) ) // 'A' through 'F'?
            c -= ('A' - 10) ; // c = (c - 'A') + 10;
          else // 'a' through 'f'?
            c -= ('a' - 10) ; // c = (c - 'a') + 10;

          hex = (hex << 4) + c;
        }
        while ( (c = s->Getc(ev)) != EOF && ev->Good() && morkCh_IsHex(c) );
      }
      else
        this->ExpectedHexDigitError(ev, c);
    }
  }
  if ( c == EOF )
    this->EofInsteadOfHexError(ev);
    
  *outNextChar = c;
  return hex;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadMeta ( morkEnv ev,
int  inEndMeta 
) [protected]

Definition at line 1064 of file morkParser.cpp.

{
  // this->StartSpanOnLastByte(ev, &mParser_MetaSpan);
  mParser_InMeta = morkBool_kTrue;
  this->OnNewMeta(ev, *mParser_MetaSpan.AsPlace());

  mork_bool more = morkBool_kTrue; // until end meta
  int c;
  while ( more && (c = this->NextChar(ev)) != EOF && ev->Good() )
  {
    switch ( c )
    {
      case '(': // cell
        this->ReadCell(ev);
        break;
        
      case '>': // maybe end meta?
        if ( inEndMeta == '>' )
          more = morkBool_kFalse; // stop reading meta
        else
          this->UnexpectedByteInMetaWarning(ev);
        break;
        
      case '}': // maybe end meta?
        if ( inEndMeta == '}' )
          more = morkBool_kFalse; // stop reading meta
        else
          this->UnexpectedByteInMetaWarning(ev);
        break;
        
      case ']': // maybe end meta?
        if ( inEndMeta == ']' )
          more = morkBool_kFalse; // stop reading meta
        else
          this->UnexpectedByteInMetaWarning(ev);
        break;
        
      case '[': // maybe table meta row?
        if ( mParser_InTable )
          this->ReadRow(ev, '['); 
        else
          this->UnexpectedByteInMetaWarning(ev);
        break;
        
      default:
        if ( mParser_InTable && morkCh_IsHex(c) )
          this->ReadRow(ev, c);
        else
          this->UnexpectedByteInMetaWarning(ev);
        break;
    }
  }

  // this->EndSpanOnThisByte(ev, &mParser_MetaSpan);
  mParser_InMeta = morkBool_kFalse;
  this->OnMetaEnd(ev, mParser_MetaSpan);
}

Here is the call graph for this function:

Here is the caller graph for this function:

mork_bool morkParser::ReadMid ( morkEnv ev,
morkMid outMid 
) [protected]

Definition at line 508 of file morkParser.cpp.

{
  outMid->ClearMid();
  
  morkStream* s = mParser_Stream;
  int next;
  outMid->mMid_Oid.mOid_Id = this->ReadHex(ev, &next);
  register int c = next;
  if ( c == ':' )
  {
    if ( (c = s->Getc(ev)) != EOF && ev->Good() )
    {
      if ( c == '^' )
      {
        outMid->mMid_Oid.mOid_Scope = this->ReadHex(ev, &next);
        if ( ev->Good() )
          s->Ungetc(next);
      }
      else if ( morkCh_IsName(c) )
      {
        outMid->mMid_Buf = this->ReadName(ev, c); 
      }
      else
        ev->NewError("expected name or hex after ':' following ID");
    }
    
    if ( c == EOF && ev->Good() )
      this->UnexpectedEofError(ev);
  }
  else
    s->Ungetc(c);
  
  return ev->Good();
}

Here is the call graph for this function:

Here is the caller graph for this function:

morkBuf * morkParser::ReadName ( morkEnv ev,
int  c 
) [protected]

Definition at line 469 of file morkParser.cpp.

{
  morkBuf* outBuf = 0;
  
  if ( !morkCh_IsName(c) )
    ev->NewError("not a name char");

  morkCoil* coil = &mParser_ColumnCoil;
  coil->ClearBufFill();

  morkSpool* spool = &mParser_ColumnSpool;
  spool->Seek(ev, /*pos*/ 0);
  
  if ( ev->Good() )
  {
    spool->Putc(ev, c);
    
    morkStream* s = mParser_Stream;
    while ( (c = s->Getc(ev)) != EOF && morkCh_IsMore(c) && ev->Good() )
      spool->Putc(ev, c);
      
    if ( ev->Good() )
    {
      if ( c != EOF )
      {
        s->Ungetc(c);
        spool->FlushSink(ev); // update coil->mBuf_Fill
      }
      else
        this->UnexpectedEofError(ev);
        
      if ( ev->Good() )
        outBuf = coil;
    }
  }  
  return outBuf;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadRow ( morkEnv ev,
int  c 
) [protected]

Definition at line 643 of file morkParser.cpp.

{
  if ( ev->Good() )
  {
    // this->StartSpanOnLastByte(ev, &mParser_RowSpan);
    if ( mParser_Change )
      mParser_RowChange = mParser_Change;

    mork_bool cutAllRowCols = morkBool_kFalse;

    if ( c == '[' )
    {
      if ( ( c = this->NextChar(ev) ) == '-' )
        cutAllRowCols = morkBool_kTrue;
      else if ( ev->Good() && c != EOF )
        mParser_Stream->Ungetc(c);

      if ( this->ReadMid(ev, &mParser_RowMid) )
      {
        mParser_InRow = morkBool_kTrue;
        this->OnNewRow(ev, *mParser_RowSpan.AsPlace(),
          mParser_RowMid, cutAllRowCols);

        mParser_Change = mParser_RowChange = morkChange_kNil;

        while ( (c = this->NextChar(ev)) != EOF && ev->Good() && c != ']' )
        {
          switch ( c )
          {
            case '(': // cell
              this->ReadCell(ev);
              break;
              
            case '[': // meta
              this->ReadMeta(ev, ']');
              break;
            
            // case '+': // plus
            //   mParser_CellChange = morkChange_kAdd;
            //   break;
              
            case '-': // minus
              // mParser_CellChange = morkChange_kCut;
              this->OnMinusCell(ev);
              break;
              
            // case '!': // bang
            //   mParser_CellChange = morkChange_kSet;
            //  break;
              
            default:
              ev->NewWarning("unexpected byte in row");
              break;
          } // switch
        } // while
        
        if ( ev->Good() )
        {
          if ( (c = this->NextChar(ev)) == '!' )
            this->ReadRowPos(ev);
          else if ( c != EOF && ev->Good() )
            mParser_Stream->Ungetc(c);
        }
        
        // this->EndSpanOnThisByte(ev, &mParser_RowSpan);
        mParser_InRow = morkBool_kFalse;
        this->OnRowEnd(ev, mParser_RowSpan);

      } // if ReadMid
    } // if '['
    
    else // c != '['
    {
      morkStream* s = mParser_Stream;
      s->Ungetc(c);
      if ( this->ReadMid(ev, &mParser_RowMid) )
      {
        mParser_InRow = morkBool_kTrue;
        this->OnNewRow(ev, *mParser_RowSpan.AsPlace(),
          mParser_RowMid, cutAllRowCols);

        mParser_Change = mParser_RowChange = morkChange_kNil;
        
        if ( ev->Good() )
        {
          if ( (c = this->NextChar(ev)) == '!' )
            this->ReadRowPos(ev);
          else if ( c != EOF && ev->Good() )
            s->Ungetc(c);
        }

        // this->EndSpanOnThisByte(ev, &mParser_RowSpan);
        mParser_InRow = morkBool_kFalse;
        this->OnRowEnd(ev, mParser_RowSpan);
      }
    }
  }
  
  if ( ev->Bad() )
    mParser_State = morkParser_kBrokenState;
  else if ( c == EOF )
    mParser_State = morkParser_kDoneState;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadRowPos ( morkEnv ev) [protected]

Definition at line 632 of file morkParser.cpp.

{
  int c; // next character
  mork_pos rowPos = this->ReadHex(ev, &c);
  
  if ( ev->Good() && c != EOF ) // should put back byte after hex?
    mParser_Stream->Ungetc(c);

  this->OnRowPos(ev, rowPos);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadTable ( morkEnv ev) [protected]

Definition at line 751 of file morkParser.cpp.

{
  // this->StartSpanOnLastByte(ev, &mParser_TableSpan);

  if ( mParser_Change )
    mParser_TableChange = mParser_Change;

  mork_bool cutAllTableRows = morkBool_kFalse;
  
  int c = this->NextChar(ev);
  if ( c == '-' )
    cutAllTableRows = morkBool_kTrue;
  else if ( ev->Good() && c != EOF )
    mParser_Stream->Ungetc(c);
  
  if ( ev->Good() && this->ReadMid(ev, &mParser_TableMid) )
  {
    mParser_InTable = morkBool_kTrue;
    this->OnNewTable(ev, *mParser_TableSpan.AsPlace(),  
      mParser_TableMid, cutAllTableRows);

    mParser_Change = mParser_TableChange = morkChange_kNil;

    while ( (c = this->NextChar(ev)) != EOF && ev->Good() && c != '}' )
    {
      if ( morkCh_IsHex(c) )
      {
        this->ReadRow(ev, c);
      }
      else
      {
        switch ( c )
        {
          case '[': // row
            this->ReadRow(ev, '[');
            break;
            
          case '{': // meta
            this->ReadMeta(ev, '}');
            break;
          
          // case '+': // plus
          //   mParser_RowChange = morkChange_kAdd;
          //   break;
            
          case '-': // minus
            // mParser_RowChange = morkChange_kCut;
            this->OnMinusRow(ev);
            break;
            
          // case '!': // bang
          //   mParser_RowChange = morkChange_kSet;
          //   break;
            
          default:
            ev->NewWarning("unexpected byte in table");
            break;
        }
      }
    }

    // this->EndSpanOnThisByte(ev, &mParser_TableSpan);
    mParser_InTable = morkBool_kFalse;
    this->OnTableEnd(ev, mParser_TableSpan);

    if ( ev->Bad() )
      mParser_State = morkParser_kBrokenState;
    else if ( c == EOF )
      mParser_State = morkParser_kDoneState;
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::ReadTableMeta ( morkEnv ev) [protected]
morkBuf * morkParser::ReadValue ( morkEnv ev) [protected]

Definition at line 891 of file morkParser.cpp.

{
  morkBuf* outBuf = 0;

  morkCoil* coil = &mParser_ValueCoil;
  coil->ClearBufFill();

  morkSpool* spool = &mParser_ValueSpool;
  spool->Seek(ev, /*pos*/ 0);
  
  if ( ev->Good() )
  {
    morkStream* s = mParser_Stream;
    register int c;
    while ( (c = s->Getc(ev)) != EOF && c != ')' && ev->Good() )
    {
      if ( c == '\\' ) // next char is escaped by '\'? 
      {
        if ( (c = s->Getc(ev)) == 0xA || c == 0xD ) // linebreak after \?
        {
          c = this->eat_line_break(ev, c);
          if ( c == ')' || c == '\\' || c == '$' )
          {
            s->Ungetc(c); // just let while loop test read this again
            continue; // goto next iteration of while loop
          }
        }
        if ( c == EOF || ev->Bad() )
          break; // end while loop
      }
      else if ( c == '$' ) // "$" escapes next two hex digits?
      {
        if ( (c = s->Getc(ev)) != EOF && ev->Good() )
        {
          mork_ch first = (mork_ch) c; // first hex digit
          if ( (c = s->Getc(ev)) != EOF && ev->Good() )
          {
            mork_ch second = (mork_ch) c; // second hex digit
            c = ev->HexToByte(first, second);
          }
          else
            break; // end while loop
        }
        else
          break; // end while loop
      }
      spool->Putc(ev, c);
    }
      
    if ( ev->Good() )
    {
      if ( c != EOF )
        spool->FlushSink(ev); // update coil->mBuf_Fill
      else
        this->UnexpectedEofError(ev);
        
      if ( ev->Good() )
        outBuf = coil;
    }
  }
  return outBuf; 
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkNode::RefsOverflowWarning ( morkEnv ev) const [inherited]

Definition at line 360 of file morkNode.cpp.

{
  ev->NewWarning("mNode_Refs overflow");
}

Here is the caller graph for this function:

void morkNode::RefsUnderflowWarning ( morkEnv ev) const [inherited]

Definition at line 372 of file morkNode.cpp.

{
  ev->NewWarning("mNode_Refs underflow");
}

Here is the caller graph for this function:

void morkNode::RefsUnderUsesWarning ( morkEnv ev) const [inherited]

Definition at line 330 of file morkNode.cpp.

{
  ev->NewError("mNode_Refs < mNode_Uses");
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkNode::SetAsleep ( ) [inline, inherited]

Definition at line 138 of file morkNode.h.

void morkNode::SetFrozen ( ) [inline, inherited]

Definition at line 136 of file morkNode.h.

void morkParser::SetHerePos ( mork_pos  inPos) [inline, private]

Definition at line 324 of file morkParser.h.

Here is the caller graph for this function:

void morkNode::SetMutable ( ) [inline, inherited]

Definition at line 137 of file morkNode.h.

void morkNode::SetNodeClean ( ) [inline, inherited]

Definition at line 144 of file morkNode.h.

Here is the caller graph for this function:

void morkNode::SetNodeDirty ( ) [inline, inherited]

Definition at line 145 of file morkNode.h.

Here is the caller graph for this function:

void morkNode::SlotStrongNode ( morkNode me,
morkEnv ev,
morkNode **  ioSlot 
) [static, inherited]

Definition at line 466 of file morkNode.cpp.

{
  morkNode* node = *ioSlot;
  if ( me != node )
  {
    if ( node )
    {
      // what if this nulls out the ev and causes asserts?
      // can we move this after the CutStrongRef()?
      *ioSlot = 0;
      node->CutStrongRef(ev);
    }
    if ( me && me->AddStrongRef(ev) )
      *ioSlot = me;
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void morkParser::SlotStrongParser ( morkParser me,
morkEnv ev,
morkParser **  ioSlot 
) [inline, static]

Definition at line 557 of file morkParser.h.

  { morkNode::SlotStrongNode((morkNode*) me, ev, (morkNode**) ioSlot); }

Here is the call graph for this function:

void morkNode::SlotWeakNode ( morkNode me,
morkEnv ev,
morkNode **  ioSlot 
) [static, inherited]

Definition at line 489 of file morkNode.cpp.

{
  morkNode* node = *ioSlot;
  if ( me != node )
  {
    if ( node )
    {
      *ioSlot = 0;
      node->CutWeakRef(ev);
    }
    if ( me && me->AddWeakRef(ev) )
      *ioSlot = me;
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void morkParser::SlotWeakParser ( morkParser me,
morkEnv ev,
morkParser **  ioSlot 
) [inline, static]

Definition at line 553 of file morkParser.h.

  { morkNode::SlotWeakNode((morkNode*) me, ev, (morkNode**) ioSlot); }

Here is the call graph for this function:

void morkParser::StartParse ( morkEnv ev) [protected]
void morkParser::StartSpanOnLastByte ( morkEnv ev,
morkSpan ioSpan 
) [protected]

Definition at line 1387 of file morkParser.cpp.

{
  mork_pos here;
  nsIMdbEnv *ev = mev->AsMdbEnv();
  nsresult rv = mParser_Stream->Tell(ev, &here);
  if ( NS_SUCCEEDED(rv) && mev->Good() )
  {
    if ( here > 0 )
      --here;
    else
      here = 0;

    this->SetHerePos(here);
    ioSpan->SetStartWithEnd(mParser_PortSpan);
    ioSpan->SetEndWithEnd(mParser_PortSpan);
  }
}

Here is the call graph for this function:

void morkParser::StartSpanOnThisByte ( morkEnv ev,
morkSpan ioSpan 
) [protected]

Definition at line 1405 of file morkParser.cpp.

{
  mork_pos here;
  nsIMdbEnv *ev = mev->AsMdbEnv();
  nsresult rv = mParser_Stream->Tell(ev, &here);
  if ( NS_SUCCEEDED(rv) && mev->Good() )
  {
    this->SetHerePos(here);
    ioSpan->SetStartWithEnd(mParser_PortSpan);
    ioSpan->SetEndWithEnd(mParser_PortSpan);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkParser::StopParse ( morkEnv ev) [protected]
mork_uses morkNode::StrongRefsOnly ( ) const [inline, inherited]

Definition at line 219 of file morkNode.h.

{ return mNode_Uses; }

Here is the caller graph for this function:

Definition at line 1126 of file morkParser.cpp.

{
  ev->NewWarning("unexpected byte in meta");
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 885 of file morkParser.cpp.

{
  ev->NewWarning("unexpected eof");
}

Here is the call graph for this function:

Here is the caller graph for this function:

void morkNode::UsesOverflowWarning ( morkEnv ev) const [inherited]

Definition at line 366 of file morkNode.cpp.

{
  ev->NewWarning("mNode_Uses overflow");
}
void morkNode::UsesUnderflowWarning ( morkEnv ev) const [inherited]

Definition at line 378 of file morkNode.cpp.

{
  ev->NewWarning("mNode_Uses underflow");
}

Here is the caller graph for this function:

mork_refs morkNode::WeakRefsOnly ( ) const [inline, inherited]

Definition at line 220 of file morkNode.h.

{ return (mork_refs) ( mNode_Refs - mNode_Uses ); }

Here is the caller graph for this function:

void morkNode::ZapOld ( morkEnv ev,
nsIMdbHeap ioHeap 
) [inherited]

Definition at line 193 of file morkNode.cpp.

{
  if ( this )
  {
    if ( this->IsNode() )
    {
      mork_usage usage = mNode_Usage; // mNode_Usage before ~morkNode
      this->morkNode::~morkNode(); // first call polymorphic destructor
      if ( ioHeap ) // was this node heap allocated?
        ioHeap->Free(ev->AsMdbEnv(), this);
      else if ( usage == morkUsage_kPool ) // mNode_Usage before ~morkNode
      {
        morkHandle* h = (morkHandle*) this;
        if ( h->IsHandle() && h->GoodHandleTag() )
        {
          if ( h->mHandle_Face )
          {
            if (ev->mEnv_HandlePool)
              ev->mEnv_HandlePool->ZapHandle(ev, h->mHandle_Face);
            else if (h->mHandle_Env && h->mHandle_Env->mEnv_HandlePool)
              h->mHandle_Env->mEnv_HandlePool->ZapHandle(ev, h->mHandle_Face);
          }
          else
            ev->NilPointerError();
        }
      }
    }
    else
      this->NonNodeError(ev);
  }
  else
    ev->NilPointerError();
}

Here is the call graph for this function:

Here is the caller graph for this function:


Friends And Related Function Documentation

friend class morkHandleFrame [friend, inherited]

Reimplemented in morkHandle.

Definition at line 131 of file morkNode.h.


Member Data Documentation

Definition at line 122 of file morkNode.h.

Definition at line 119 of file morkNode.h.

Definition at line 120 of file morkNode.h.

Definition at line 117 of file morkNode.h.

Definition at line 125 of file morkNode.h.

Definition at line 124 of file morkNode.h.

Definition at line 128 of file morkNode.h.

Definition at line 123 of file morkNode.h.

Definition at line 127 of file morkNode.h.

Definition at line 311 of file morkParser.h.

Definition at line 278 of file morkParser.h.

Definition at line 279 of file morkParser.h.

Definition at line 265 of file morkParser.h.

Definition at line 315 of file morkParser.h.

Definition at line 283 of file morkParser.h.

Definition at line 294 of file morkParser.h.

Definition at line 316 of file morkParser.h.

Definition at line 299 of file morkParser.h.

Definition at line 310 of file morkParser.h.

Definition at line 286 of file morkParser.h.

Definition at line 261 of file morkParser.h.

Definition at line 266 of file morkParser.h.

Definition at line 309 of file morkParser.h.

Definition at line 252 of file morkParser.h.

Definition at line 270 of file morkParser.h.

Definition at line 269 of file morkParser.h.

Definition at line 276 of file morkParser.h.

Definition at line 271 of file morkParser.h.

Definition at line 268 of file morkParser.h.

Definition at line 273 of file morkParser.h.

Definition at line 274 of file morkParser.h.

Definition at line 275 of file morkParser.h.

Definition at line 284 of file morkParser.h.

Definition at line 285 of file morkParser.h.

Definition at line 312 of file morkParser.h.

Definition at line 288 of file morkParser.h.

Definition at line 303 of file morkParser.h.

Definition at line 256 of file morkParser.h.

Definition at line 306 of file morkParser.h.

Definition at line 280 of file morkParser.h.

Definition at line 264 of file morkParser.h.

Definition at line 314 of file morkParser.h.

Definition at line 292 of file morkParser.h.

Definition at line 297 of file morkParser.h.

Definition at line 317 of file morkParser.h.

Definition at line 258 of file morkParser.h.

Definition at line 253 of file morkParser.h.

Definition at line 295 of file morkParser.h.

Definition at line 300 of file morkParser.h.

Definition at line 281 of file morkParser.h.

Definition at line 263 of file morkParser.h.

Definition at line 313 of file morkParser.h.

Definition at line 255 of file morkParser.h.

Definition at line 293 of file morkParser.h.

Definition at line 298 of file morkParser.h.


The documentation for this class was generated from the following files: