11/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
2+ * Copyright 2016 University of Szeged.
23 *
34 * Licensed under the Apache License, Version 2.0 (the "License");
45 * you may not use this file except in compliance with the License.
1617#include < stdlib.h>
1718#include < stdio.h>
1819
19- #include " jerry-core/jerry.h"
20+ #include " jerry-core/jerry-api .h"
2021#include " jerry_extapi.h"
21-
22+
2223#include " native_mbed.h"
2324
2425#ifndef MIN
3031#define __UNSED__ __attribute__ ((unused))
3132
3233#define DECLARE_HANDLER (NAME ) \
33- static bool \
34- NAME ## _handler (const jerry_api_object_t * function_obj_p __UNSED__, \
35- const jerry_api_value_t * this_p __UNSED__, \
36- jerry_api_value_t * ret_val_p __UNSED__, \
37- const jerry_api_value_t args_p[], \
38- const jerry_api_length_t args_cnt)
34+ static jerry_value_t \
35+ NAME ## _handler (const jerry_value_t func_value __UNSED__, \
36+ const jerry_value_t this_value __UNSED__, \
37+ const jerry_value_t args[], \
38+ const jerry_length_t args_cnt )
3939
4040#define REGISTER_HANDLER (NAME ) \
4141 register_native_function ( # NAME, NAME ## _handler)
@@ -45,39 +45,50 @@ NAME ## _handler (const jerry_api_object_t * function_obj_p __UNSED__, \
4545DECLARE_HANDLER(assert )
4646{
4747 if (args_cnt == 1
48- && args_p [0 ]. type == JERRY_API_DATA_TYPE_BOOLEAN
49- && args_p [0 ]. u . v_bool == true )
48+ && jerry_value_is_boolean (args [0 ])
49+ && jerry_get_boolean_value (args [0 ]) )
5050 {
5151 printf (" >> Jerry assert true\r\n " );
52- return true ;
52+ return jerry_create_boolean ( true ) ;
5353 }
5454 printf (" ERROR: Script assertion failed\n " );
5555 exit (JERRY_STANDALONE_EXIT_CODE_FAIL);
56- return false ;
56+ return jerry_create_boolean ( false ) ;
5757}
5858
5959DECLARE_HANDLER (led)
6060{
61+ jerry_value_t ret_val;
62+
6163 if (args_cnt < 2 )
6264 {
63- return false ;
65+ ret_val = jerry_create_boolean (false );
66+ printf (" Error: invalid arguments number!\r\n " );
67+ return ret_val;
68+ }
69+
70+ if (!(jerry_value_is_number (args[0 ])
71+ && jerry_value_is_number (args[1 ])))
72+ {
73+ ret_val = jerry_create_boolean (false );
74+ printf (" Error: arguments must be numbers!\r\n " );
75+ return ret_val;
6476 }
6577
6678 int port, value;
67- port = (int )JS_VALUE_TO_NUMBER (&args_p [0 ]);
68- value = (int )JS_VALUE_TO_NUMBER (&args_p [1 ]);
79+ port = (int ) jerry_get_number_value (args [0 ]);
80+ value = (int ) jerry_get_number_value (args [1 ]);
6981
70- ret_val_p->type = JERRY_API_DATA_TYPE_BOOLEAN;
7182 if (port >=0 && port <= 3 )
7283 {
73- native_led (port, value);
74- ret_val_p-> u . v_bool = true ;
84+ native_led (port, value);
85+ ret_val = jerry_create_boolean ( true ) ;
7586 }
7687 else
7788 {
78- ret_val_p-> u . v_bool = false ;
89+ ret_val = jerry_create_boolean ( false ) ;
7990 }
80- return true ;
91+ return ret_val ;
8192}
8293
8394// -----------------------------------------------------------------------------
@@ -86,41 +97,49 @@ static bool
8697register_native_function (const char * name,
8798 jerry_external_handler_t handler)
8899{
89- jerry_api_object_t *global_obj_p;
90- jerry_api_object_t *reg_func_p;
91- jerry_api_value_t reg_value;
92- bool bok;
100+ jerry_value_t global_object_val = jerry_get_global_object ();
101+ jerry_value_t reg_function = jerry_create_external_function (handler);
93102
94- global_obj_p = jerry_api_get_global ();
95- reg_func_p = jerry_api_create_external_function (handler);
103+ bool is_ok = true ;
96104
97- if (!(reg_func_p != NULL
98- && jerry_api_is_function (reg_func_p)
99- && jerry_api_is_constructor (reg_func_p)))
105+ if (!(jerry_value_is_function (reg_function)
106+ && jerry_value_is_constructor (reg_function)))
100107 {
108+ is_ok = false ;
101109 printf (" Error: create_external_function failed !!!\r\n " );
102- jerry_api_release_object (global_obj_p);
103- return false ;
110+ jerry_release_value (global_object_val);
111+ jerry_release_value (reg_function);
112+ return is_ok;
104113 }
105114
106- jerry_api_acquire_object (reg_func_p);
107- reg_value.type = JERRY_API_DATA_TYPE_OBJECT;
108- reg_value.u .v_object = reg_func_p;
115+ if (jerry_value_has_error_flag (reg_function))
116+ {
117+ is_ok = false ;
118+ printf (" Error: create_external_function has error flag! \n\r " );
119+ jerry_release_value (global_object_val);
120+ jerry_release_value (reg_function);
121+ return is_ok;
122+ }
109123
110- bok = jerry_api_set_object_field_value (global_obj_p,
111- (jerry_api_char_t *) name,
112- ®_value);
124+ jerry_value_t jerry_name = jerry_create_string ((jerry_char_t *) name);
113125
114- jerry_api_release_value (®_value);
115- jerry_api_release_object (reg_func_p);
116- jerry_api_release_object (global_obj_p );
126+ jerry_value_t set_result = jerry_set_property (global_object_val,
127+ jerry_name,
128+ reg_function );
117129
118- if (!bok)
130+
131+ if (jerry_value_has_error_flag (set_result))
119132 {
133+ is_ok = false ;
120134 printf (" Error: register_native_function failed: [%s]\r\n " , name);
121135 }
122136
123- return bok;
137+ jerry_release_value (jerry_name);
138+ jerry_release_value (global_object_val);
139+ jerry_release_value (reg_function);
140+ jerry_release_value (set_result);
141+
142+ return is_ok;
124143}
125144
126145void js_register_functions (void )
0 commit comments