Skip to content

SLua functions to replicate lsl's (integer) and (float) casts #50

@canny

Description

@canny

LSL has these casting functions. They are not exposed directly in SLua. Here's what I've been replacing them with:

  • (integer)x -> math.modf(tonumber(x) or 0)

  • (float)x -> tonumber(x) or 0

  • (string)x -> tostring(x)

  • (vector)x -> tovector(x) or ZERO_VECTOR

  • (rotation)x -> toquaternion(x) or ZERO_ROTATION

  • (key)x -> touuid(x) or ZERO_VECTOR

My (string), (vector), and (rotation) replacements seem to behave identically in all cases I've thought of. My (key) replacement behaves identically in all cases I actually care about. It's behavior doesn't match when the string is not a valid uuid, but, I actually prefer the new behavior, so I'm happy with the replacement.

However, the (integer) replacement is a bit cumbersome. Additionally, (integer) and (float) have some very convenient behavior when you're parsing real notecards that aren't trivial to replicate using the luau standard library. My replacements get close, but don't behave the same in all cases:


default { state_entry() {

llOwnerSay((string)((integer)"0xf")); // 15

llOwnerSay((string)((integer)"  99.5 red baloons")); // 99

llOwnerSay((string)((float)"  99.5 red baloons")); // 99.500000

llOwnerSay((string)((float)"  -99e2 red baloons")); // -9900.000000

}}

In SLua, we still have indirect access to this behavior via ll.List2Integer and ll.List2Float:


print(ll.List2Integer({"0xf"}, 1)) -- 15

print(ll.List2Integer({"  99.5 red baloons"}, 1)) -- 99

print(ll.List2Float({"  99.5 red baloons"}, 1)) -- 99.5

print(ll.List2Float({"  -99.5e2 red baloons"}, 1)) -- -9950

print(tonumber("0xf")) -- 15

print(tonumber("  99.5 red baloons")) -- nil

print(tonumber("  -99.5e2 red baloons")) -- nil

print(tonumber("-99.5e2")) --  -9950

But it would be nice to have a direct conversion, or even better, one that replicated all the oddities of the lsl casts, but returned nil rather than 0 on failure. Also, such functions might be necessary for the future LSL -> SLua transpiler

https://secondlife.canny.io/admin/board/slua-alpha/p/slua-functions-to-replicate-lsls-integer-and-float-casts

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions