Jerryscript

Macros to implement methods callable from javascript within a Context class

Must be used inside a class constructed using JS::ContextTemplate.

As with all external functions, must be registered using JS::Object::registerFunction to make available to javascript.

#define JS_DEFINE_METHOD(method, ...)
 Argument list is fixed. More...
 
#define JS_DEFINE_METHOD_VAR(method)
 Arguments are passed as array. More...
 

Macros to implement functions callable from javascript

As with all external functions, must be registered using JS::Object::registerFunction to make available to javascript.

Function arguments should be validated, returning JS::Error object on failure.

#define JS_DEFINE_FUNCTION(func, ...)
 Argument list is fixed. More...
 
#define JS_DEFINE_FUNCTION_VAR(func)
 Arguments are passed as array. More...
 
#define JS_DECLARE_FUNCTION(func)    jerry_value_t func(const jerry_call_info_t*, const jerry_value_t[], const jerry_length_t);
 Declare a function wrapper. More...
 

Detailed Description

Macro Definition Documentation

◆ JS_DECLARE_FUNCTION

#define JS_DECLARE_FUNCTION (   func)     jerry_value_t func(const jerry_call_info_t*, const jerry_value_t[], const jerry_length_t);

Declare a function wrapper.

Parameters
funcName of wrapper function

Use in a header file or as forward declaration

◆ JS_DEFINE_FUNCTION

