Browse Source

Return "" for rune < 0 in strconv.

Jeroen van Rijn 11 months ago
parent
commit
300b01d77d
1 changed files with 31 additions and 31 deletions
  1. 31 31
      core/strconv/strconv.odin

+ 31 - 31
core/strconv/strconv.odin

@@ -7,11 +7,11 @@ Parses a boolean value from the input string
 
 
 **Inputs**  
 **Inputs**  
 - s: The input string  
 - s: The input string  
-  - true: "1", "t", "T", "true", "TRUE", "True"
-  - false: "0", "f", "F", "false", "FALSE", "False"
+	- true: "1", "t", "T", "true", "TRUE", "True"
+	- false: "0", "f", "F", "false", "FALSE", "False"
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
 
 
-**Returns**  
+**Returns**
 - result: The parsed boolean value (default: false)
 - result: The parsed boolean value (default: false)
 - ok: A boolean indicating whether the parsing was successful
 - ok: A boolean indicating whether the parsing was successful
 */
 */
@@ -29,7 +29,7 @@ parse_bool :: proc(s: string, n: ^int = nil) -> (result: bool = false, ok: bool)
 /*
 /*
 Finds the integer value of the given rune
 Finds the integer value of the given rune
 
 
-**Inputs**  
+**Inputs**
 - r: The input rune to find the integer value of
 - r: The input rune to find the integer value of
 
 
 **Returns**   The integer value of the given rune
 **Returns**   The integer value of the given rune
@@ -47,7 +47,7 @@ _digit_value :: proc(r: rune) -> int {
 /*
 /*
 Parses an integer value from the input string in the given base, without a prefix
 Parses an integer value from the input string in the given base, without a prefix
 
 
-**Inputs**  
+**Inputs**
 - str: The input string to parse the integer value from
 - str: The input string to parse the integer value from
 - base: The base of the integer value to be parsed (must be between 1 and 16)
 - base: The base of the integer value to be parsed (must be between 1 and 16)
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
@@ -65,7 +65,7 @@ Output:
 
 
 	-1234 false
 	-1234 false
 
 
-**Returns**  
+**Returns**
 - value: Parses an integer value from a string, in the given base, without a prefix.
 - value: Parses an integer value from a string, in the given base, without a prefix.
 - ok: ok=false if no numeric value of the appropriate base could be found, or if the input string contained more than just the number.
 - ok: ok=false if no numeric value of the appropriate base could be found, or if the input string contained more than just the number.
 */
 */
