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); }
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); }
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; } }