Quellcode durchsuchen

[eval] properly determine length of strings that come from the compiler

Simon Krajewski vor 7 Jahren
Ursprung
Commit
25ac3b0aab
3 geänderte Dateien mit 12 neuen und 4 gelöschten Zeilen
  1. 4 1
      src/macro/eval/evalDebug.ml
  2. 7 2
      src/macro/eval/evalDebugSocket.ml
  3. 1 1
      src/macro/eval/evalEncode.ml

+ 4 - 1
src/macro/eval/evalDebug.ml

@@ -95,7 +95,10 @@ let debug_loop jit conn e f =
 			conn.bp_stop ctx env;
 			ctx.debug.debug_state <- DbgWaiting;
 			run_loop ctx conn.wait run_check_breakpoint env
-
+		(* | Return _ | Break | Continue | Sys_exit _ | RunTimeException _ as exc ->
+			raise exc
+		| exc ->
+			throw (EvalString.vstring (EvalString.create_ascii (Printexc.to_string exc))) e.epos; *)
 	in
 	(* Sets the environmental debug data, then executes the debug loop. *)
 	let run_set env =

+ 7 - 2
src/macro/eval/evalDebugSocket.ml

@@ -65,7 +65,7 @@ let var_to_json name value access =
 			in
 			jv type_s value_s is_structured
 		| VObject o -> jv "Anonymous" (fields_string (object_fields o)) true (* TODO: false for empty structures *)
-		| VString s -> jv "String" (string_repr s) false
+		| VString s -> jv "String" (string_repr s) true
 		| VArray va -> jv "Array" (array_elems (EvalArray.to_list va)) true (* TODO: false for empty arrays *)
 		| VVector vv -> jv "Vector" (array_elems (Array.to_list vv)) true
 		| VInstance vi ->
@@ -178,7 +178,12 @@ let output_inner_vars v access =
 				let a = access ^ "." ^ n in
 				n, v, a
 			) fields
-		| VString _ -> []
+		| VString s -> [
+			"length",vint s.slength,access ^ ".length";
+			"byteLength",vint (String.length s.sstring),access ^ ".byteLength";
+			"charOffset",vint (fst s.soffset),access ^ ".charOffset";
+			"byteOffset",vint (snd s.soffset),access ^ ".byteOffset";
+		]
 		| VArray va ->
 			let l = EvalArray.to_list va in
 			List.mapi (fun i v ->

+ 1 - 1
src/macro/eval/evalEncode.ml

@@ -190,7 +190,7 @@ let encode_array l =
 	encode_array_instance (EvalArray.create (Array.of_list l))
 
 let encode_string s =
-	vstring (create_ascii s)
+	create_unknown s
 
 let encode_bytes s =
 	encode_instance key_haxe_io_Bytes ~kind:(IBytes s)