@@ -117,12 +117,12 @@ parse_i64_of_base :: proc(str: string, base: int, n: ^int = nil) -> (value: i64,
 /*
 /*
 Parses an integer value from the input string in base 10, unless there's a prefix
 Parses an integer value from the input string in base 10, unless there's a prefix
 
 
-**Inputs**  
+**Inputs**
 - str: The input string to parse the integer value from
 - str: The input string to parse the integer value from
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
 
 
 Example:
 Example:
-	
+
 	import "core:fmt"
 	import "core:fmt"
 	import "core:strconv"
 	import "core:strconv"
 	parse_i64_maybe_prefixed_example :: proc() {
 	parse_i64_maybe_prefixed_example :: proc() {
@@ -132,13 +132,13 @@ Example:
 		n, ok = strconv.parse_i64_maybe_prefixed("0xeeee")
 		n, ok = strconv.parse_i64_maybe_prefixed("0xeeee")
 		fmt.println(n,ok)
 		fmt.println(n,ok)
 	}
 	}
-	
+
 Output:
 Output:
 
 
 	1234 true
 	1234 true
 	61166 true
 	61166 true
 
 
-**Returns**  
+**Returns**
 - value: The parsed integer value
 - value: The parsed integer value
 - ok: ok=false if a valid integer could not be found, or if the input string contained more than just the number.
 - ok: ok=false if a valid integer could not be found, or if the input string contained more than just the number.
 */
 */
@@ -200,14 +200,14 @@ parse_i64 :: proc{parse_i64_maybe_prefixed, parse_i64_of_base}
 /*
 /*
 Parses an unsigned 64-bit integer value from the input string without a prefix, using the specified base
 Parses an unsigned 64-bit integer value from the input string without a prefix, using the specified base
 
 
-**Inputs**  
+**Inputs**
 - str: The input string to parse
 - str: The input string to parse
 - base: The base of the number system to use for parsing
 - base: The base of the number system to use for parsing
-  - Must be between 1 and 16 (inclusive)
+	- Must be between 1 and 16 (inclusive)
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
 
 
 Example:
 Example:
-	
+
 	import "core:fmt"
 	import "core:fmt"
 	import "core:strconv"
 	import "core:strconv"
 	parse_u64_of_base_example :: proc() {
 	parse_u64_of_base_example :: proc() {
@@ -217,13 +217,13 @@ Example:
 		n, ok = strconv.parse_u64_of_base("5678eee",16)
 		n, ok = strconv.parse_u64_of_base("5678eee",16)
 		fmt.println(n,ok)
 		fmt.println(n,ok)
 	}
 	}
-	
+
 Output:
 Output:
 
 
 	1234 false
 	1234 false
 	90672878 true
 	90672878 true
 
 
-**Returns**  
+**Returns**
 - value: The parsed uint64 value
 - value: The parsed uint64 value
 - ok: A boolean indicating whether the parsing was successful
 - ok: A boolean indicating whether the parsing was successful
 */
 */
@@ -261,15 +261,15 @@ parse_u64_of_base :: proc(str: string, base: int, n: ^int = nil) -> (value: u64,
 /*
 /*
 Parses an unsigned 64-bit integer value from the input string, using the specified base or inferring the base from a prefix
 Parses an unsigned 64-bit integer value from the input string, using the specified base or inferring the base from a prefix
 
 
-**Inputs**  
+**Inputs**
 - str: The input string to parse
 - str: The input string to parse
 - base: The base of the number system to use for parsing (default: 0)
 - base: The base of the number system to use for parsing (default: 0)
-  - If base is 0, it will be inferred based on the prefix in the input string (e.g. '0x' for hexadecimal)
-  - If base is not 0, it will be used for parsing regardless of any prefix in the input string
+	- If base is 0, it will be inferred based on the prefix in the input string (e.g. '0x' for hexadecimal)
+	- If base is not 0, it will be used for parsing regardless of any prefix in the input string
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
 - n: An optional pointer to an int to store the length of the parsed substring (default: nil)
 
 
 Example:
 Example:
-	
+
 	import "core:fmt"
 	import "core:fmt"
 	import "core:strconv"
 	import "core:strconv"
 	parse_u64_maybe_prefixed_example :: proc() {
 	parse_u64_maybe_prefixed_example :: proc() {
@@ -279,13 +279,13 @@ Example:
 		n, ok = strconv.parse_u64_maybe_prefixed("0xee")
 		n, ok = strconv.parse_u64_maybe_prefixed("0xee")
 		fmt.println(n,ok)
 		fmt.println(n,ok)
 	}
 	}
-	
+
 Output:
 Output:
 
 
 	1234 true
 	1234 true
 	238 true
 	238 true
 
 
-**Returns**  
+**Returns**
 - value: The parsed uint64 value
 - value: The parsed uint64 value
 - ok: ok=false if a valid integer could not be found, if the value was negative, or if the input string contained more than just the number.
 - ok: ok=false if a valid integer could not be found, if the value was negative, or if the input string contained more than just the number.
 */
 */
@@ -336,14 +336,14 @@ parse_u64 :: proc{parse_u64_maybe_prefixed, parse_u64_of_base}
 /*
 /*
 Parses a signed integer value from the input string, using the specified base or inferring the base from a prefix
 Parses a signed integer value from the input string, using the specified base or inferring the base from a prefix
 
 
-**Inputs**  
+**Inputs**
 - s: The input string to parse
 - s: The input string to parse
 - base: The base of the number system to use for parsing (default: 0)
 - base: The base of the number system to use for parsing (default: 0)
-  - If base is 0, it will be inferred based on the prefix in the input string (e.g. '0x' for hexadecimal)
-  - If base is not 0, it will be used for parsing regardless of any prefix in the input string
+	- If base is 0, it will be inferred based on the prefix in the input string (e.g. '0x' for hexadecimal)
+	- If base is not 0, it will be used for parsing regardless of any prefix in the input string
 
 
 Example:
 Example:
-	
+
 	import "core:fmt"
 	import "core:fmt"
 	import "core:strconv"
 	import "core:strconv"
 	parse_int_example :: proc() {
 	parse_int_example :: proc() {
@@ -356,14 +356,14 @@ Example:
 		n, ok = strconv.parse_int("0xffff") // with prefix and inferred base
 		n, ok = strconv.parse_int("0xffff") // with prefix and inferred base
 		fmt.println(n,ok)
 		fmt.println(n,ok)
 	}
 	}
-	
+
 Output:
 Output:
 
 
 	1234 true
 	1234 true
 	65535 true
 	65535 true
 	65535 true
 	65535 true
 
 
-**Returns**  
+**Returns**
 - value: The parsed int value
 - value: The parsed int value
 - ok: `false` if no appropriate value could be found, or if the input string contained more than just the number.
 - ok: `false` if no appropriate value could be found, or if the input string contained more than just the number.
 */
 */
@@ -379,11 +379,11 @@ parse_int :: proc(s: string, base := 0, n: ^int = nil) -> (value: int, ok: bool)
 /*
 /*
 Parses an unsigned integer value from the input string, using the specified base or inferring the base from a prefix
 Parses an unsigned integer value from the input string, using the specified base or inferring the base from a prefix
 
 
-**Inputs**  
+**Inputs**
 - s: The input string to parse
 - s: The input string to parse
 - base: The base of the number system to use for parsing (default: 0, inferred)
 - base: The base of the number system to use for parsing (default: 0, inferred)
-  - If base is 0, it will be inferred based on the prefix in the input string (e.g. '0x' for hexadecimal)
-  - If base is not 0, it will be used for parsing regardless of any prefix in the input string
+	- If base is 0, it will be inferred based on the prefix in the input string (e.g. '0x' for hexadecimal)
+	- If base is not 0, it will be used for parsing regardless of any prefix in the input string
 
 
 Example:
 Example:
 	
 	
@@ -1729,7 +1729,7 @@ quote_rune :: proc(buf: []byte, r: rune) -> string {
 		}
 		}
 	}
 	}
 
 
-	if buf == nil {
+	if buf == nil || r < 0 {
 		return ""
 		return ""
 	}
 	}