Browse Source

do not duplicate String on unmatched EReg.map (fixed issue #1565)

Simon Krajewski 12 years ago
parent
commit
affcc9c9bf

+ 1 - 1
std/cpp/_std/EReg.hx

@@ -166,7 +166,7 @@
 			else
 				offset = p.pos + p.len;
 		} while (global);
-		if (!global && offset < s.length)
+		if (!global && offset > 0 && offset < s.length)
 			buf.add(s.substr(offset));
 		return buf.toString();
 	}

+ 1 - 1
std/cs/_std/EReg.hx

@@ -171,7 +171,7 @@ class EReg {
 			else
 				offset = p.pos + p.len;
 		} while (isGlobal);
-		if (!isGlobal && offset < s.length)
+		if (!isGlobal && offset > 0 && offset < s.length)
 			buf.add(s.substr(offset));
 		return buf.toString();
 	}

+ 1 - 1
std/flash/_std/EReg.hx

@@ -108,7 +108,7 @@
 				offset = p.pos + p.len;
 			first = false;
 		} while (r.global);
-		if (!r.global && offset < s.length)
+		if (!r.global && offset > 0 && offset < s.length)
 			buf.add(s.substr(offset));
 		return buf.toString();
 	}

+ 1 - 25
std/java/_std/EReg.hx

@@ -20,30 +20,6 @@
  * DEALINGS IN THE SOFTWARE.
  */
 import java.util.regex.Regex;
-/*
- * Copyright (c) 2005, The haXe Project Contributors
- * All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   - Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *   - Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE HAXE PROJECT CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE HAXE PROJECT CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- */
 
 @:coreType class EReg {
 
@@ -247,7 +223,7 @@ import java.util.regex.Regex;
 			else
 				offset = p.pos + p.len;
 		} while (isGlobal);
-		if (!isGlobal && offset < s.length)
+		if (!isGlobal && offset > 0 && offset < s.length)
 			buf.add(s.substr(offset));
 		return buf.toString();
 	}

+ 1 - 1
std/js/_std/EReg.hx

@@ -105,7 +105,7 @@
 			else
 				offset = p.pos + p.len;
 		} while (r.global);
-		if (!r.global && offset < s.length)
+		if (!r.global && offset > 0 && offset < s.length)
 			buf.add(s.substr(offset));
 		return buf.toString();
 	}

+ 1 - 1
std/neko/_std/EReg.hx

@@ -192,7 +192,7 @@
 			else
 				offset = p.pos + p.len;
 		} while (global);
-		if (!global && offset < s.length)
+		if (!global && offset > 0 && offset < s.length)
 			buf.add(s.substr(offset));
 		return buf.toString();
 	}

+ 1 - 1
std/php/_std/EReg.hx

@@ -114,7 +114,7 @@
 			else
 				offset = p.pos + p.len;
 		} while (global);
-		if (!global && offset < s.length)
+		if (!global && offset > 0 && offset < s.length)
 			buf.add(s.substr(offset));
 		return buf.toString();
 	}

+ 6 - 0
tests/unit/unitstd/EReg.unit.hx

@@ -97,3 +97,9 @@ pos.len == 2;
 ~/href="(.*?)"/g.replace('lead href="foo" href="bar" trail',"$$$1$$") == "lead $foo$ $bar$ trail";
 //~/href="(.*?)"/g.replace('lead href="foo" href="bar" trail',"$$$2$$") == "lead $$2$ $$2$ trail";
 #end
+
+// map
+~/(Hello)/.map("Hello World", function(e) return "Hallo") == "Hallo World";
+~/(Hello)/.map("Hello", function(e) return "Hallo") == "Hallo";
+~/(World)/.map("Hello World", function(e) return "Hallo") == "Hello Hallo";
+~/(Hola)/.map("Hello World", function(e) return throw "not called") == "Hello World";