The Labs \ Source Viewer \ SSCLI \ Microsoft.JScript \ StringObject

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. namespace Microsoft.JScript
  16. {
  17.    
  18.     using System;
  19.    
  20.     public class StringObject : JSObject
  21.     {
  22.         internal string value;
  23.         private bool implicitWrapper;
  24.        
  25.         protected StringObject(ScriptObject prototype, string value) : base(prototype)
  26.         {
  27.             this.value = value;
  28.             this.noExpando = false;
  29.             this.implicitWrapper = false;
  30.         }
  31.        
  32.         internal StringObject(ScriptObject prototype, string value, bool implicitWrapper) : base(prototype, typeof(StringObject))
  33.         {
  34.             this.value = value;
  35.             this.noExpando = implicitWrapper;
  36.             this.implicitWrapper = implicitWrapper;
  37.         }
  38.        
  39.         internal override string GetClassName()
  40.         {
  41.             return "String";
  42.         }
  43.        
  44.         public int length {
  45.             get { return this.value.Length; }
  46.         }
  47.        
  48.         public override bool Equals(object ob)
  49.         {
  50.             if (ob is StringObject)
  51.                 ob = ((StringObject)ob).value;
  52.             return this.value.Equals(ob);
  53.         }
  54.        
  55.         internal override object GetDefaultValue(PreferredType preferred_type)
  56.         {
  57.             if (this.GetParent() is LenientStringPrototype)
  58.                 return base.GetDefaultValue(preferred_type);
  59.             if (preferred_type == PreferredType.String) {
  60.                 if (!this.noExpando) {
  61.                     object field = this.NameTable["toString"];
  62.                     if (field != null)
  63.                         return base.GetDefaultValue(preferred_type);
  64.                 }
  65.                 return this.value;
  66.             }
  67.             else if (preferred_type == PreferredType.LocaleString) {
  68.                 return base.GetDefaultValue(preferred_type);
  69.             }
  70.             else {
  71.                 if (!this.noExpando) {
  72.                     object field = this.NameTable["valueOf"];
  73.                     if (field == null && preferred_type == PreferredType.Either)
  74.                         field = this.NameTable["toString"];
  75.                     if (field != null)
  76.                         return base.GetDefaultValue(preferred_type);
  77.                 }
  78.                 return this.value;
  79.             }
  80.         }
  81.        
  82.         public override int GetHashCode()
  83.         {
  84.             return this.value.GetHashCode();
  85.         }
  86.        
  87.         public new Type GetType()
  88.         {
  89.             return this.implicitWrapper ? Typeob.String : Typeob.StringObject;
  90.         }
  91.        
  92.         internal override object GetValueAtIndex(uint index)
  93.         {
  94.             if (this.implicitWrapper && index < this.value.Length)
  95.                 return this.value[(int)index];
  96.             else
  97.                 return base.GetValueAtIndex(index);
  98.         }
  99.     }
  100. }

Developer Fusion