8023531: new RegExp('').toString() should return '/(?:)/'

Thu, 22 Aug 2013 17:23:50 +0200

author
hannesw
date
Thu, 22 Aug 2013 17:23:50 +0200
changeset 515
8ad9bcb04e6d
parent 514
54f60d91024c
child 516
c5c5ab3f420a

8023531: new RegExp('').toString() should return '/(?:)/'
Reviewed-by: sundar, jlaskey

src/jdk/nashorn/internal/runtime/ScriptObject.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/WithObject.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/regexp/RegExp.java file | annotate | diff | comparison | revisions
test/script/basic/JDK-8023531.js file | annotate | diff | comparison | revisions
     1.1 --- a/src/jdk/nashorn/internal/runtime/ScriptObject.java	Thu Aug 22 18:46:26 2013 +0530
     1.2 +++ b/src/jdk/nashorn/internal/runtime/ScriptObject.java	Thu Aug 22 17:23:50 2013 +0200
     1.3 @@ -1008,10 +1008,6 @@
     1.4          return getMap().findProperty(key);
     1.5      }
     1.6  
     1.7 -    static String convertKey(final Object key) {
     1.8 -        return (key instanceof String) ? (String)key : JSType.toString(key);
     1.9 -    }
    1.10 -
    1.11      /**
    1.12       * Overridden by {@link jdk.nashorn.internal.objects.NativeArguments} class (internal use.)
    1.13       * Used for argument access in a vararg function using parameter name.
    1.14 @@ -2374,7 +2370,7 @@
    1.15              return array.getInt(index);
    1.16          }
    1.17  
    1.18 -        return getInt(index, convertKey(key));
    1.19 +        return getInt(index, JSType.toString(key));
    1.20      }
    1.21  
    1.22      @Override
    1.23 @@ -2386,7 +2382,7 @@
    1.24              return array.getInt(index);
    1.25          }
    1.26  
    1.27 -        return getInt(index, convertKey(key));
    1.28 +        return getInt(index, JSType.toString(key));
    1.29      }
    1.30  
    1.31      @Override
    1.32 @@ -2398,7 +2394,7 @@
    1.33              return array.getInt(index);
    1.34          }
    1.35  
    1.36 -        return getInt(index, convertKey(key));
    1.37 +        return getInt(index, JSType.toString(key));
    1.38      }
    1.39  
    1.40      @Override
    1.41 @@ -2409,7 +2405,7 @@
    1.42              return array.getInt(key);
    1.43          }
    1.44  
    1.45 -        return getInt(key, convertKey(key));
    1.46 +        return getInt(key, JSType.toString(key));
    1.47      }
    1.48  
    1.49      private long getLong(final int index, final String key) {
    1.50 @@ -2451,7 +2447,7 @@
    1.51              return array.getLong(index);
    1.52          }
    1.53  
    1.54 -        return getLong(index, convertKey(key));
    1.55 +        return getLong(index, JSType.toString(key));
    1.56      }
    1.57  
    1.58      @Override
    1.59 @@ -2463,7 +2459,7 @@
    1.60              return array.getLong(index);
    1.61          }
    1.62  
    1.63 -        return getLong(index, convertKey(key));
    1.64 +        return getLong(index, JSType.toString(key));
    1.65      }
    1.66  
    1.67      @Override
    1.68 @@ -2475,7 +2471,7 @@
    1.69              return array.getLong(index);
    1.70          }
    1.71  
    1.72 -        return getLong(index, convertKey(key));
    1.73 +        return getLong(index, JSType.toString(key));
    1.74      }
    1.75  
    1.76      @Override
    1.77 @@ -2486,7 +2482,7 @@
    1.78              return array.getLong(key);
    1.79          }
    1.80  
    1.81 -        return getLong(key, convertKey(key));
    1.82 +        return getLong(key, JSType.toString(key));
    1.83      }
    1.84  
    1.85      private double getDouble(final int index, final String key) {
    1.86 @@ -2528,7 +2524,7 @@
    1.87              return array.getDouble(index);
    1.88          }
    1.89  
    1.90 -        return getDouble(index, convertKey(key));
    1.91 +        return getDouble(index, JSType.toString(key));
    1.92      }
    1.93  
    1.94      @Override
    1.95 @@ -2540,7 +2536,7 @@
    1.96              return array.getDouble(index);
    1.97          }
    1.98  
    1.99 -        return getDouble(index, convertKey(key));
   1.100 +        return getDouble(index, JSType.toString(key));
   1.101      }
   1.102  
   1.103      @Override
   1.104 @@ -2552,7 +2548,7 @@
   1.105              return array.getDouble(index);
   1.106          }
   1.107  
   1.108 -        return getDouble(index, convertKey(key));
   1.109 +        return getDouble(index, JSType.toString(key));
   1.110      }
   1.111  
   1.112      @Override
   1.113 @@ -2563,7 +2559,7 @@
   1.114              return array.getDouble(key);
   1.115          }
   1.116  
   1.117 -        return getDouble(key, convertKey(key));
   1.118 +        return getDouble(key, JSType.toString(key));
   1.119      }
   1.120  
   1.121      private Object get(final int index, final String key) {
   1.122 @@ -2605,7 +2601,7 @@
   1.123              return array.getObject(index);
   1.124          }
   1.125  
   1.126 -        return get(index, convertKey(key));
   1.127 +        return get(index, JSType.toString(key));
   1.128      }
   1.129  
   1.130      @Override
   1.131 @@ -2617,7 +2613,7 @@
   1.132              return array.getObject(index);
   1.133          }
   1.134  
   1.135 -        return get(index, convertKey(key));
   1.136 +        return get(index, JSType.toString(key));
   1.137      }
   1.138  
   1.139      @Override
   1.140 @@ -2629,7 +2625,7 @@
   1.141              return array.getObject(index);
   1.142          }
   1.143  
   1.144 -        return get(index, convertKey(key));
   1.145 +        return get(index, JSType.toString(key));
   1.146      }
   1.147  
   1.148      @Override
   1.149 @@ -2640,7 +2636,7 @@
   1.150              return array.getObject(key);
   1.151          }
   1.152  
   1.153 -        return get(key, convertKey(key));
   1.154 +        return get(key, JSType.toString(key));
   1.155      }
   1.156  
   1.157      /**
   1.158 @@ -2655,7 +2651,7 @@
   1.159          final long longIndex = index & JSType.MAX_UINT;
   1.160  
   1.161          if (!getArray().has(index)) {
   1.162 -            final String key = convertKey(longIndex);
   1.163 +            final String key = JSType.toString(longIndex);
   1.164              final FindProperty find = findProperty(key, true);
   1.165  
   1.166              if (find != null) {
   1.167 @@ -2801,7 +2797,7 @@
   1.168              return;
   1.169          }
   1.170  
   1.171 -        final String       propName = convertKey(key);
   1.172 +        final String       propName = JSType.toString(key);
   1.173          final FindProperty find     = findProperty(propName, true);
   1.174  
   1.175          setObject(find, strict, propName, value);
   1.176 @@ -3023,7 +3019,7 @@
   1.177              }
   1.178          }
   1.179  
   1.180 -        final FindProperty find = findProperty(convertKey(key), true);
   1.181 +        final FindProperty find = findProperty(JSType.toString(key), true);
   1.182  
   1.183          return find != null;
   1.184      }
   1.185 @@ -3040,7 +3036,7 @@
   1.186              }
   1.187          }
   1.188  
   1.189 -        final FindProperty find = findProperty(convertKey(key), true);
   1.190 +        final FindProperty find = findProperty(JSType.toString(key), true);
   1.191  
   1.192          return find != null;
   1.193      }
   1.194 @@ -3057,7 +3053,7 @@
   1.195              }
   1.196          }
   1.197  
   1.198 -        final FindProperty find = findProperty(convertKey(key), true);
   1.199 +        final FindProperty find = findProperty(JSType.toString(key), true);
   1.200  
   1.201          return find != null;
   1.202      }
   1.203 @@ -3074,7 +3070,7 @@
   1.204              }
   1.205          }
   1.206  
   1.207 -        final FindProperty find = findProperty(convertKey(key), true);
   1.208 +        final FindProperty find = findProperty(JSType.toString(key), true);
   1.209  
   1.210          return find != null;
   1.211      }
   1.212 @@ -3087,7 +3083,7 @@
   1.213              return true;
   1.214          }
   1.215  
   1.216 -        final FindProperty find = findProperty(convertKey(key), false);
   1.217 +        final FindProperty find = findProperty(JSType.toString(key), false);
   1.218  
   1.219          return find != null;
   1.220      }
   1.221 @@ -3100,7 +3096,7 @@
   1.222              return true;
   1.223          }
   1.224  
   1.225 -        final FindProperty find = findProperty(convertKey(key), false);
   1.226 +        final FindProperty find = findProperty(JSType.toString(key), false);
   1.227  
   1.228          return find != null;
   1.229      }
   1.230 @@ -3113,7 +3109,7 @@
   1.231              return true;
   1.232          }
   1.233  
   1.234 -        final FindProperty find = findProperty(convertKey(key), false);
   1.235 +        final FindProperty find = findProperty(JSType.toString(key), false);
   1.236  
   1.237          return find != null;
   1.238      }
   1.239 @@ -3126,7 +3122,7 @@
   1.240              return true;
   1.241          }
   1.242  
   1.243 -        final FindProperty find = findProperty(convertKey(key), false);
   1.244 +        final FindProperty find = findProperty(JSType.toString(key), false);
   1.245  
   1.246          return find != null;
   1.247      }
   1.248 @@ -3196,7 +3192,7 @@
   1.249      }
   1.250  
   1.251      private boolean deleteObject(final Object key, final boolean strict) {
   1.252 -        final String propName = convertKey(key);
   1.253 +        final String propName = JSType.toString(key);
   1.254          final FindProperty find = findProperty(propName, false);
   1.255  
   1.256          if (find == null) {
     2.1 --- a/src/jdk/nashorn/internal/runtime/WithObject.java	Thu Aug 22 18:46:26 2013 +0530
     2.2 +++ b/src/jdk/nashorn/internal/runtime/WithObject.java	Thu Aug 22 17:23:50 2013 +0200
     2.3 @@ -73,7 +73,7 @@
     2.4      public boolean delete(final Object key, final boolean strict) {
     2.5          if (expression instanceof ScriptObject) {
     2.6              final ScriptObject self = (ScriptObject)expression;
     2.7 -            final String propName = ScriptObject.convertKey(key);
     2.8 +            final String propName = JSType.toString(key);
     2.9  
    2.10              final FindProperty find = self.findProperty(propName, true);
    2.11  
     3.1 --- a/src/jdk/nashorn/internal/runtime/regexp/RegExp.java	Thu Aug 22 18:46:26 2013 +0530
     3.2 +++ b/src/jdk/nashorn/internal/runtime/regexp/RegExp.java	Thu Aug 22 17:23:50 2013 +0200
     3.3 @@ -60,7 +60,7 @@
     3.4       * @param flags the flags string
     3.5       */
     3.6      protected RegExp(final String source, final String flags) {
     3.7 -        this.source = source;
     3.8 +        this.source = source.length() == 0 ? "(?:)" : source;
     3.9          for (int i = 0; i < flags.length(); i++) {
    3.10              final char ch = flags.charAt(i);
    3.11              switch (ch) {
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/test/script/basic/JDK-8023531.js	Thu Aug 22 17:23:50 2013 +0200
     4.3 @@ -0,0 +1,106 @@
     4.4 +/*
     4.5 + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
     4.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4.7 + * 
     4.8 + * This code is free software; you can redistribute it and/or modify it
     4.9 + * under the terms of the GNU General Public License version 2 only, as
    4.10 + * published by the Free Software Foundation.
    4.11 + * 
    4.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
    4.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    4.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    4.15 + * version 2 for more details (a copy is included in the LICENSE file that
    4.16 + * accompanied this code).
    4.17 + * 
    4.18 + * You should have received a copy of the GNU General Public License version
    4.19 + * 2 along with this work; if not, write to the Free Software Foundation,
    4.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    4.21 + * 
    4.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    4.23 + * or visit www.oracle.com if you need additional information or have any
    4.24 + * questions.
    4.25 + */
    4.26 +
    4.27 +/**
    4.28 + * JDK-8023531: new RegExp('').toString() should return '/(?:)/'
    4.29 + *
    4.30 + * @test
    4.31 + * @run
    4.32 + */
    4.33 +
    4.34 +if (new RegExp("").toString() !== "/(?:)/") {
    4.35 +    throw new Error();
    4.36 +} else if (!(new RegExp("").test(""))) {
    4.37 +    throw new Error();
    4.38 +}
    4.39 +
    4.40 +if (new RegExp("", "g").toString() !== "/(?:)/g") {
    4.41 +    throw new Error();
    4.42 +} else if (!(new RegExp("", "g").test(""))) {
    4.43 +    throw new Error();
    4.44 +}
    4.45 +
    4.46 +if (new RegExp("", "i").toString() !== "/(?:)/i") {
    4.47 +    throw new Error();
    4.48 +} else if (!(new RegExp("", "i").test(""))) {
    4.49 +    throw new Error();
    4.50 +}
    4.51 +
    4.52 +if (new RegExp("", "m").toString() !== "/(?:)/m") {
    4.53 +    throw new Error();
    4.54 +} else if (!(new RegExp("", "m").test(""))) {
    4.55 +    throw new Error();
    4.56 +}
    4.57 +
    4.58 +if (RegExp("").toString() !== "/(?:)/") {
    4.59 +    throw new Error();
    4.60 +} else if (!RegExp("").test("")) {
    4.61 +    throw new Error();
    4.62 +}
    4.63 +
    4.64 +if (RegExp("", "g").toString() !== "/(?:)/g") {
    4.65 +    throw new Error();
    4.66 +} else if (!RegExp("", "g").test("")) {
    4.67 +    throw new Error();
    4.68 +}
    4.69 +
    4.70 +if (RegExp("", "i").toString() !== "/(?:)/i") {
    4.71 +    throw new Error();
    4.72 +} else if (!RegExp("", "i").test("")) {
    4.73 +    throw new Error();
    4.74 +}
    4.75 +
    4.76 +if (RegExp("", "m").toString() !== "/(?:)/m") {
    4.77 +    throw new Error();
    4.78 +} else if (!RegExp("", "m").test("")) {
    4.79 +    throw new Error();
    4.80 +}
    4.81 +
    4.82 +var re = /abc/;
    4.83 +re.compile("");
    4.84 +if (re.toString() !== "/(?:)/") {
    4.85 +    throw new Error();
    4.86 +} else if (!re.test("")) {
    4.87 +    throw new Error();
    4.88 +}
    4.89 +
    4.90 +re.compile("", "g");
    4.91 +if (re.toString() !== "/(?:)/g") {
    4.92 +    throw new Error();
    4.93 +} else if (!re.test("")) {
    4.94 +    throw new Error();
    4.95 +}
    4.96 +
    4.97 +re.compile("", "i");
    4.98 +if (re.toString() !== "/(?:)/i") {
    4.99 +    throw new Error();
   4.100 +} else if (!re.test("")) {
   4.101 +    throw new Error();
   4.102 +}
   4.103 +
   4.104 +re.compile("", "m");
   4.105 +if (re.toString() !== "/(?:)/m") {
   4.106 +    throw new Error();
   4.107 +} else if (!re.test("")) {
   4.108 +    throw new Error();
   4.109 +}

mercurial