Interface jerry_api_eval for performing eval operation.
This commit is contained in:
@@ -31,6 +31,16 @@
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Jerry completion codes
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
JERRY_COMPLETION_CODE_OK = 0, /**< successful completion */
|
||||||
|
JERRY_COMPLETION_CODE_UNHANDLED_EXCEPTION = 1, /**< exception occured and it was not handled */
|
||||||
|
JERRY_COMPLETION_CODE_FAILED_ASSERTION_IN_SCRIPT = 2 /**< assertion, performed by script, failed */
|
||||||
|
} jerry_completion_code_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jerry API data types
|
* Jerry API data types
|
||||||
*/
|
*/
|
||||||
@@ -155,6 +165,13 @@ bool jerry_api_construct_object (jerry_api_object_t *function_object_p,
|
|||||||
const jerry_api_value_t args_p [],
|
const jerry_api_value_t args_p [],
|
||||||
uint16_t args_count);
|
uint16_t args_count);
|
||||||
|
|
||||||
|
extern EXTERN_C
|
||||||
|
jerry_completion_code_t jerry_api_eval (const char *source_p,
|
||||||
|
size_t source_size,
|
||||||
|
bool is_direct,
|
||||||
|
bool is_strict,
|
||||||
|
jerry_api_value_t *retval_p);
|
||||||
|
|
||||||
extern EXTERN_C
|
extern EXTERN_C
|
||||||
jerry_api_object_t* jerry_api_get_global (void);
|
jerry_api_object_t* jerry_api_get_global (void);
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include "ecma-alloc.h"
|
#include "ecma-alloc.h"
|
||||||
#include "ecma-builtins.h"
|
#include "ecma-builtins.h"
|
||||||
#include "ecma-extension.h"
|
#include "ecma-extension.h"
|
||||||
|
#include "ecma-eval.h"
|
||||||
#include "ecma-function-object.h"
|
#include "ecma-function-object.h"
|
||||||
#include "ecma-gc.h"
|
#include "ecma-gc.h"
|
||||||
#include "ecma-helpers.h"
|
#include "ecma-helpers.h"
|
||||||
@@ -835,6 +836,65 @@ jerry_api_get_global (void)
|
|||||||
return ecma_builtin_get (ECMA_BUILTIN_ID_GLOBAL);
|
return ecma_builtin_get (ECMA_BUILTIN_ID_GLOBAL);
|
||||||
} /* jerry_api_get_global */
|
} /* jerry_api_get_global */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform eval
|
||||||
|
*
|
||||||
|
* Note:
|
||||||
|
* If current code is executed on top of interpreter, using is_direct argument,
|
||||||
|
* caller can enable direct eval mode that is equivalent to calling eval from
|
||||||
|
* within of current JS execution context.
|
||||||
|
*
|
||||||
|
* @return completion status
|
||||||
|
*/
|
||||||
|
jerry_completion_code_t
|
||||||
|
jerry_api_eval (const char *source_p, /**< source code */
|
||||||
|
size_t source_size, /**< length of source code */
|
||||||
|
bool is_direct, /**< perform eval invocation in direct mode */
|
||||||
|
bool is_strict, /**< perform eval as it is called from strict mode code */
|
||||||
|
jerry_api_value_t *retval_p) /**< out: returned value */
|
||||||
|
{
|
||||||
|
ecma_string_t *code_p = ecma_new_ecma_string ((const ecma_char_t*) source_p);
|
||||||
|
(void) source_size;
|
||||||
|
|
||||||
|
jerry_completion_code_t status;
|
||||||
|
|
||||||
|
ecma_completion_value_t completion = ecma_op_eval (code_p, is_direct, is_strict);
|
||||||
|
|
||||||
|
if (ecma_is_completion_value_normal (completion))
|
||||||
|
{
|
||||||
|
status = JERRY_COMPLETION_CODE_OK;
|
||||||
|
|
||||||
|
jerry_api_convert_ecma_value_to_api_value (retval_p,
|
||||||
|
ecma_get_completion_value_value (completion));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
jerry_api_convert_ecma_value_to_api_value (retval_p, ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED));
|
||||||
|
|
||||||
|
if (ecma_is_completion_value_throw (completion))
|
||||||
|
{
|
||||||
|
status = JERRY_COMPLETION_CODE_UNHANDLED_EXCEPTION;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
JERRY_ASSERT (ecma_is_completion_value_exit (completion));
|
||||||
|
|
||||||
|
if (ecma_is_value_true (ecma_get_completion_value_value (completion)))
|
||||||
|
{
|
||||||
|
status = JERRY_COMPLETION_CODE_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = JERRY_COMPLETION_CODE_FAILED_ASSERTION_IN_SCRIPT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ecma_deref_ecma_string (code_p);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
} /* jerry_api_eval */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jerry engine initialization
|
* Jerry engine initialization
|
||||||
*/
|
*/
|
||||||
|
|||||||
+3
-12
@@ -19,12 +19,13 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "jerry-api.h"
|
||||||
|
#include "jerry-extension.h"
|
||||||
|
|
||||||
/** \addtogroup jerry Jerry engine interface
|
/** \addtogroup jerry Jerry engine interface
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "jerry-extension.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jerry flags
|
* Jerry flags
|
||||||
*/
|
*/
|
||||||
@@ -37,16 +38,6 @@ typedef uint32_t jerry_flag_t;
|
|||||||
#define JERRY_FLAG_PARSE_ONLY (1 << 2) /**< parse only, prevents script execution (only for testing)
|
#define JERRY_FLAG_PARSE_ONLY (1 << 2) /**< parse only, prevents script execution (only for testing)
|
||||||
* FIXME: Remove. */
|
* FIXME: Remove. */
|
||||||
|
|
||||||
/**
|
|
||||||
* Jerry completion codes
|
|
||||||
*/
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
JERRY_COMPLETION_CODE_OK = 0, /**< successful completion */
|
|
||||||
JERRY_COMPLETION_CODE_UNHANDLED_EXCEPTION = 1, /**< exception occured and it was not handled */
|
|
||||||
JERRY_COMPLETION_CODE_FAILED_ASSERTION_IN_SCRIPT = 2 /**< assertion, performed by script, failed */
|
|
||||||
} jerry_completion_code_t;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Error codes
|
* Error codes
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user