本文整理汇总了C++中TiValue类的典型用法代码示例。如果您正苦于以下问题:C++ TiValue类的具体用法?C++ TiValue怎么用?C++ TiValue使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TiValue类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: numberProtoFuncToPrecision
// toPrecision converts a number to a string, takeing an argument specifying a
// number of significant figures to round the significand to. For positive
// exponent, all values that can be represented using a decimal fraction will
// be, e.g. when rounding to 3 s.f. any value up to 999 will be formated as a
// decimal, whilst 1000 is converted to the exponential representation 1.00e+3.
// For negative exponents values >= 1e-6 are formated as decimal fractions,
// with smaller values converted to exponential representation.
EncodedTiValue JSC_HOST_CALL numberProtoFuncToPrecision(TiExcState* exec)
{
// Get x (the double value of this, which should be a Number).
TiValue thisValue = exec->hostThisValue();
TiValue v = thisValue.getJSNumber();
if (!v)
return throwVMTypeError(exec);
double x = v.uncheckedGetNumber();
// Get the argument.
int significantFigures;
bool isUndefined;
if (!getIntegerArgumentInRange(exec, 1, 21, significantFigures, isUndefined))
return throwVMError(exec, createRangeError(exec, "toPrecision() argument must be between 1 and 21"));
// To precision called with no argument is treated as ToString.
if (isUndefined)
return TiValue::encode(jsString(exec, UString::number(x)));
// Handle NaN and Infinity.
if (isnan(x) || isinf(x))
return TiValue::encode(jsString(exec, UString::number(x)));
// Convert to decimal with rounding.
DecimalNumber number(x, RoundingSignificantFigures, significantFigures);
// If number is in the range 1e-6 <= x < pow(10, significantFigures) then format
// as decimal. Otherwise, format the number as an exponential. Decimal format
// demands a minimum of (exponent + 1) digits to represent a number, for example
// 1234 (1.234e+3) requires 4 digits. (See ECMA-262 15.7.4.7.10.c)
NumberToStringBuffer buffer;
unsigned length = number.exponent() >= -6 && number.exponent() < significantFigures
? number.toStringDecimal(buffer, WTI::NumberToStringBufferLength)
: number.toStringExponential(buffer, WTI::NumberToStringBufferLength);
return TiValue::encode(jsString(exec, UString(buffer, length)));
}
开发者ID:AngelkPetkov,项目名称:tijscore,代码行数:42,代码来源:NumberPrototype.cpp
示例2: numberProtoFuncToFixed
// toFixed converts a number to a string, always formatting as an a decimal fraction.
// This method takes an argument specifying a number of decimal places to round the
// significand to. However when converting large values (1e+21 and above) this
// method will instead fallback to calling ToString.
EncodedTiValue JSC_HOST_CALL numberProtoFuncToFixed(TiExcState* exec)
{
// Get x (the double value of this, which should be a Number).
TiValue thisValue = exec->hostThisValue();
TiValue v = thisValue.getJSNumber();
if (!v)
return throwVMTypeError(exec);
double x = v.uncheckedGetNumber();
// Get the argument.
int decimalPlaces;
bool isUndefined; // This is ignored; undefined treated as 0.
if (!getIntegerArgumentInRange(exec, 0, 20, decimalPlaces, isUndefined))
return throwVMError(exec, createRangeError(exec, "toFixed() argument must be between 0 and 20"));
// 15.7.4.5.7 states "If x >= 10^21, then let m = ToString(x)"
// This also covers Ininity, and structure the check so that NaN
// values are also handled by numberToString
if (!(fabs(x) < 1e+21))
return TiValue::encode(jsString(exec, UString::number(x)));
// The check above will return false for NaN or Infinity, these will be
// handled by numberToString.
ASSERT(!isnan(x) && !isinf(x));
// Convert to decimal with rounding, and format as decimal.
NumberToStringBuffer buffer;
unsigned length = DecimalNumber(x, RoundingDecimalPlaces, decimalPlaces).toStringDecimal(buffer, WTI::NumberToStringBufferLength);
return TiValue::encode(jsString(exec, UString(buffer, length)));
}
开发者ID:AngelkPetkov,项目名称:tijscore,代码行数:34,代码来源:NumberPrototype.cpp
示例3: getDirect
void TiObject::defineSetter(TiExcState* exec, const Identifier& propertyName, TiObject* setterFunction, unsigned attributes)
{
TiValue object = getDirect(propertyName);
if (object && object.isGetterSetter()) {
ASSERT(m_structure->hasGetterSetterProperties());
asGetterSetter(object)->setSetter(setterFunction);
return;
}
PutPropertySlot slot;
GetterSetter* getterSetter = new (exec) GetterSetter(exec);
putDirectInternal(exec->globalData(), propertyName, getterSetter, attributes | Setter, true, slot);
// putDirect will change our Structure if we add a new property. For
// getters and setters, though, we also need to change our Structure
// if we override an existing non-getter or non-setter.
if (slot.type() != PutPropertySlot::NewProperty) {
if (!m_structure->isDictionary()) {
RefPtr<Structure> structure = Structure::getterSetterTransition(m_structure);
setStructure(structure.release());
}
}
m_structure->setHasGetterSetterProperties(true);
getterSetter->setSetter(setterFunction);
}
开发者ID:rseagraves,项目名称:tijscore,代码行数:26,代码来源:TiObject.cpp
示例4: functionProtoFuncApply
EncodedTiValue JSC_HOST_CALL functionProtoFuncApply(TiExcState* exec)
{
TiValue thisValue = exec->hostThisValue();
CallData callData;
CallType callType = getCallData(thisValue, callData);
if (callType == CallTypeNone)
return throwVMTypeError(exec);
TiValue array = exec->argument(1);
MarkedArgumentBuffer applyArgs;
if (!array.isUndefinedOrNull()) {
if (!array.isObject())
return throwVMTypeError(exec);
if (asObject(array)->classInfo() == &Arguments::s_info)
asArguments(array)->fillArgList(exec, applyArgs);
else if (isTiArray(&exec->globalData(), array))
asArray(array)->fillArgList(exec, applyArgs);
else if (asObject(array)->inherits(&TiArray::s_info)) {
unsigned length = asArray(array)->get(exec, exec->propertyNames().length).toUInt32(exec);
for (unsigned i = 0; i < length; ++i)
applyArgs.append(asArray(array)->get(exec, i));
} else
return throwVMTypeError(exec);
}
return TiValue::encode(call(exec, thisValue, callType, callData, exec->argument(0), applyArgs));
}
开发者ID:AngelkPetkov,项目名称:tijscore,代码行数:28,代码来源:FunctionPrototype.cpp
示例5: toPrimitive
double TiObject::toNumber(TiExcState* exec) const
{
TiValue primitive = toPrimitive(exec, PreferNumber);
if (exec->hadException()) // should be picked up soon in Nodes.cpp
return 0.0;
return primitive.toNumber(exec);
}
开发者ID:rseagraves,项目名称:tijscore,代码行数:7,代码来源:TiObject.cpp
示例6: toThisNumber
static ALWAYS_INLINE bool toThisNumber(TiValue thisValue, double &x)
{
TiValue v = thisValue.getJSNumber();
if (UNLIKELY(!v))
return false;
x = v.uncheckedGetNumber();
return true;
}
开发者ID:AngelkPetkov,项目名称:tijscore,代码行数:8,代码来源:NumberPrototype.cpp
示例7: TiValueIsBoolean
bool TiValueIsBoolean(TiContextRef ctx, TiValueRef value)
{
TiExcState* exec = toJS(ctx);
APIEntryShim entryShim(exec);
TiValue jsValue = toJS(exec, value);
return jsValue.isBoolean();
}
开发者ID:adelyte,项目名称:tijscore,代码行数:8,代码来源:TiValueRef.cpp
示例8: TiValueIsDate
bool TiValueIsDate(TiContextRef ctx, TiValueRef value)
{
TiExcState* exec = toJS(ctx);
exec->globalData().heap.registerThread();
TiLock lock(exec);
TiValue jsValue = toJS(exec, value);
return jsValue.inherits(&DateInstance::info);
}
开发者ID:adelyte,项目名称:tijscore,代码行数:9,代码来源:TiValueRef.cpp
示例9: numberProtoFuncValueOf
EncodedTiValue JSC_HOST_CALL numberProtoFuncValueOf(TiExcState* exec)
{
TiValue thisValue = exec->hostThisValue();
TiValue v = thisValue.getJSNumber();
if (!v)
return throwVMTypeError(exec);
return TiValue::encode(v);
}
开发者ID:AngelkPetkov,项目名称:tijscore,代码行数:9,代码来源:NumberPrototype.cpp
示例10: booleanProtoFuncValueOf
TiValue JSC_HOST_CALL booleanProtoFuncValueOf(TiExcState* exec, TiObject*, TiValue thisValue, const ArgList&)
{
if (thisValue.isBoolean())
return thisValue;
if (!thisValue.inherits(&BooleanObject::info))
return throwError(exec, TypeError);
return asBooleanObject(thisValue)->internalValue();
}
开发者ID:omorandi,项目名称:tijscore,代码行数:10,代码来源:BooleanPrototype.cpp
示例11: numberProtoFuncToLocaleString
EncodedTiValue JSC_HOST_CALL numberProtoFuncToLocaleString(TiExcState* exec)
{
TiValue thisValue = exec->hostThisValue();
// FIXME: Not implemented yet.
TiValue v = thisValue.getJSNumber();
if (!v)
return throwVMTypeError(exec);
return TiValue::encode(jsString(exec, v.toString(exec)));
}
开发者ID:AngelkPetkov,项目名称:tijscore,代码行数:11,代码来源:NumberPrototype.cpp
示例12: while
bool TiObject::getPropertyDescriptor(TiExcState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
{
TiObject* object = this;
while (true) {
if (object->getOwnPropertyDescriptor(exec, propertyName, descriptor))
return true;
TiValue prototype = object->prototype();
if (!prototype.isObject())
return false;
object = asObject(prototype);
}
}
开发者ID:rseagraves,项目名称:tijscore,代码行数:12,代码来源:TiObject.cpp
示例13: TiValueIsObjectOfClass
bool TiValueIsObjectOfClass(TiContextRef ctx, TiValueRef value, TiClassRef jsClass)
{
TiExcState* exec = toJS(ctx);
APIEntryShim entryShim(exec);
TiValue jsValue = toJS(exec, value);
if (TiObject* o = jsValue.getObject()) {
if (o->inherits(&TiCallbackObject<TiGlobalObject>::info))
return static_cast<TiCallbackObject<TiGlobalObject>*>(o)->inherits(jsClass);
else if (o->inherits(&TiCallbackObject<TiObject>::info))
return static_cast<TiCallbackObject<TiObject>*>(o)->inherits(jsClass);
}
return false;
}
开发者ID:adelyte,项目名称:tijscore,代码行数:15,代码来源:TiValueRef.cpp
示例14: ASSERT
TiObject* TiFunction::construct(TiExcState* exec, const ArgList& args)
{
ASSERT(!isHostFunction());
Structure* structure;
TiValue prototype = get(exec, exec->propertyNames().prototype);
if (prototype.isObject())
structure = asObject(prototype)->inheritorID();
else
structure = exec->lexicalGlobalObject()->emptyObjectStructure();
TiObject* thisObj = new (exec) TiObject(structure);
TiValue result = exec->interpreter()->execute(jsExecutable(), exec, this, thisObj, args, scopeChain().node(), exec->exceptionSlot());
if (exec->hadException() || !result.isObject())
return thisObj;
return asObject(result);
}
开发者ID:adelyte,项目名称:tijscore,代码行数:16,代码来源:TiFunction.cpp
示例15: TiValueToStringCopy
TiStringRef TiValueToStringCopy(TiContextRef ctx, TiValueRef value, TiValueRef* exception)
{
TiExcState* exec = toJS(ctx);
APIEntryShim entryShim(exec);
TiValue jsValue = toJS(exec, value);
RefPtr<OpaqueTiString> stringRef(OpaqueTiString::create(jsValue.toString(exec)));
if (exec->hadException()) {
if (exception)
*exception = toRef(exec, exec->exception());
exec->clearException();
stringRef.clear();
}
return stringRef.release().releaseRef();
}
开发者ID:adelyte,项目名称:tijscore,代码行数:16,代码来源:TiValueRef.cpp
示例16: TiValueToNumber
double TiValueToNumber(TiContextRef ctx, TiValueRef value, TiValueRef* exception)
{
TiExcState* exec = toJS(ctx);
APIEntryShim entryShim(exec);
TiValue jsValue = toJS(exec, value);
double number = jsValue.toNumber(exec);
if (exec->hadException()) {
if (exception)
*exception = toRef(exec, exec->exception());
exec->clearException();
number = NaN;
}
return number;
}
开发者ID:adelyte,项目名称:tijscore,代码行数:16,代码来源:TiValueRef.cpp
示例17: TiValueToObject
TiObjectRef TiValueToObject(TiContextRef ctx, TiValueRef value, TiValueRef* exception)
{
TiExcState* exec = toJS(ctx);
APIEntryShim entryShim(exec);
TiValue jsValue = toJS(exec, value);
TiObjectRef objectRef = toRef(jsValue.toObject(exec));
if (exec->hadException()) {
if (exception)
*exception = toRef(exec, exec->exception());
exec->clearException();
objectRef = 0;
}
return objectRef;
}
开发者ID:adelyte,项目名称:tijscore,代码行数:16,代码来源:TiValueRef.cpp
示例18: hasInstance
bool TiObject::hasInstance(TiExcState* exec, TiValue value, TiValue proto)
{
if (!value.isObject())
return false;
if (!proto.isObject()) {
throwError(exec, TypeError, "instanceof called on an object with an invalid prototype property.");
return false;
}
TiObject* object = asObject(value);
while ((object = object->prototype().getObject())) {
if (proto == object)
return true;
}
return false;
}
开发者ID:rseagraves,项目名称:tijscore,代码行数:17,代码来源:TiObject.cpp
示例19: objectProtoFuncDefineSetter
TiValue JSC_HOST_CALL objectProtoFuncDefineSetter(TiExcState* exec, TiObject*, TiValue thisValue, const ArgList& args)
{
CallData callData;
if (args.at(1).getCallData(callData) == CallTypeNone)
return throwError(exec, SyntaxError, "invalid setter usage");
thisValue.toThisObject(exec)->defineSetter(exec, Identifier(exec, args.at(0).toString(exec)), asObject(args.at(1)));
return jsUndefined();
}
开发者ID:rseagraves,项目名称:tijscore,代码行数:8,代码来源:ObjectPrototype.cpp
示例20: objectProtoFuncIsPrototypeOf
TiValue JSC_HOST_CALL objectProtoFuncIsPrototypeOf(TiExcState* exec, TiObject*, TiValue thisValue, const ArgList& args)
{
TiObject* thisObj = thisValue.toThisObject(exec);
if (!args.at(0).isObject())
return jsBoolean(false);
TiValue v = asObject(args.at(0))->prototype();
while (true) {
if (!v.isObject())
return jsBoolean(false);
if (v == thisObj)
return jsBoolean(true);
v = asObject(v)->prototype();
}
}
开发者ID:rseagraves,项目名称:tijscore,代码行数:17,代码来源:ObjectPrototype.cpp
注:本文中的TiValue类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论