Changeset 1832 in webkit for trunk/JavaScriptCore/kjs/value.cpp
- Timestamp:
- Aug 15, 2002, 12:51:48 PM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/value.cpp
r1825 r1832 65 65 bool ValueImp::marked() const 66 66 { 67 // simple numbers are always considered marked68 return SimpleNumber::is SimpleNumber(this) || (_flags & VI_MARKED);67 // Simple numbers are always considered marked. 68 return SimpleNumber::is(this) || (_flags & VI_MARKED); 69 69 } 70 70 71 71 void ValueImp::setGcAllowed() 72 72 { 73 //fprintf(stderr,"ValueImp::setGcAllowed %p\n",(void*)this); 73 74 // simple numbers are never seen by the collector so setting this 74 75 // flag is irrelevant 75 if (!SimpleNumber::isSimpleNumber(this)) { 76 //fprintf(stderr,"ValueImp::setGcAllowed %p\n",(void*)this); 76 if (!SimpleNumber::is(this)) 77 77 _flags |= VI_GCALLOWED; 78 }79 78 } 80 79 … … 178 177 } 179 178 180 181 // Dispatchers for virtual functions, to special-case fixnums which 182 // won't be real pointers 179 // Dispatchers for virtual functions, to special-case simple numbers which 180 // won't be real pointers. 183 181 184 182 Type ValueImp::dispatchType() const 185 183 { 186 if (SimpleNumber::is SimpleNumber(this)) {184 if (SimpleNumber::is(this)) 187 185 return NumberType; 188 } else { 189 return this->type(); 190 } 186 return type(); 191 187 } 192 188 193 189 Value ValueImp::dispatchToPrimitive(ExecState *exec, Type preferredType) const 194 190 { 195 if (SimpleNumber::isSimpleNumber(this)) { 196 return Number((NumberImp*)this); 197 } else { 198 return this->toPrimitive(exec, preferredType); 199 } 191 if (SimpleNumber::is(this)) 192 return Value(const_cast<ValueImp *>(this)); 193 return toPrimitive(exec, preferredType); 200 194 } 201 195 202 196 bool ValueImp::dispatchToBoolean(ExecState *exec) const 203 197 { 204 if (SimpleNumber::isSimpleNumber(this)) { 205 return SimpleNumber::longValue(this); 206 } else { 207 return this->toBoolean(exec); 208 } 198 if (SimpleNumber::is(this)) 199 return SimpleNumber::value(this); 200 return toBoolean(exec); 209 201 } 210 202 211 203 double ValueImp::dispatchToNumber(ExecState *exec) const 212 204 { 213 if (SimpleNumber::isSimpleNumber(this)) { 214 return SimpleNumber::longValue(this); 215 } else { 216 return this->toNumber(exec); 217 } 205 if (SimpleNumber::is(this)) 206 return SimpleNumber::value(this); 207 return toNumber(exec); 218 208 } 219 209 220 210 UString ValueImp::dispatchToString(ExecState *exec) const 221 211 { 222 if (SimpleNumber::isSimpleNumber(this)) { 223 return UString::from(SimpleNumber::longValue(this)); 224 } else { 225 return this->toString(exec); 226 } 212 if (SimpleNumber::is(this)) 213 return UString::from(SimpleNumber::value(this)); 214 return toString(exec); 227 215 } 228 216 229 217 Object ValueImp::dispatchToObject(ExecState *exec) const 230 218 { 231 if (SimpleNumber::isSimpleNumber(this)) { 232 List args; 233 args.append(Number(static_cast<NumberImp*>(const_cast<ValueImp *>(this)))); 234 return Object::dynamicCast(exec->interpreter()->builtinNumber().construct(exec,args)); 235 } else { 236 return this->toObject(exec); 237 } 219 if (SimpleNumber::is(this)) 220 return static_cast<const NumberImp *>(this)->NumberImp::toObject(exec); 221 return toObject(exec); 238 222 } 239 223 240 224 bool ValueImp::dispatchToUInt32(unsigned& result) const 241 225 { 242 if (SimpleNumber::isSimpleNumber(this)) { 243 result = SimpleNumber::longValue(this); 226 if (SimpleNumber::is(this)) { 227 long i = SimpleNumber::value(this); 228 if (i < 0) 229 return false; 230 result = (unsigned)i; 244 231 return true; 245 } else { 246 return this->toUInt32(result); 247 } 232 } 233 return toUInt32(result); 248 234 } 249 235 250 236 Value ValueImp::dispatchGetBase(ExecState *exec) const 251 237 { 252 if (SimpleNumber::isSimpleNumber(this)) { 253 Object err = Error::create(exec, ReferenceError, I18N_NOOP("Invalid reference base")); 254 exec->setException(err); 255 return err; 256 } else { 257 return this->getBase(exec); 258 } 238 if (SimpleNumber::is(this)) 239 return ValueImp::getBase(exec); 240 return getBase(exec); 259 241 } 260 242 261 243 UString ValueImp::dispatchGetPropertyName(ExecState *exec) const 262 244 { 263 if (SimpleNumber::isSimpleNumber(this)) { 264 return UString(); 265 } else { 266 return this->getPropertyName(exec); 267 } 245 if (SimpleNumber::is(this)) 246 return ValueImp::getPropertyName(exec); 247 return getPropertyName(exec); 268 248 } 269 249 270 250 void ValueImp::dispatchPutValue(ExecState *exec, const Value& w) 271 251 { 272 if (SimpleNumber::isSimpleNumber(this)) { 273 Object err = Error::create(exec,ReferenceError); 274 exec->setException(err); 275 } else { 276 return this->putValue(exec, w); 277 } 252 if (SimpleNumber::is(this)) 253 ValueImp::putValue(exec, w); 254 putValue(exec, w); 278 255 } 279 256 280 257 bool ValueImp::dispatchDeleteValue(ExecState *exec) 281 258 { 282 if (SimpleNumber::isSimpleNumber(this)) { 283 Object err = Error::create(exec,ReferenceError); 284 exec->setException(err); 285 return false; 286 } else { 287 return this->deleteValue(exec); 288 } 259 if (SimpleNumber::is(this)) 260 return ValueImp::deleteValue(exec); 261 return deleteValue(exec); 289 262 } 290 263 … … 409 382 410 383 Number::Number(int i) 411 : Value(SimpleNumber::fits InSimpleNumber(i) ? SimpleNumber::makeSimpleNumber(i) : new NumberImp(static_cast<double>(i))) { }384 : Value(SimpleNumber::fits(i) ? SimpleNumber::make(i) : new NumberImp(static_cast<double>(i))) { } 412 385 413 386 Number::Number(unsigned int u) 414 : Value(SimpleNumber::fits InSimpleNumber(u) ? SimpleNumber::makeSimpleNumber(u) : new NumberImp(static_cast<double>(u))) { }387 : Value(SimpleNumber::fits(u) ? SimpleNumber::make(u) : new NumberImp(static_cast<double>(u))) { } 415 388 416 389 Number::Number(double d) 417 : Value(SimpleNumber::fits InSimpleNumber((long)d) ? SimpleNumber::makeSimpleNumber((long)d) : new NumberImp(d)) { }390 : Value(SimpleNumber::fits(d) ? SimpleNumber::make((long)d) : new NumberImp(d)) { } 418 391 419 392 Number::Number(long int l) 420 : Value(SimpleNumber::fits InSimpleNumber(l) ? SimpleNumber::makeSimpleNumber(l) : new NumberImp(static_cast<double>(l))) { }393 : Value(SimpleNumber::fits(l) ? SimpleNumber::make(l) : new NumberImp(static_cast<double>(l))) { } 421 394 422 395 Number::Number(long unsigned int l) 423 : Value(SimpleNumber::fits InSimpleNumber(l) ? SimpleNumber::makeSimpleNumber(l) : new NumberImp(static_cast<double>(l))) { }396 : Value(SimpleNumber::fits(l) ? SimpleNumber::make(l) : new NumberImp(static_cast<double>(l))) { } 424 397 425 398 Number Number::dynamicCast(const Value &v) … … 433 406 double Number::value() const 434 407 { 435 if (SimpleNumber::isSimpleNumber(rep)) { 436 return (double)SimpleNumber::longValue(rep); 437 } else { 438 assert(rep); 439 return ((NumberImp*)rep)->value(); 440 } 408 if (SimpleNumber::is(rep)) 409 return (double)SimpleNumber::value(rep); 410 assert(rep); 411 return ((NumberImp*)rep)->value(); 441 412 } 442 413
Note:
See TracChangeset
for help on using the changeset viewer.