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

  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.     using System.Reflection;
  20.     using System.Globalization;
  21.    
  22.     internal class PackageScope : ActivationObject
  23.     {
  24.         internal string name;
  25.         internal Package owner;
  26.        
  27.         public PackageScope(ScriptObject parent) : base(parent)
  28.         {
  29.             this.fast = true;
  30.             this.name = null;
  31.             this.owner = null;
  32.             this.isKnownAtCompileTime = true;
  33.         }
  34.        
  35.         internal override JSVariableField AddNewField(string name, object value, FieldAttributes attributeFlags)
  36.         {
  37.             base.AddNewField(this.name + "." + name, value, attributeFlags);
  38.             return base.AddNewField(name, value, attributeFlags);
  39.         }
  40.        
  41.         internal void AddOwnName()
  42.         {
  43.             string root = this.name;
  44.             int i = root.IndexOf('.');
  45.             if (i > 0)
  46.                 root = root.Substring(0, i);
  47.             base.AddNewField(root, Namespace.GetNamespace(root, this.engine), FieldAttributes.Literal | FieldAttributes.Public);
  48.         }
  49.        
  50.         protected override JSVariableField CreateField(string name, FieldAttributes attributeFlags, object value)
  51.         {
  52.             return new JSGlobalField(this, name, value, attributeFlags);
  53.         }
  54.        
  55.         internal override string GetName()
  56.         {
  57.             return this.name;
  58.         }
  59.        
  60.         internal void MergeWith(PackageScope p)
  61.         {
  62.             foreach (object f in p.field_table) {
  63.                 JSGlobalField field = (JSGlobalField)f;
  64.                 ClassScope csc = field.value as ClassScope;
  65.                 if (this.name_table[field.Name] != null) {
  66.                     if (csc != null) {
  67.                         csc.owner.context.HandleError(JSError.DuplicateName, field.Name, true);
  68.                         csc.owner.name += p.GetHashCode().ToString(CultureInfo.InvariantCulture);
  69.                     }
  70.                     continue;
  71.                 }
  72.                 this.field_table.Add(field);
  73.                 this.name_table[field.Name] = field;
  74.                 if (csc != null) {
  75.                     csc.owner.enclosingScope = this;
  76.                     csc.package = this;
  77.                 }
  78.             }
  79.         }
  80.     }
  81. }

Developer Fusion