using System; using Jint.Native; using Jint.Runtime.Environments; namespace Jint.Runtime.References { /// /// Represents the Reference Specification Type /// http://www.ecma-international.org/ecma-262/5.1/#sec-8.7 /// public sealed class Reference { private JsValue _baseValue; private string _name; private bool _strict; public Reference(JsValue baseValue, string name, bool strict) { _baseValue = baseValue; _name = name; } public JsValue GetBase() { return _baseValue; } public string GetReferencedName() { return _name; } public bool IsStrict() { return _strict; } public bool HasPrimitiveBase() { return _baseValue.IsPrimitive(); } public bool IsUnresolvableReference() { return _baseValue.IsUndefined(); } public bool IsPropertyReference() { // http://www.ecma-international.org/ecma-262/5.1/#sec-8.7 return HasPrimitiveBase() || (_baseValue.IsObject() && !(_baseValue is EnvironmentRecord)); } internal Reference Reassign(JsValue baseValue, string name, bool strict) { _baseValue = baseValue; _name = name; _strict = strict; return this; } } }