return obj;
}
+static script_obj_t *script_evaluate_set (script_state_t *state,
+ script_exp_t *exp)
+{
+
+ ply_list_t *parameter_data = exp->data.parameters;
+ ply_list_node_t *node_data = ply_list_get_first_node (parameter_data);
+ int index = 0;
+ script_obj_t *obj = script_obj_new_hash ();
+ while (node_data)
+ {
+ script_exp_t *data_exp = ply_list_node_get_data (node_data);
+ script_obj_t *data_obj = script_evaluate (state, data_exp);
+ char *name;
+ asprintf (&name, "%d", index);
+ index++;
+ script_obj_hash_add_element (obj, data_obj, name);
+ free(name);
+
+ node_data = ply_list_get_next_node (parameter_data, node_data);
+ }
+ return obj;
+}
+
static script_obj_t *script_evaluate_assign (script_state_t *state,
script_exp_t *exp)
{
return state->this;
}
+ case SCRIPT_EXP_TYPE_TERM_SET:
+ {
+ return script_evaluate_set (state, exp);
+ }
+
case SCRIPT_EXP_TYPE_TERM_VAR:
{
return script_evaluate_var (state, exp);
return exp;
}
+static script_exp_t *script_parse_new_exp_set (ply_list_t *parameters,
+ script_debug_location_t *location)
+{
+ script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_SET, location);
+ exp->data.parameters = parameters;
+ return exp;
+}
+
static script_op_t *script_parse_new_op (script_op_type_t type,
script_debug_location_t *location)
{
script_scan_get_next_token (scan);
return exp;
}
+
+ if (script_scan_token_is_symbol_of_value (curtoken, '['))
+ {
+ ply_list_t *parameters = ply_list_new ();
+ script_debug_location_t location = curtoken->location;
+ script_scan_get_next_token (scan);
+ while (true)
+ {
+ if (script_scan_token_is_symbol_of_value (curtoken, ']')) break;
+ script_exp_t *parameter = script_parse_exp (scan);
+
+ ply_list_append_data (parameters, parameter);
+
+ curtoken = script_scan_get_current_token (scan);
+ if (script_scan_token_is_symbol_of_value (curtoken, ']')) break;
+ if (!script_scan_token_is_symbol_of_value (curtoken, ','))
+ {
+ script_parse_error (&curtoken->location,
+ "Set parameters should be separated with a ',' and terminated with a ']'");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+ }
+ script_scan_get_next_token (scan);
+ exp = script_parse_new_exp_set (parameters, &location);
+ return exp;
+ }
if (script_scan_token_is_symbol_of_value (curtoken, '('))
{
script_scan_get_next_token (scan);
case SCRIPT_EXP_TYPE_TERM_GLOBAL:
case SCRIPT_EXP_TYPE_TERM_THIS:
break;
-
+ case SCRIPT_EXP_TYPE_TERM_SET:
+ {
+ ply_list_node_t *node;
+ for (node = ply_list_get_first_node (exp->data.parameters);
+ node;
+ node = ply_list_get_next_node (exp->data.parameters, node))
+ {
+ script_exp_t *sub = ply_list_node_get_data (node);
+ script_parse_exp_free (sub);
+ }
+ ply_list_free (exp->data.parameters);
+ break;
+ }
case SCRIPT_EXP_TYPE_FUNCTION_EXE:
{
ply_list_node_t *node;
SCRIPT_EXP_TYPE_TERM_LOCAL,
SCRIPT_EXP_TYPE_TERM_GLOBAL,
SCRIPT_EXP_TYPE_TERM_THIS,
+ SCRIPT_EXP_TYPE_TERM_SET,
SCRIPT_EXP_TYPE_PLUS,
SCRIPT_EXP_TYPE_MINUS,
SCRIPT_EXP_TYPE_MUL,
struct script_exp_t *name;
ply_list_t *parameters;
} function_exe;
+ ply_list_t *parameters;
script_function_t *function_def;
} data;
} script_exp_t;