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

  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.Reflection.Emit;
  21.    
  22.     public class Context
  23.     {
  24.         internal DocumentContext document;
  25.         internal string source_string;
  26.         internal int lineNumber;
  27.         internal int startLinePos;
  28.         internal int startPos;
  29.         internal int endLineNumber;
  30.         internal int endLinePos;
  31.         internal int endPos;
  32.         internal JSToken token;
  33.         internal int errorReported;
  34.        
  35.         internal Context(DocumentContext document, string source_string)
  36.         {
  37.             this.document = document;
  38.             this.source_string = source_string;
  39.             this.lineNumber = 1;
  40.             this.startLinePos = 0;
  41.             this.startPos = 0;
  42.             this.endLineNumber = 1;
  43.             this.endLinePos = 0;
  44.             this.endPos = (source_string == null) ? -1 : source_string.Length;
  45.             this.token = JSToken.None;
  46.             this.errorReported = 1000000;
  47.         }
  48.        
  49.         internal Context(DocumentContext document, string source_string, int lineNumber, int startLinePos, int startPos, int endLineNumber, int endLinePos, int endPos, JSToken token)
  50.         {
  51.             this.document = document;
  52.             this.source_string = source_string;
  53.             this.lineNumber = lineNumber;
  54.             this.startLinePos = startLinePos;
  55.             this.startPos = startPos;
  56.             this.endLineNumber = endLineNumber;
  57.             this.endLinePos = endLinePos;
  58.             this.endPos = endPos;
  59.             this.token = token;
  60.             this.errorReported = 1000000;
  61.         }
  62.        
  63.         internal Context Clone()
  64.         {
  65.             Context context = new Context(this.document, this.source_string, this.lineNumber, this.startLinePos, this.startPos, this.endLineNumber, this.endLinePos, this.endPos, this.token);
  66.             context.errorReported = this.errorReported;
  67.             return context;
  68.         }
  69.        
  70.         internal Context CombineWith(Context other)
  71.         {
  72.             return new Context(this.document, this.source_string, this.lineNumber, this.startLinePos, this.startPos, other.endLineNumber, other.endLinePos, other.endPos, this.token);
  73.         }
  74.        
  75.         internal void EmitLineInfo(ILGenerator ilgen)
  76.         {
  77.             this.document.EmitLineInfo(ilgen, this.StartLine, this.StartColumn, this.EndLine, this.EndColumn);
  78.         }
  79.        
  80.         internal void EmitFirstLineInfo(ILGenerator ilgen)
  81.         {
  82.             this.document.EmitFirstLineInfo(ilgen, this.StartLine, this.StartColumn, this.EndLine, this.EndColumn);
  83.         }
  84.        
  85.         public int EndColumn {
  86.             get { return this.endPos - this.endLinePos; }
  87.         }
  88.        
  89.         public int EndLine {
  90.             get { return this.endLineNumber; }
  91.         }
  92.        
  93.         public int EndPosition {
  94.             get { return this.endPos; }
  95.         }
  96.        
  97.         internal bool Equals(string str)
  98.         {
  99.             int len = endPos - startPos;
  100.             return (len == str.Length && String.CompareOrdinal(source_string, startPos, str, 0, len) == 0);
  101.         }
  102.        
  103.         internal bool Equals(Context ctx)
  104.         {
  105.             return (this.source_string == ctx.source_string && this.lineNumber == ctx.lineNumber && this.startLinePos == ctx.startLinePos && this.startPos == ctx.startPos && this.endLineNumber == ctx.endLineNumber && this.endLinePos == ctx.endLinePos && this.endPos == ctx.endPos && this.token == ctx.token);
  106.         }
  107.        
  108.         public string GetCode()
  109.         {
  110.             if (this.endPos > this.startPos && this.endPos <= this.source_string.Length) {
  111.                 return this.source_string.Substring(this.startPos, this.endPos - this.startPos);
  112.             }
  113.             return null;
  114.         }
  115.        
  116.         public JSToken GetToken()
  117.         {
  118.             return this.token;
  119.         }
  120.        
  121.         internal void HandleError(JSError errorId)
  122.         {
  123.             this.HandleError(errorId, null, false);
  124.         }
  125.        
  126.         internal void HandleError(JSError errorId, bool treatAsError)
  127.         {
  128.             this.HandleError(errorId, null, treatAsError);
  129.         }
  130.        
  131.         internal void HandleError(JSError errorId, string message)
  132.         {
  133.             this.HandleError(errorId, message, false);
  134.         }
  135.        
  136.         internal void HandleError(JSError errorId, string message, bool treatAsError)
  137.         {
  138.             if (errorId == JSError.UndeclaredVariable && this.document.HasAlreadySeenErrorFor(this.GetCode()))
  139.                 return;
  140.             JScriptException error = new JScriptException(errorId, this);
  141.             if (message != null)
  142.                 error.value = message;
  143.             if (treatAsError)
  144.                 error.isError = treatAsError;
  145.             int sev = error.Severity;
  146.             if (sev < this.errorReported) {
  147.                 this.document.HandleError(error);
  148.                 this.errorReported = sev;
  149.             }
  150.         }
  151.        
  152.         internal void SetSourceContext(DocumentContext document, string source)
  153.         {
  154.             this.source_string = source;
  155.             this.endPos = source.Length;
  156.             this.document = document;
  157.         }
  158.        
  159.         public int StartColumn {
  160.             get { return this.startPos - this.startLinePos; }
  161.         }
  162.        
  163.         public int StartLine {
  164.             get { return this.lineNumber; }
  165.         }
  166.        
  167.         public int StartPosition {
  168.             get { return this.startPos; }
  169.         }
  170.        
  171.         internal void UpdateWith(Context other)
  172.         {
  173.             this.endPos = other.endPos;
  174.             this.endLineNumber = other.endLineNumber;
  175.             this.endLinePos = other.endLinePos;
  176.         }
  177.        
  178.     }
  179.    
  180. }

Developer Fusion