99#include " value.h"
1010#include " stack.h"
1111#include " string_table.h"
12+ #include " operations.h"
1213
1314#ifdef INK_ENABLE_UNREAL
1415# include " InkVar.h"
@@ -28,8 +29,28 @@ template<>
2829int32_t function_base::pop<int32_t >(basic_eval_stack* stack, list_table& lists)
2930{
3031 value val = stack->pop ();
31- inkAssert (val.type () == value_type::int32, " Type mismatch!" );
32- return val.get <value_type::int32>();
32+ return casting::numeric_cast<value_type::int32>(val);
33+ }
34+
35+ template <>
36+ uint32_t function_base::pop<uint32_t >(basic_eval_stack* stack, list_table& lists)
37+ {
38+ value val = stack->pop ();
39+ return casting::numeric_cast<value_type::uint32>(val);
40+ }
41+
42+ template <>
43+ bool function_base::pop<bool >(basic_eval_stack* stack, list_table& lists)
44+ {
45+ value val = stack->pop ();
46+ return casting::numeric_cast<value_type::int32>(val) != 0 ;
47+ }
48+
49+ template <>
50+ float function_base::pop<float >(basic_eval_stack* stack, list_table& lists)
51+ {
52+ value val = stack->pop ();
53+ return casting::numeric_cast<value_type::float32>(val);
3354}
3455
3556template <>
@@ -46,6 +67,24 @@ void function_base::push<int32_t>(basic_eval_stack* stack, const int32_t& v)
4667 stack->push (value{}.set <value_type::int32>(v));
4768}
4869
70+ template <>
71+ void function_base::push<uint32_t >(basic_eval_stack* stack, const uint32_t & v)
72+ {
73+ stack->push (value{}.set <value_type::uint32>(v));
74+ }
75+
76+ template <>
77+ void function_base::push<float >(basic_eval_stack* stack, const float & v)
78+ {
79+ stack->push (value{}.set <value_type::float32>(v));
80+ }
81+
82+ template <>
83+ void function_base::push<bool >(basic_eval_stack* stack, const bool & v)
84+ {
85+ stack->push (value{}.set <value_type::boolean>(v));
86+ }
87+
4988void function_base::push_void (basic_eval_stack* stack) { stack->push (values::null); }
5089
5190void function_base::push_string (basic_eval_stack* stack, const char * dynamic_string)
0 commit comments