Sfoglia il codice sorgente

leading colon -> trailing colon

Simon Krajewski 11 anni fa
parent
commit
3a6806e5b0
3 ha cambiato i file con 13 aggiunte e 12 eliminazioni
  1. 6 4
      genpy.ml
  2. 5 6
      std/python/Syntax.hx
  3. 2 2
      std/python/internal/StringImpl.hx

+ 6 - 4
genpy.ml

@@ -1212,10 +1212,12 @@ module Printer = struct
 				Printf.sprintf "%s.%s" (print_expr pctx e1) id
 			| "python_Syntax.tuple", [{eexpr = TArrayDecl el}] ->
 				Printf.sprintf "(%s)" (print_exprs pctx ", " el)
-			| "python_Syntax._arrayAccess", e1 :: [{eexpr = TArrayDecl el}] ->
-				Printf.sprintf "%s[%s]" (print_expr pctx e1) (print_exprs pctx ":" el)
-			| "__python_array_access_leading_colon__", e1::tail ->
-				Printf.sprintf "%s[%s:]" (print_expr pctx e1) (print_exprs pctx ":" tail)
+			| "python_Syntax._arrayAccess", e1 :: {eexpr = TArrayDecl el} :: etrail ->
+				let trailing_colon = match etrail with
+					| [{eexpr = TConst(TBool(true))}] -> true
+					| _ -> false
+				in
+				Printf.sprintf "%s[%s%s]" (print_expr pctx e1) (print_exprs pctx ":" el) (if trailing_colon then ":" else "")
 			| "python_Syntax.isIn",[e1;e2] ->
 				Printf.sprintf "%s in %s" (print_expr pctx e1) (print_expr pctx e2)
 (* 			| "__python_for__",[{eexpr = TBlock [{eexpr = TVar(v1,_)};e2;block]}] ->

+ 5 - 6
std/python/Syntax.hx

@@ -59,14 +59,13 @@ extern class Syntax {
 		return macro $self._arrayAccess($x, $a{rest});
 	}
 
-	static function _arrayAccess(a:Dynamic, args:Array<Dynamic>):Dynamic { return null; }
+	macro public static function arrayAccessWithTrailingColon(x:Expr, rest:Array<Expr>):ExprOf<Dynamic> {
+		return macro $self._arrayAccess($x, $a{rest}, true);
+	}
 
-	public static function arraySet(a:Dynamic, i:Dynamic, v:Dynamic):Dynamic { return null; }
+	static function _arrayAccess(a:Dynamic, args:Array<Dynamic>, ?trailingColon:Bool = false):Dynamic { return null; }
 
-	@:noUsing macro public static function arrayAccessWithLeadingColon<T>(x:Expr, rest:Array<Expr>):haxe.macro.ExprOf<Dynamic>
-	{
-		return macro ((untyped __python_array_access_leading_colon__)($a{[x].concat(rest)}):Dynamic);
-	}
+	public static function arraySet(a:Dynamic, i:Dynamic, v:Dynamic):Dynamic { return null; }
 
 	//@:noUsing macro public static function pyFor <T>(v:Expr, it:Expr, b:Expr):haxe.macro.Expr
 	//{

+ 2 - 2
std/python/internal/StringImpl.hx

@@ -73,7 +73,7 @@ class StringImpl {
 	public static function substring( s:String, startIndex : Int, ?endIndex : Int ) : String {
 		if (startIndex < 0) startIndex = 0;
 		if (endIndex == null) {
-			return Syntax.arrayAccessWithLeadingColon(s, startIndex);
+			return Syntax.arrayAccessWithTrailingColon(s, startIndex);
 		} else {
 			if (endIndex < 0) endIndex = 0;
 			if (endIndex < startIndex) {
@@ -88,7 +88,7 @@ class StringImpl {
 
 	public static function substr( s:String, startIndex : Int, ?len : Int ) : String {
 		if (len == null) {
-			return Syntax.arrayAccessWithLeadingColon(s, startIndex);
+			return Syntax.arrayAccessWithTrailingColon(s, startIndex);
 		} else {
 			if (len == 0) return "";
 			return Syntax.arrayAccess(s, startIndex, startIndex+len);