aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJimmy Huang <jimmy.huang@linux.intel.com>2018-06-06 10:17:52 -0700
committerGeoff Gustafson <geoff@linux.intel.com>2018-06-06 10:17:52 -0700
commit2b033e1d1f89737fd374cebdde7c82c0f449cbd2 (patch)
tree3281b20177be0d7bea72741dd4c59b8f36847508
parentf90d9d12cc13c23e574759d9e4e0a8dd62fd9073 (diff)
[jerryscript] Rebase to latest JerryScript (#1883)
Signed-off-by: Jimmy Huang <jimmy.huang@intel.com>
m---------deps/jerryscript0
-rw-r--r--src/ashell/jerry-code.c9
-rw-r--r--src/jerry-port/zjs_jerry_port.c9
-rw-r--r--src/main.c22
-rw-r--r--src/sensors/zjs_sensor_accel.c2
-rw-r--r--src/sensors/zjs_sensor_gyro.c2
-rw-r--r--src/sensors/zjs_sensor_light.c2
-rw-r--r--src/sensors/zjs_sensor_magn.c2
-rw-r--r--src/sensors/zjs_sensor_temp.c2
-rw-r--r--src/zjs_aio_a101.c2
-rw-r--r--src/zjs_ble.c12
-rw-r--r--src/zjs_callbacks.c2
-rw-r--r--src/zjs_event.c4
-rw-r--r--src/zjs_gfx.c6
-rw-r--r--src/zjs_grove_lcd_ipm.c4
-rw-r--r--src/zjs_modules.c13
-rw-r--r--src/zjs_sensor.c2
-rw-r--r--src/zjs_util.c14
-rw-r--r--tools/snapshot.c13
19 files changed, 69 insertions, 53 deletions
diff --git a/deps/jerryscript b/deps/jerryscript
-Subproject c429530d02347431856fa0bfa1c161c6f3b6953
+Subproject 145ab1ed79d3fc1e8618040c3495f9cfd400f64
diff --git a/src/ashell/jerry-code.c b/src/ashell/jerry-code.c
index e6235fe..ae8b52b 100644
--- a/src/ashell/jerry-code.c
+++ b/src/ashell/jerry-code.c
@@ -35,7 +35,7 @@ static jerry_value_t parsed_code = 0;
void javascript_eval_code(const char *source_buffer, ssize_t size)
{
ZVAL ret_val = jerry_eval((jerry_char_t *)source_buffer, size, false);
- if (jerry_value_has_error_flag(ret_val)) {
+ if (jerry_value_is_error(ret_val)) {
printf("[ERR] failed to evaluate JS\n");
zjs_print_error_message(ret_val, ZJS_UNDEFINED);
}
@@ -63,8 +63,9 @@ int javascript_parse_code(const char *file_name)
if (buf && size > 0) {
/* Setup Global scope code */
- parsed_code = jerry_parse((const jerry_char_t *)buf, size, false);
- if (jerry_value_has_error_flag(parsed_code)) {
+ parsed_code = jerry_parse(NULL, 0, (const jerry_char_t *)buf, size,
+ JERRY_PARSE_NO_OPTS);
+ if (jerry_value_is_error(parsed_code)) {
DBG_PRINT("Error parsing JS\n");
zjs_print_error_message(parsed_code, ZJS_UNDEFINED);
jerry_release_value(parsed_code);
@@ -85,7 +86,7 @@ void javascript_run_code(const char *file_name)
/* Execute the parsed source code in the Global scope */
ZVAL ret_value = jerry_run(parsed_code);
- if (jerry_value_has_error_flag(ret_value)) {
+ if (jerry_value_is_error(ret_value)) {
DBG_PRINT("Error running JS\n");
zjs_print_error_message(ret_value, ZJS_UNDEFINED);
}
diff --git a/src/jerry-port/zjs_jerry_port.c b/src/jerry-port/zjs_jerry_port.c
index a81432a..c939146 100644
--- a/src/jerry-port/zjs_jerry_port.c
+++ b/src/jerry-port/zjs_jerry_port.c
@@ -57,3 +57,12 @@ void jerry_port_log(jerry_log_level_t level, const char *format, ...)
#endif /* JERRY_DEBUGGER */
va_end(args);
}
+
+void jerry_port_sleep (uint32_t sleep_time)
+{
+#ifdef ZJS_LINUX_BUILD
+ usleep ((useconds_t) sleep_time * 1000);
+#else
+ k_sleep ((useconds_t) sleep_time);
+#endif
+}
diff --git a/src/main.c b/src/main.c
index 7dc2097..53a5c36 100644
--- a/src/main.c
+++ b/src/main.c
@@ -293,13 +293,13 @@ int main(int argc, char *argv[])
#endif
#ifndef ZJS_SNAPSHOT_BUILD
- code_eval = jerry_parse_named_resource((jerry_char_t *)file_name,
- file_name_len,
- (jerry_char_t *)script,
- script_len,
- false);
+ code_eval = jerry_parse((jerry_char_t *)file_name,
+ file_name_len,
+ (jerry_char_t *)script,
+ script_len,
+ JERRY_PARSE_NO_OPTS);
- if (jerry_value_has_error_flag(code_eval)) {
+ if (jerry_value_is_error(code_eval)) {
DBG_PRINT("Error parsing JS\n");
zjs_print_error_message(code_eval, ZJS_UNDEFINED);
goto error;
@@ -311,12 +311,16 @@ int main(int argc, char *argv[])
#endif
#ifdef ZJS_SNAPSHOT_BUILD
- result = jerry_exec_snapshot(snapshot_bytecode, snapshot_len, false);
+ result = jerry_exec_snapshot(snapshot_bytecode,
+ snapshot_len,
+ 0,
+ JERRY_SNAPSHOT_EXEC_COPY_DATA);
+
#else
result = jerry_run(code_eval);
#endif
- if (jerry_value_has_error_flag(result)) {
+ if (jerry_value_is_error(result)) {
DBG_PRINT("Error running JS\n");
zjs_print_error_message(result, ZJS_UNDEFINED);
goto error;
@@ -406,7 +410,7 @@ int main(int argc, char *argv[])
#ifdef BUILD_MODULE_PROMISE
// run queued jobs for promises
result = jerry_run_all_enqueued_jobs();
- if (jerry_value_has_error_flag(result)) {
+ if (jerry_value_is_error(result)) {
DBG_PRINT("Error running JS in promise jobqueue\n");
zjs_print_error_message(result, ZJS_UNDEFINED);
goto error;
diff --git a/src/sensors/zjs_sensor_accel.c b/src/sensors/zjs_sensor_accel.c
index efa5544..50a9ff9 100644
--- a/src/sensors/zjs_sensor_accel.c
+++ b/src/sensors/zjs_sensor_accel.c
@@ -47,7 +47,7 @@ static ZJS_DECL_FUNC(zjs_sensor_constructor)
zjs_sensor_create, g_instance, SENSOR_CHAN_ACCEL_XYZ, ACCEL_DEVICE_NAME,
0, 800, onchange, NULL, onstop);
- if (!jerry_value_has_error_flag(sensor_obj)) {
+ if (!jerry_value_is_error(sensor_obj)) {
ZVAL null_val = jerry_create_null();
zjs_set_readonly_property(sensor_obj, "x", null_val);
zjs_set_readonly_property(sensor_obj, "y", null_val);
diff --git a/src/sensors/zjs_sensor_gyro.c b/src/sensors/zjs_sensor_gyro.c
index 4d653a0..476e000 100644
--- a/src/sensors/zjs_sensor_gyro.c
+++ b/src/sensors/zjs_sensor_gyro.c
@@ -47,7 +47,7 @@ static ZJS_DECL_FUNC(zjs_sensor_constructor)
ZJS_CHAIN_FUNC_ARGS(zjs_sensor_create, g_instance, SENSOR_CHAN_GYRO_XYZ,
GYRO_DEVICE_NAME, 0, 800, onchange, NULL, onstop);
- if (!jerry_value_has_error_flag(sensor_obj)) {
+ if (!jerry_value_is_error(sensor_obj)) {
ZVAL null_val = jerry_create_null();
zjs_set_readonly_property(sensor_obj, "x", null_val);
zjs_set_readonly_property(sensor_obj, "y", null_val);
diff --git a/src/sensors/zjs_sensor_light.c b/src/sensors/zjs_sensor_light.c
index 5477f2e..53cc261 100644
--- a/src/sensors/zjs_sensor_light.c
+++ b/src/sensors/zjs_sensor_light.c
@@ -41,7 +41,7 @@ static ZJS_DECL_FUNC(zjs_sensor_constructor)
ZJS_CHAIN_FUNC_ARGS(zjs_sensor_create, g_instance, SENSOR_CHAN_LIGHT,
ADC_DEVICE_NAME, -1, 100, onchange, NULL, onstop);
- if (!jerry_value_has_error_flag(sensor_obj)) {
+ if (!jerry_value_is_error(sensor_obj)) {
ZVAL null_val = jerry_create_null();
zjs_set_readonly_property(sensor_obj, "illuminance", null_val);
}
diff --git a/src/sensors/zjs_sensor_magn.c b/src/sensors/zjs_sensor_magn.c
index dc2acc7..ea3a89c 100644
--- a/src/sensors/zjs_sensor_magn.c
+++ b/src/sensors/zjs_sensor_magn.c
@@ -47,7 +47,7 @@ static ZJS_DECL_FUNC(zjs_sensor_constructor)
ZJS_CHAIN_FUNC_ARGS(zjs_sensor_create, g_instance, SENSOR_CHAN_MAGN_XYZ,
MAGN_DEVICE_NAME, 0, 800, onchange, NULL, onstop);
- if (!jerry_value_has_error_flag(sensor_obj)) {
+ if (!jerry_value_is_error(sensor_obj)) {
ZVAL null_val = jerry_create_null();
zjs_set_readonly_property(sensor_obj, "x", null_val);
zjs_set_readonly_property(sensor_obj, "y", null_val);
diff --git a/src/sensors/zjs_sensor_temp.c b/src/sensors/zjs_sensor_temp.c
index d2ba0d1..ee4d78c 100644
--- a/src/sensors/zjs_sensor_temp.c
+++ b/src/sensors/zjs_sensor_temp.c
@@ -41,7 +41,7 @@ static ZJS_DECL_FUNC(zjs_sensor_constructor)
ZJS_CHAIN_FUNC_ARGS(zjs_sensor_create, g_instance, SENSOR_CHAN_TEMP,
TEMP_DEVICE_NAME, 0, 800, onchange, NULL, onstop);
- if (!jerry_value_has_error_flag(sensor_obj)) {
+ if (!jerry_value_is_error(sensor_obj)) {
ZVAL null_val = jerry_create_null();
zjs_set_readonly_property(sensor_obj, "celsius", null_val);
}
diff --git a/src/zjs_aio_a101.c b/src/zjs_aio_a101.c
index 1a143da..82e0a01 100644
--- a/src/zjs_aio_a101.c
+++ b/src/zjs_aio_a101.c
@@ -239,7 +239,7 @@ static ZJS_DECL_FUNC(zjs_aio_open)
send.data.aio.pin = pin;
ZVAL result = zjs_aio_call_remote_function(&send);
- if (jerry_value_has_error_flag(result))
+ if (jerry_value_is_error(result))
return result;
// create the AIOPin object
diff --git a/src/zjs_ble.c b/src/zjs_ble.c
index ad0c302..482a96a 100644
--- a/src/zjs_ble.c
+++ b/src/zjs_ble.c
@@ -260,7 +260,7 @@ static void zjs_ble_read_c_callback(void *handle, const void *argv)
jerry_value_t args[2] = { offset, callback };
ZVAL rval = jerry_call_function(cb->js_callback, chrc->chrc_obj, args, 2);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
DBG_PRINT("failed to call onReadRequest function\n");
}
}
@@ -366,7 +366,7 @@ static void zjs_ble_write_c_callback(void *handle, const void *argv)
jerry_value_t args[4] = { buf_obj, offset, without_response, callback };
ZVAL rval = jerry_call_function(cb->js_callback, chrc->chrc_obj, args, 4);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
DBG_PRINT("failed to call onWriteRequest function\n");
}
}
@@ -444,7 +444,7 @@ static void zjs_ble_subscribe_c_callback(void *handle, const void *argv)
jerry_value_t args[2] = { max_size, callback };
ZVAL rval = jerry_call_function(cb->js_callback, chrc->chrc_obj, args, 2);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
DBG_PRINT("failed to call onSubscribe function\n");
}
}
@@ -455,7 +455,7 @@ static void zjs_ble_unsubscribe_c_callback(void *handle, const void *argv)
ble_notify_handle_t *cb = &chrc->unsubscribe_cb;
ZVAL rval = jerry_call_function(cb->js_callback, chrc->chrc_obj, NULL, 0);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
DBG_PRINT("failed to call onUnsubscribe function\n");
}
}
@@ -466,7 +466,7 @@ static void zjs_ble_notify_c_callback(void *handle, const void *argv)
ble_notify_handle_t *cb = &chrc->notify_cb;
ZVAL rval = jerry_call_function(cb->js_callback, chrc->chrc_obj, NULL, 0);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
DBG_PRINT("failed to call onNotify function\n");
}
}
@@ -1212,7 +1212,7 @@ static ZJS_DECL_FUNC(zjs_ble_set_services)
ZVAL arg = success ? ZJS_UNDEFINED
: jerry_create_string("failed to register services");
ZVAL rval = jerry_call_function(argv[1], ZJS_UNDEFINED, &arg, 1);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
DBG_PRINT("failed to call callback function\n");
}
}
diff --git a/src/zjs_callbacks.c b/src/zjs_callbacks.c
index 39e2a3d..0068c55 100644
--- a/src/zjs_callbacks.c
+++ b/src/zjs_callbacks.c
@@ -523,7 +523,7 @@ void zjs_call_callback(zjs_callback_id id, const void *data, u32_t sz)
if (!jerry_value_is_undefined(cb_map[id]->js_func)) {
rval = jerry_call_function(cb_map[id]->js_func,
cb_map[id]->this, values, sz);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
#ifdef INSTRUMENT_CALLBACKS
DBG_PRINT("callback %d had error; creator: %s, "
"caller: %s\n",
diff --git a/src/zjs_event.c b/src/zjs_event.c
index 62e9f6f..2edb11f 100644
--- a/src/zjs_event.c
+++ b/src/zjs_event.c
@@ -136,7 +136,7 @@ static ZJS_DECL_FUNC(add_listener)
jerry_value_t rval = zjs_add_event_listener(this, name, argv[1]);
zjs_free(name);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
return rval;
}
@@ -422,7 +422,7 @@ bool zjs_emit_event_priv(jerry_value_t obj, const char *event_name,
listener_t *listener = event->listeners;
while (listener) {
ZVAL rval = jerry_call_function(listener->func, obj, argv, argc);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
ERR_PRINT("error calling listener\n");
}
listener = listener->next;
diff --git a/src/zjs_gfx.c b/src/zjs_gfx.c
index 97e63de..9c7532b 100644
--- a/src/zjs_gfx.c
+++ b/src/zjs_gfx.c
@@ -188,7 +188,7 @@ static jerry_value_t zjs_gfx_call_cb(u32_t x, u32_t y, u32_t w, u32_t h,
jerry_value_t ret = jerry_call_function(gfxHandle->drawDataCB,
gfxHandle->jsThis, args, 5);
- if (jerry_value_has_error_flag(ret)) {
+ if (jerry_value_is_error(ret)) {
ERR_PRINT("JS callback failed with %u..\n", (u32_t)ret);
return ret;
}
@@ -273,7 +273,7 @@ static jerry_value_t zjs_gfx_flush(gfx_handle_t *gfxHandle)
ret = zjs_gfx_call_cb(xStart, yStart, currW, currH,
recBufObj, gfxHandle);
- if (jerry_value_has_error_flag(ret)) {
+ if (jerry_value_is_error(ret)) {
zjs_gfx_reset_touched_pixels(gfxHandle);
return ret;
}
@@ -625,7 +625,7 @@ static ZJS_DECL_FUNC(zjs_gfx_draw_string)
ret = zjs_gfx_draw_char_priv(x, argData.coords[1], argData.text[i],
argData.color, argData.size, handle);
- if (jerry_value_has_error_flag(ret)) {
+ if (jerry_value_is_error(ret)) {
return ret;
}
diff --git a/src/zjs_grove_lcd_ipm.c b/src/zjs_grove_lcd_ipm.c
index 36c7247..6343793 100644
--- a/src/zjs_grove_lcd_ipm.c
+++ b/src/zjs_grove_lcd_ipm.c
@@ -75,7 +75,7 @@ static jerry_value_t zjs_glcd_call_remote_function(zjs_ipm_message_t *send)
static jerry_value_t zjs_glcd_call_remote_ignore(zjs_ipm_message_t *send)
{
ZVAL rval = zjs_glcd_call_remote_function(send);
- if (jerry_value_has_error_flag(rval))
+ if (jerry_value_is_error(rval))
return rval;
return ZJS_UNDEFINED;
@@ -231,7 +231,7 @@ static ZJS_DECL_FUNC(zjs_glcd_init)
send.type = TYPE_GLCD_INIT;
ZVAL result = zjs_glcd_call_remote_function(&send);
- if (jerry_value_has_error_flag(result)) {
+ if (jerry_value_is_error(result)) {
return result;
}
diff --git a/src/zjs_modules.c b/src/zjs_modules.c
index 930fc13..ef32ea3 100644
--- a/src/zjs_modules.c
+++ b/src/zjs_modules.c
@@ -50,7 +50,7 @@ static bool javascript_eval_code(const char *source_buffer, ssize_t size,
jerry_value_t *ret_val)
{
(*ret_val) = jerry_eval((jerry_char_t *)source_buffer, size, false);
- if (jerry_value_has_error_flag(*ret_val)) {
+ if (jerry_value_is_error(*ret_val)) {
ERR_PRINT("failed to evaluate JS\n");
return false;
}
@@ -114,7 +114,7 @@ static bool load_js_module_fs(const jerry_value_t module_name,
}
(*result) = jerry_eval((jerry_char_t *)str, len, false);
- if (jerry_value_has_error_flag(*result)) {
+ if (jerry_value_is_error(*result)) {
ERR_PRINT("failed to evaluate JS\n");
ret = false;
} else {
@@ -202,7 +202,7 @@ static ZJS_DECL_FUNC(native_require_handler)
// Try each of the resolvers to see if we can find the requested module
jerry_value_t result = jerryx_module_resolve(argv[0], resolvers, 3);
- if (jerry_value_has_error_flag(result)) {
+ if (jerry_value_is_error(result)) {
DBG_PRINT("Couldn't load module %s\n", module);
return NOTSUPPORTED_ERROR("Module not found");
} else {
@@ -279,12 +279,13 @@ void zjs_modules_check_load_file()
size_t size;
jerry_value_t parsed_code = 0;
buf = read_file_alloc(load_file, &size);
- parsed_code = jerry_parse((const jerry_char_t *)buf, size, false);
+ parsed_code = jerry_parse(NULL, 0, const jerry_char_t *)buf, size,
+ JERRY_PARSE_NO_OPTS);
zjs_free(buf);
- if (!jerry_value_has_error_flag(parsed_code)) {
+ if (!jerry_value_is_error(parsed_code)) {
ZVAL ret_value = jerry_run(parsed_code);
- if (jerry_value_has_error_flag(ret_value)) {
+ if (jerry_value_is_error(ret_value)) {
ERR_PRINT("Error running JS\n");
}
}
diff --git a/src/zjs_sensor.c b/src/zjs_sensor.c
index 92356f2..4692b0f 100644
--- a/src/zjs_sensor.c
+++ b/src/zjs_sensor.c
@@ -171,7 +171,7 @@ void zjs_sensor_trigger_change(jerry_value_t obj)
ZVAL event = zjs_create_object();
// if onreading exists, call it
ZVAL rval = jerry_call_function(func, obj, NULL, 0);
- if (jerry_value_has_error_flag(rval)) {
+ if (jerry_value_is_error(rval)) {
ERR_PRINT("Error calling onreading\n");
}
}
diff --git a/src/zjs_util.c b/src/zjs_util.c
index 7058ab4..d7ddfaf 100644
--- a/src/zjs_util.c
+++ b/src/zjs_util.c
@@ -217,7 +217,7 @@ bool zjs_obj_get_boolean(jerry_value_t obj, const char *name, bool *flag)
ZVAL value = zjs_get_property(obj, name);
bool rval = false;
- if (!jerry_value_has_error_flag(value) && jerry_value_is_boolean(value)) {
+ if (!jerry_value_is_error(value) && jerry_value_is_boolean(value)) {
*flag = jerry_get_boolean_value(value);
rval = true;
}
@@ -237,7 +237,7 @@ bool zjs_obj_get_string(jerry_value_t obj, const char *name, char *buffer,
ZVAL value = zjs_get_property(obj, name);
bool rval = false;
- if (!jerry_value_has_error_flag(value) && jerry_value_is_string(value)) {
+ if (!jerry_value_is_error(value) && jerry_value_is_string(value)) {
jerry_size_t size = len;
zjs_copy_jstring(value, buffer, &size);
if (size)
@@ -254,7 +254,7 @@ bool zjs_obj_get_double(jerry_value_t obj, const char *name, double *num)
ZVAL value = zjs_get_property(obj, name);
bool rval = false;
- if (!jerry_value_has_error_flag(value) && jerry_value_is_number(value)) {
+ if (!jerry_value_is_error(value) && jerry_value_is_number(value)) {
*num = jerry_get_number_value(value);
rval = true;
}
@@ -269,7 +269,7 @@ bool zjs_obj_get_uint32(jerry_value_t obj, const char *name, u32_t *num)
ZVAL value = zjs_get_property(obj, name);
bool rval = false;
- if (!jerry_value_has_error_flag(value) && jerry_value_is_number(value)) {
+ if (!jerry_value_is_error(value) && jerry_value_is_number(value)) {
*num = (u32_t)jerry_get_number_value(value);
rval = true;
}
@@ -284,7 +284,7 @@ bool zjs_obj_get_int32(jerry_value_t obj, const char *name, s32_t *num)
ZVAL value = zjs_get_property(obj, name);
bool rval = false;
- if (!jerry_value_has_error_flag(value) && jerry_value_is_number(value)) {
+ if (!jerry_value_is_error(value) && jerry_value_is_number(value)) {
*num = (s32_t)jerry_get_number_value(value);
rval = true;
}
@@ -738,7 +738,7 @@ int zjs_validate_args(const char *expectations[], const jerry_length_t argc,
int zjs_require_bool_if_prop(jerry_value_t obj, const char *prop, bool *result)
{
ZVAL value = zjs_get_property(obj, prop);
- if (jerry_value_is_undefined(value) || jerry_value_has_error_flag(value)) {
+ if (jerry_value_is_undefined(value) || jerry_value_is_error(value)) {
// not found; leave default
return 0;
}
@@ -755,7 +755,7 @@ int zjs_require_string_if_prop_map(jerry_value_t obj, const char *prop,
str2int_t map[], int maxlen, int *result)
{
ZVAL value = zjs_get_property(obj, prop);
- if (jerry_value_is_undefined(value) || jerry_value_has_error_flag(value)) {
+ if (jerry_value_is_undefined(value) || jerry_value_is_error(value)) {
// not found; leave default
return 0;
}
diff --git a/tools/snapshot.c b/tools/snapshot.c
index f6f7f0e..3da3d62 100644
--- a/tools/snapshot.c
+++ b/tools/snapshot.c
@@ -39,12 +39,13 @@ int main(int argc, char *argv[])
return 1;
}
- size_t size = jerry_parse_and_save_snapshot((jerry_char_t *)script,
- len,
- true,
- false,
- snapshot_buf,
- sizeof(snapshot_buf));
+ size_t size = jerry_generate_snapshot(NULL,
+ 0,
+ (const jerry_char_t *)script,
+ len,
+ 0,
+ snapshot_buf,
+ sizeof(snapshot_buf));
if (script != NULL)
free(script);