예제 #1
0
파일: JSRegExp.cs 프로젝트: reshadi2/mcjs
    // ECMA 262 - 15.10.4
    private void ctor(ref mdr.CallFrame callFrame)
    {
      DRegExp regexp = null;
      string pattern;
      string flags;
      switch (callFrame.PassedArgsCount)
      {
        case 0:
          regexp = new DRegExp("");
          break;
        case 1:
          if (callFrame.Arg0.ValueType == mdr.ValueTypes.Object && IsRegExp(callFrame.Arg0.AsDObject()))
          {
            regexp = callFrame.Arg0.AsDObject() as DRegExp;
            if (IsConstrutor)
            {
              //We have to create a new copy
              regexp = new DRegExp(regexp.Value.ToString());
            }
          }
          else
          {
            pattern = Operations.Convert.ToString.Run(ref callFrame.Arg0);
            regexp = new DRegExp(pattern);
          }
          break;
        case 2:
          if (callFrame.Arg0.ValueType == mdr.ValueTypes.Object)
          {
            if (IsRegExp(callFrame.Arg0.AsDObject()))
              RegExpError("TypeError");
          }
          else
          {
            pattern = Operations.Convert.ToString.Run(ref callFrame.Arg0);
            flags = Operations.Convert.ToString.Run(ref callFrame.Arg1);
            regexp = new DRegExp(pattern, flags);
          }
          break;
        default:
          RegExpError("Invalid arguments in RegExp constructor");
          break;
      }

      if (IsConstrutor)
      {
        callFrame.This = (regexp);
      }
      else
        callFrame.Return.Set(regexp);
    }
예제 #2
0
파일: JSRegExp.cs 프로젝트: reshadi2/mcjs
 // ECMA 262 - 15.10.6.3
 private void test(ref mdr.CallFrame callFrame)
 {
   Debug.WriteLine("calling JSRegExp.test");
   string S = Operations.Convert.ToString.Run(ref callFrame.Arg0);
   DRegExp R = callFrame.This as DRegExp;
   LastDRegExp = R;
   if (R != null && R.MatchImplementation(S) != null)
   {
     if (R.MatchedGroups.Count > MaxMatchedGroupIndex)
     {
       for (var i = 0; i < (R.MatchedGroups.Count - MaxMatchedGroupIndex); i++)
         AddNewMatchedGroup();
     }
     callFrame.Return.Set(true);
   }
   else
     callFrame.Return.Set(false);
 }