#define JS_DEFINE_FUNCTION (   func,
  ... 
)
Value:
JS::Value js_##func(const JS::CallInfo& callInfo, ##__VA_ARGS__); \
jerry_value_t func(const jerry_call_info_t* call_info_p, const jerry_value_t args[], \
const jerry_length_t args_count) \
{ \
using Function = JS::Value (*)(const jerry_call_info_t*, ...); \
if(JS_NARG(__VA_ARGS__) != args_count) { \
return JS::create_arg_count_error(__FUNCTION__); \
} \
auto res = Function(js_##func)(call_info_p JS_CONCAT(JS_ARGS_, JS_NARG(__VA_ARGS__))); \
return res.release(); \
} \
JS::Value js_##func(const Jerryscript::CallInfo& callInfo, ##__VA_ARGS__)
Represents a Jerryscript value.
Definition: Libraries/jerryscript/src/include/Jerryscript/Types.h:153
Value
Definition: Components/IFS/src/include/IFS/Error.h:82
#define JS_NARG(...)
Definition: jerryscript/src/include/Jerryscript/Function.h:25
#define JS_CONCAT(x, y)
Definition: jerryscript/src/include/Jerryscript/Function.h:32
Function
Definition: IOControl/include/IO/Modbus/Function.h:45
jerry_value_t create_arg_count_error(const char *functionName)
Maps directly onto jerry_call_info_t structure.
Definition: jerryscript/src/include/Jerryscript/Function.h:131

Argument list is fixed.

Parameters
funcName of jerryscript wrapper function
...Argument definitions

Example:

JS_DEFINE_FUNCTION(myFunction, JS::Value& arg1, JS::Array& arg2)
{
...
return ...;
}
Array objects have properties accessed by index.
Definition: Libraries/jerryscript/src/include/Jerryscript/Types.h:806
#define JS_DEFINE_FUNCTION(func,...)
Argument list is fixed.
Definition: jerryscript/src/include/Jerryscript/Function.h:72

◆ JS_DEFINE_FUNCTION_VAR

#define JS_DEFINE_FUNCTION_VAR (   func)
Value:
JS::Value js_##func(const JS::CallInfo& callInfo, JS::Value[], unsigned); \
jerry_value_t func(const jerry_call_info_t* call_info_p, const jerry_value_t args[], \
const jerry_length_t args_count) \
{ \
using Function = JS::Value (*)(const jerry_call_info_t*, JS::Value[], unsigned); \
auto res = Function(js_##func)(call_info_p, (JS::Value*)args, args_count); \
return res.release(); \
} \
JS::Value js_##func(const JS::CallInfo& callInfo, JS::Value args[], unsigned argCount)

Arguments are passed as array.

Parameters
funcName of jerryscript wrapper function

Example:

{
for(unsigned i = 0; i < argCount; ++i) {
Serial.print(args[i]);
}
return Value();
}
size_t print(char c)
Prints a single character to output stream.
Definition: Print.h:107
#define JS_DEFINE_FUNCTION_VAR(func)
Arguments are passed as array.
Definition: jerryscript/src/include/Jerryscript/Function.h:103
HardwareSerial Serial
Global instance of serial port UART0.

◆ JS_DEFINE_METHOD

#define JS_DEFINE_METHOD (   method,
  ... 
)
Value:
static jerry_value_t method(const jerry_call_info_t* call_info_p, const jerry_value_t args[], \
const jerry_length_t args_count) \
{ \
using Method = JS::Value (ContextClass::*)(const jerry_call_info_t*, ...); \
if(JS_NARG(__VA_ARGS__) != args_count) { \
return JS::create_arg_count_error(__FUNCTION__); \
} \
auto& ctx = getCurrent(); \
auto m = reinterpret_cast<Method>(&ContextClass::js_##method); \
auto res = (ctx.*m)(call_info_p JS_CONCAT(JS_ARGS_, JS_NARG(__VA_ARGS__))); \
return res.release(); \
} \
Jerryscript::Value js_##method(const JS::CallInfo& callInfo, ##__VA_ARGS__)
size_t getCurrent(void)
Get the currently allocated amount of memory.

Argument list is fixed.

Parameters
methodName of jerryscript wrapper function
...Argument definitions

Example:

class MyContext: public JS::ContextTemplate<MyContext>
{
public:
void init()
{
select();
JS::global().registerFunction(F("myMethod"), myMethod);
}
protected:
JS_DEFINE_METHOD(myMethod, 2, JS::Value& arg1, JS::Callable& arg2)
{
...
return ...;
}
};
#define F(string_literal)
Wrap a string literal stored in flash and access it using a String object.
Definition: WString.h:113
Callable object represent functions.
Definition: Libraries/jerryscript/src/include/Jerryscript/Types.h:990
Implement a custom Context class.
Definition: Libraries/jerryscript/src/include/Jerryscript/Context.h:189
void select()
Make this the current context.
Definition: Libraries/jerryscript/src/include/Jerryscript/Context.h:162
bool registerFunction(const String &name, jerry_external_handler_t handler)
Register an external function so it may be called from javascript.
Definition: Libraries/jerryscript/src/include/Jerryscript/Types.h:697
#define JS_DEFINE_METHOD(method,...)
Argument list is fixed.
Definition: Libraries/jerryscript/src/include/Jerryscript/Context.h:59
void init(IDataSourceStream *stream)
Application calls this method to set source for graphics resourcess.
Object global()
Get global context.
Definition: Libraries/jerryscript/src/include/Jerryscript/Types.h:1020
void initialise(jerry_init_flag_t flags=JERRY_INIT_EMPTY)
Initializes the JavaScript VM.

◆ JS_DEFINE_METHOD_VAR

#define JS_DEFINE_METHOD_VAR (   method)
Value:
static jerry_value_t method(const jerry_call_info_t* call_info_p, const jerry_value_t args[], \
const jerry_length_t args_count) \
{ \
using Method = JS::Value (ContextClass::*)(const jerry_call_info_t*, JS::Value[], unsigned); \
auto& ctx = getCurrent(); \
auto m = reinterpret_cast<Method>(&ContextClass::js_##method); \
auto res = (ctx.*m)(call_info_p, (JS::Value*)args, args_count); \
return res.release(); \
} \
Jerryscript::Value js_##method(const Jerryscript::CallInfo& callInfo, Jerryscript::Value args[], unsigned argCount)

Arguments are passed as array.

Parameters
methodName of jerryscript wrapper function

Method declaration has the following prototype:

JS::Value js_method(const JS::CallInfo& callInfo, JS::Value args[], unsigned argCount)

Example:

class MyContext: public JS::ContextTemplate<MyContext>
{
public:
void init()
{
select();
JS::global().registerFunction(F("myMethod"), myMethod);
}
protected:
{
for(unsigned i = 0; i < argCount; ++i) {
Serial.print(args[i]);
}
return Value();
}
};
#define JS_DEFINE_METHOD_VAR(method)
Arguments are passed as array.
Definition: Libraries/jerryscript/src/include/Jerryscript/Context.h:108