예제 #1
0
bool    CsHasMember(VM *c, value obj, value tag)
{
  value t = tag;
  if(!CsSymbolP(t))
  {
    t = CsToString(c,t);
    t = CsIntern(c,t);
  }
  return CsGetProperty(c,obj,t,&tag);
}
예제 #2
0
파일: cs_math.cpp 프로젝트: ikvm/tiscript
bool GetMathProperty(VM *c,value& obj,value tag,value *pValue)
{
    //value p;
    if( CsSymbolP(tag) )
    {
      if( tag == sym_PI )     { *pValue = CsMakeFloat(c,M_PI); return true; }
      if( tag == sym_E )      { *pValue = CsMakeFloat(c,M_E); return true; }
      if( tag == sym_LN10 )   { *pValue = CsMakeFloat(c,M_LN10); return true; }
      if( tag == sym_LN2 )    { *pValue = CsMakeFloat(c,M_LN2); return true; }
      if( tag == sym_LOG10E ) { *pValue = CsMakeFloat(c,M_LOG10E); return true; }
      if( tag == sym_LOG2E )  { *pValue = CsMakeFloat(c,M_LOG2E); return true; }
      if( tag == sym_SQRT1_2 ){ *pValue = CsMakeFloat(c,M_SQRT1_2); return true; }
      if( tag == sym_SQRT2 )  { *pValue = CsMakeFloat(c,M_SQRT2); return true; }
    }
    return CsGetObjectProperty(c,obj,tag,pValue);
}
예제 #3
0
파일: cs_math.cpp 프로젝트: ikvm/tiscript
bool SetMathProperty(VM *c,value obj,value tag,value v)
{
    if( CsSymbolP(tag) )
    {
      if(( tag == sym_PI ) 
      ||( tag == sym_E ) 
      ||( tag == sym_LN10 )
      ||( tag == sym_LN2 ) 
      ||( tag == sym_LOG10E )
      ||( tag == sym_LOG2E ) 
      ||( tag == sym_SQRT1_2 ) 
      ||( tag == sym_SQRT2 )) 
      {
        CsThrowKnownError(c,CsErrReadOnlyProperty,tag);
        return true;
      }
    }
   return CsSetObjectProperty(c,obj,tag,v);
}
void write_ctx::scanValue(value v)
{
    if (v == UNDEFINED_VALUE)
        return;
    else if (v == NULL_VALUE)
        return;
    else if (v == TRUE_VALUE)
        return;
    else if (v == FALSE_VALUE)
        return;
    else if (CsCompiledCodeP(v))
      scanTuple(v);
    else if (CsTupleP(v))
      scanTuple(v);
    else if (CsVectorP(v))
    {
      uint n = 0;
      if(!object2id.find(v,n))
      {
        n = object2id.size();
        object2id[v] = n;
        scanVectorValue(v);
      }
    }
    else if (CsObjectP(v))
    {
      uint n = 0;
      if(!object2id.find(v,n))
      {
        uint n = object2id.size();
        object2id[v] = n;
        scanObjectValue(v);
      }
    }
    else if (CsSymbolP(v))
    {
      scanSymbol(v);
    }
}
/* writeValue - write a value */
bool write_ctx::writeValue(value v)
{
    if (v == UNDEFINED_VALUE)
        return s->put(CsFaslTagUndefined);
    else if (v == NULL_VALUE)
        return s->put(CsFaslTagNull);
    else if (v == TRUE_VALUE)
        return s->put(CsFaslTagTrue);
    else if (v == FALSE_VALUE)
        return s->put(CsFaslTagFalse);
    else if (CsCompiledCodeP(v))
        return writeCodeValue(v);
    else if (CsVectorP(v))
    {
        uint n = 0;
        if(object2id.find(v,n))
          return writeProxyValue(n);
        else
        {
          n = object2id.size();
          object2id[v] = n;
          return writeVectorValue(v);
        }
    }
    else if (CsObjectP(v))
    {
        uint n = 0;
        if(object2id.find(v,n))
          return writeProxyValue(n);
        else
        {
          n = object2id.size();
          object2id[v] = n;
          return writeObjectValue(v);
        }
    }
    else if (CsSymbolP(v))
        return writeSymbolValue(v);
    else if (CsStringP(v))
        return writeStringValue(v);
    else if (CsIntegerP(v))
        return writeIntegerValue(v);
    else if (CsFloatP(v))
        return writeFloatValue(v);
    else if (CsTupleP(v))
        return writeTupleValue(v);
    else if (CsByteVectorP(v))
        return writeByteVectorValue(v);
    else if (CsDateP(c,v))
        return writeDateValue(v);
    else if (CsColorP(v))
        return writeColorValue(v);
    else if (CsLengthP(v))
        return writeLengthValue(v);
    else if (CsAngleP(v))
        return writeAngleValue(v);
    else if (CsDurationP(v))
        return writeDurationValue(v);
    else {
#ifdef _DEBUG
        dispatch* pd = CsGetDispatch(v);
#endif
        assert(false);
        return false;
    }
}