Nicolas Cannasse 13 år sedan
förälder
incheckning
b347457d4e
1 ändrade filer med 8 tillägg och 6 borttagningar
  1. 8 6
      std/haxe/web/Dispatch.hx

+ 8 - 6
std/haxe/web/Dispatch.hx

@@ -144,15 +144,17 @@ class Dispatch {
 		return checkParams(GET_RULES[cfgIndex], true);
 	}
 
-	function match( v : String, r : MatchRule ) : Dynamic {
+	function match( v : String, r : MatchRule, opt : Bool ) : Dynamic {
 		switch( r ) {
 		case MRInt:
 			if( v == null ) throw DEMissing;
+			if( opt && v == "" ) return null;
 			var v = Std.parseInt(v);
 			if( v == null ) throw DEInvalidValue;
 			return v;
 		case MRFloat:
 			if( v == null ) throw DEMissing;
+			if( opt && v == "" ) return null;
 			var v = Std.parseFloat(v);
 			if( Math.isNaN(v) ) throw DEInvalidValue;
 			return v;
@@ -180,9 +182,9 @@ class Dispatch {
 			if( o == null ) throw DEInvalidValue;
 			return o;
 		case MROpt(r) :
-			if( v == null || (v == "" && (r == MRInt || r == MRFloat)) )
+			if( v == null )
 				return null;
-			return match(v, r);
+			return match(v, r, true);
 		}
 	}
 
@@ -195,7 +197,7 @@ class Dispatch {
 				if( opt ) return null;
 				throw DEMissingParam(p.name);
 			}
-			Reflect.setField(po, p.name, match(v, p.rule));
+			Reflect.setField(po, p.name, match(v, p.rule,p.opt));
 		}
 		return po;
 	}
@@ -206,10 +208,10 @@ class Dispatch {
 			loop(args, r);
 			args.push( checkParams(params, opt) );
 		case DRMatch(r):
-			args.push(match(parts.shift(), r));
+			args.push(match(parts.shift(), r, false));
 		case DRMult(rl):
 			for( r in rl )
-				args.push(match(parts.shift(), r));
+				args.push(match(parts.shift(), r, false));
 		case DRMeta(r):
 			loop(args, r);
 			var c = Type.getClass(cfg.obj);