mirror of
https://github.com/odin-lang/Odin.git
synced 2026-06-14 06:13:45 +00:00
Add int and float functions
This commit is contained in:
@@ -547,7 +547,7 @@ eval_field :: proc(s: ^State, dot: any, ident: string) -> (value: any, err: Erro
|
||||
rm := (^mem.Raw_Map)(dot.data)
|
||||
|
||||
data := uintptr(rm.entries.data)
|
||||
for i in 0..<rm.entries.len {
|
||||
for _ in 0..<rm.entries.len {
|
||||
key: string
|
||||
switch key_type.id {
|
||||
case typeid_of(string):
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package text_template
|
||||
|
||||
import "core:mem"
|
||||
import "core:fmt"
|
||||
import "core:reflect"
|
||||
import "core:strconv"
|
||||
|
||||
Function :: #type proc(args: []any) -> (value: any, err: Error)
|
||||
|
||||
@@ -59,6 +59,62 @@ init_builtin_funcs :: proc() {
|
||||
return new_any(n), nil
|
||||
}
|
||||
|
||||
builtin_funcs["int"] = proc(args: []any) -> (value: any, err: Error) {
|
||||
if len(args) != 1 {
|
||||
err = .Invalid_Argument_Count
|
||||
return
|
||||
}
|
||||
res: i64
|
||||
switch v in get_value(args[0]) {
|
||||
case bool:
|
||||
res = i64(v)
|
||||
case i64:
|
||||
res = i64(v)
|
||||
case f64:
|
||||
res = i64(v)
|
||||
case string:
|
||||
if value, ok := strconv.parse_f64(v); ok {
|
||||
res = i64(value)
|
||||
} else if value, ok := strconv.parse_i64(v); ok {
|
||||
res = i64(value)
|
||||
} else {
|
||||
return nil, .Invalid_Argument_Type
|
||||
}
|
||||
case:
|
||||
return nil, .Invalid_Argument_Type
|
||||
}
|
||||
|
||||
return new_any(res), nil
|
||||
}
|
||||
|
||||
builtin_funcs["float"] = proc(args: []any) -> (value: any, err: Error) {
|
||||
if len(args) != 1 {
|
||||
err = .Invalid_Argument_Count
|
||||
return
|
||||
}
|
||||
res: f64
|
||||
switch v in get_value(args[0]) {
|
||||
case bool:
|
||||
res = f64(i64(v))
|
||||
case i64:
|
||||
res = f64(v)
|
||||
case f64:
|
||||
res = f64(v)
|
||||
case string:
|
||||
if value, ok := strconv.parse_f64(v); ok {
|
||||
res = f64(value)
|
||||
} else if value, ok := strconv.parse_i64(v); ok {
|
||||
res = f64(value)
|
||||
} else {
|
||||
return nil, .Invalid_Argument_Type
|
||||
}
|
||||
case:
|
||||
return nil, .Invalid_Argument_Type
|
||||
}
|
||||
|
||||
return new_any(res), nil
|
||||
}
|
||||
|
||||
|
||||
builtin_funcs["print"] = proc(args: []any) -> (value: any, err: Error) {
|
||||
return new_any(fmt.aprint(..args)), nil
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package text_template_parse
|
||||
|
||||
import "../scan"
|
||||
import "core:strings"
|
||||
|
||||
Pos :: scan.Pos
|
||||
Token :: scan.Token
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package text_template_parse
|
||||
|
||||
import "core:io"
|
||||
import "core:fmt"
|
||||
import "core:mem"
|
||||
import "core:mem/virtual"
|
||||
|
||||
Reference in New Issue
Block a user