Add methods to get arguments passed to function from Nasal
This commit is contained in:
parent
3391c44107
commit
2f0dfc4d74
@ -223,14 +223,32 @@ namespace nasal
|
|||||||
*/
|
*/
|
||||||
struct CallContext
|
struct CallContext
|
||||||
{
|
{
|
||||||
CallContext(naContext c, int argc, naRef* args):
|
CallContext(naContext c, size_t argc, naRef* args):
|
||||||
c(c),
|
c(c),
|
||||||
argc(argc),
|
argc(argc),
|
||||||
args(args)
|
args(args)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
T get(size_t index, const T& def = T()) const
|
||||||
|
{
|
||||||
|
if( index >= argc )
|
||||||
|
return def;
|
||||||
|
|
||||||
|
return from_nasal<T>(c, args[index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
T require(size_t index) const
|
||||||
|
{
|
||||||
|
if( index >= argc )
|
||||||
|
naRuntimeError(c, "Missing required arg #%d", index);
|
||||||
|
|
||||||
|
return from_nasal<T>(c, args[index]);
|
||||||
|
}
|
||||||
|
|
||||||
naContext c;
|
naContext c;
|
||||||
int argc;
|
size_t argc;
|
||||||
naRef *args;
|
naRef *args;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -153,6 +153,14 @@ int main(int argc, char* argv[])
|
|||||||
obj.set("parents", parents);
|
obj.set("parents", parents);
|
||||||
VERIFY( Ghost<BasePtr>::fromNasal(c, obj.get_naRef()) == d3 );
|
VERIFY( Ghost<BasePtr>::fromNasal(c, obj.get_naRef()) == d3 );
|
||||||
|
|
||||||
|
naRef args[] = {
|
||||||
|
to_nasal(c, std::string("test-arg"))
|
||||||
|
};
|
||||||
|
CallContext cc(c, sizeof(args)/sizeof(args[0]), args);
|
||||||
|
VERIFY( cc.require<std::string>(0) == "test-arg" );
|
||||||
|
VERIFY( cc.get<std::string>(0) == "test-arg" );
|
||||||
|
VERIFY( cc.get<std::string>(1) == "" );
|
||||||
|
|
||||||
// TODO actually do something with the ghosts...
|
// TODO actually do something with the ghosts...
|
||||||
|
|
||||||
naFreeContext(c);
|
naFreeContext(c);
|
||||||
|
Loading…
Reference in New Issue
Block a user