Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

SchExpressionContext Class Reference

#include <schcont.hpp>

Inheritance diagram for SchExpressionContext:

Inheritance graph
[legend]
Collaboration diagram for SchExpressionContext:

Collaboration graph
[legend]
List of all members.

Detailed Description

Lexical context.

The class encapsulates Scheme lexical context.

Note:
In the InteLib implementation of Scheme, the 'outermost' context is represented by values stored within the symbols' objects, just like 'dynamic' values in Lisp. This accelerates access to library functions and therefore increases the overall execution speed. So, the SchExpressionContext objects only represent local contexts such as contexts created by functions or by LET.

Definition at line 58 of file schcont.hpp.

Public Member Functions

 SchExpressionContext ()
 The default constructor creates an empty context.
 SchExpressionContext (SchContextRef a_prev)
 Creates one context ('inner one') atop of another ('outer').
void AddBinding (const SchExpressionSymbol *symb, const SReference &val)
 Bind the symbol to the value.
SReferenceGetBinding (const SchExpressionSymbol *symb) const
 Lookup for a binding.
SReferenceProvideBinding (const SchExpressionSymbol *symb)
 Find or create a binding.
SReference GetAllSymbols () const
 Make a list of all bound symbols.
virtual class SString TextRepresentation () const
 Text representation of the S-expression.
const IntelibTypeIdTermType () const
 Actual S-expression type.
bool IsChangeable () const
 Can it be changed during the lifetime of the object?
virtual SExpressionClone () const
 Clone a changeable object.
virtual bool SpecificEql (const SExpression *) const
 Are the two objects EQL (while not EQ).

Static Public Attributes

static IntelibTypeId TypeId
 The type identifier.

Protected Member Functions

 ~SchExpressionContext ()
bool CanDie ()
 Is it OK to delete the object now?


Constructor & Destructor Documentation

SchExpressionContext::SchExpressionContext  ) 
 

The default constructor creates an empty context.

Definition at line 28 of file schcont.cpp.

SchExpressionContext::SchExpressionContext SchContextRef  a_prev  ) 
 

Creates one context ('inner one') atop of another ('outer').

Definition at line 32 of file schcont.cpp.

SchExpressionContext::~SchExpressionContext  )  [protected]
 

Definition at line 36 of file schcont.cpp.


Member Function Documentation

void SchExpressionContext::AddBinding const SchExpressionSymbol symb,
const SReference val
 

Bind the symbol to the value.

Definition at line 39 of file schcont.cpp.

References IntelibBindTable::AddBinding().

SReference * SchExpressionContext::GetBinding const SchExpressionSymbol symb  )  const
 

Lookup for a binding.

Find the appropriate binding and return a pointer to its value-storing slot. In case no binding is found, return NULL

Definition at line 46 of file schcont.cpp.

References IntelibBindTable::GetBinding(), and GenericSReference< Tp, X_wrongtype >::GetPtr().

Referenced by ProvideBinding().

SReference * SchExpressionContext::ProvideBinding const SchExpressionSymbol symb  ) 
 

Find or create a binding.

Find the appropriate binding and return a pointer to its value-storing slot. In case no binding is found, create it and return the pointer.

Definition at line 58 of file schcont.cpp.

References IntelibBindTable::AddBinding(), and GetBinding().

SReference SchExpressionContext::GetAllSymbols  )  const
 

Make a list of all bound symbols.

Definition at line 65 of file schcont.cpp.

References IntelibBindTable::Iterator::GetNext(), GenericSReference< Tp, X_wrongtype >::GetPtr(), and PTheEmptyList.

SString SchExpressionContext::TextRepresentation  )  const [virtual]
 

Text representation of the S-expression.

Returns the text string which represents the given S-expression as for real Lisp (for example, (25 36 49))

Implements SExpression.

Definition at line 82 of file schcont.cpp.

const IntelibTypeId& SExpression::TermType  )  const [inherited]
 

Actual S-expression type.

Definition at line 195 of file sexpress.hpp.

Referenced by SReference::DynamicCastGetPtr(), SchReference::IsEql(), LReference::IsEql(), SReference::SimpleCastGetPtr(), SchReference::TextRepresentation(), and LReference::TextRepresentation().

bool SExpression::IsChangeable  )  const [inherited]
 

Can it be changed during the lifetime of the object?

Definition at line 198 of file sexpress.hpp.

References IntelibTypeId::IsChangeable().

virtual SExpression* SExpression::Clone  )  const [virtual, inherited]
 

Clone a changeable object.

The method should return the pointer created with new

Note:
It can (and should) return null pointer for non-changeables
Warning:
This method will hang your program being called for a looped data structure, including looped lists, a hash table which references a list in which it is a member, etc.

If you create a changeable S-expression, you MUST make sure this method duplicates your object in such a way that nothing is shared between the old and new objects, that is, changing the new object can not in any way change the old object.

Reimplemented in SExpressionBacklink, SExpressionCons, SExpressionHashTable, SExpressionRawBuffer, and SExpressionVector.

Definition at line 214 of file sexpress.hpp.

virtual bool SExpression::SpecificEql const SExpression  )  const [virtual, inherited]
 

Are the two objects EQL (while not EQ).

This function is overriden by those SExpressions able to be EQL while being not EQ.

Warning:
It is not demanded that this function return true if it's arguments are the same SExpression (that is, they're EQ). It is only called by the EQL predicate implementation when it has been checked that the operands are not the same object.

Reimplemented in SExpressionInt, SExpressionFloat, SExpressionChar, and SExpressionString.

Definition at line 235 of file sexpress.hpp.

Referenced by SchReference::IsEql(), and LReference::IsEql().

bool GarbageSafe::CanDie  )  [protected, inherited]
 

Is it OK to delete the object now?

Our children have no access to the private attribute RefCount and should never need it except when checking if the destruction is not an error. This solves the problem.

Definition at line 53 of file refcount.hpp.


Member Data Documentation

IntelibTypeId SchExpressionContext::TypeId [static]
 

The type identifier.

Reimplemented from SExpression.


The documentation for this class was generated from the following files:
Generated on Tue Dec 18 00:40:43 2007 for InteLib by  doxygen 1.4.1