12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using Jint.Native.Object;
- using Jint.Runtime;
- using Jint.Runtime.Descriptors;
- namespace Jint.Native.String
- {
- public class StringInstance : ObjectInstance, IPrimitiveInstance
- {
- public StringInstance(Engine engine)
- : base(engine)
- {
- }
- public override string Class
- {
- get
- {
- return "String";
- }
- }
- Types IPrimitiveInstance.Type
- {
- get { return Types.String; }
- }
- JsValue IPrimitiveInstance.PrimitiveValue
- {
- get { return PrimitiveValue; }
- }
- public JsValue PrimitiveValue { get; set; }
- private static bool IsInt(double d)
- {
- if (d >= long.MinValue && d <= long.MaxValue)
- {
- var l = (long)d;
- return l >= int.MinValue && l <= int.MaxValue;
- }
- else
- return false;
- }
- public override PropertyDescriptor GetOwnProperty(string propertyName)
- {
- if(propertyName == "Infinity")
- return PropertyDescriptor.Undefined;
- var desc = base.GetOwnProperty(propertyName);
- if (desc != PropertyDescriptor.Undefined)
- {
- return desc;
- }
- if (propertyName != System.Math.Abs(TypeConverter.ToInteger(propertyName)).ToString())
- {
- return PropertyDescriptor.Undefined;
- }
- var str = PrimitiveValue;
- var dIndex = TypeConverter.ToInteger(propertyName);
- if(!IsInt(dIndex))
- return PropertyDescriptor.Undefined;
- var index = (int)dIndex;
- var len = str.AsString().Length;
- if (len <= index || index < 0)
- {
- return PropertyDescriptor.Undefined;
- }
- var resultStr = str.AsString()[index].ToString();
- return new PropertyDescriptor(new JsValue(resultStr), false, true, false);
- }
- }
- }
|