anchor.diff:  method EcmaScriptObjectWrapper.GetOwnProperty(aName: String): PropertyValue;
   begin
     var lItems := fType.GetMembers(BindingFlags.Public  or  BindingFlags.FlattenHierarchy  or
  -                   if  (self.Static)  then  BindingFlags.Static  else  BindingFlags.Instance).Where(a->a.Name = aName).ToArray();
  +                   if  (self.Static)  then  BindingFlags.Static  else  BindingFlags.Instance).Where(a->a.Name = aName).ToList();
   
     if  (length(lItems) = 0)  then
       exit inherited;
   
   
  -  if  (lItems.Length = 1)  then  begin
  +  if  (lItems.Count  = 1)  then  begin
       if  (lItems[0].MemberType = MemberTypes.Field)  then     
         exit  (new PropertyValue(if FieldInfo(lItems[0]).IsInitOnly then PropertyAttributes.None else PropertyAttributes.writable,
                      EcmaScriptScope.DoTryWrap(Root,FieldInfo(lItems[0]).GetValue(fValue))));
  
positive.code:   exit  (Call(context, args));
  end;
  
  
  class method EcmaScriptObjectWrapper.FindAndCallBestOverload(methods: array of MethodBase;  root: GlobalObject;  methodName: String;
                     &self: Object;  parameters: array of Object): Object;
  begin
    var lMethods := new List<MethodBase>(methods);
  
    for  i: Int32  :=  0  to  length(parameters)-1  do  begin
      if  (parameters[i] is EcmaScriptObjectWrapper)  then
        parameters[i] := EcmaScriptObjectWrapper(parameters[i]).Value; // if these were wrapped before, we should unwrap
    end;
  
    for  i: Int32  :=  lMethods.Count-1  downto  0  do  begin
      var lMeth := lMethods[i];
      var lParams := lMeth.GetParameters();
      var lParamStart := -1;
  
      if  (lParams.Length <> length(parameters))  then  begin
        if  (not ((lParams.Length > 0)  and  (length(lParams[lParams.Length-1].GetCustomAttributes(typeOf(ParamArrayAttribute), false)) > 0)
                     and  (parameters.Length >= lParams.Length-1)))  then  begin
          lMethods.RemoveAt(i);
  
          continue;
        end;
  
        lParamStart := lParams.Length -1;
      end
      else if  ((lParams.Length > 0)  and  (length(lParams[lParams.Length-1].GetCustomAttributes(typeOf(ParamArrayAttribute), false)) > 0))  then 
        lParamStart := lParams.Length -1;
      // Now we'll have to see if the parameter types matches what's in the arguments array
      for  j: Int32  :=  0  to  length(parameters)-1  do  begin
        if  (not IsCompatibleType(parameters[j]:GetType(), iif(((lParamStart <> -1)  and  (j >= lParamStart)), lParams[lParams.Length-1].ParameterType.GetElementType(), lParams[j].ParameterType)))  then  begin
          lMeth := nil;
          break;
        end;
      end;
  
      if  (lMeth = nil)  then
        lMethods.RemoveAt(i);
    end;
  
    if  (lMethods.Count > 1)  then
      root.RaiseNativeError(NativeErrorType.TypeError,String.Format( RemObjects.Script.Properties.Resources.Ambigious_overloaded_method_0_with_1_parameters, methodName, parameters.Length));
  
negative.code: 
    if  (targetType.IsAssignableFrom(sourceType))  then
      exit  (true);
    if targetType.IsGenericParameter then
      exit true;
  
    if  (((sourceType = typeOf(Double))  or  (sourceType = typeOf(Int32)))
                     and  (&Type.GetTypeCode(targetType)  in  [ TypeCode.Byte, TypeCode.Char, TypeCode.DateTime, TypeCode.Decimal,
  