[Forensics-changes] [yara] 173/192: Improve legibility of object-related code
Hilko Bengen
bengen at moszumanska.debian.org
Sat Jul 1 10:32:01 UTC 2017
This is an automated email from the git hooks/post-receive script.
bengen pushed a commit to annotated tag v3.6.0
in repository yara.
commit 7be98d1489e8f6645ba2b8d624e33dac6f0bfe79
Author: Victor M. Alvarez <plusvic at gmail.com>
Date: Mon May 15 13:09:28 2017 +0200
Improve legibility of object-related code
---
libyara/exec.c | 14 +-
libyara/grammar.c | 450 +++++++++++++++++++++----------------------
libyara/grammar.h | 4 +-
libyara/grammar.y | 8 +-
libyara/include/yara/types.h | 76 +++-----
libyara/object.c | 207 ++++++++++----------
6 files changed, 365 insertions(+), 394 deletions(-)
diff --git a/libyara/exec.c b/libyara/exec.c
index 8037991..e379229 100644
--- a/libyara/exec.c
+++ b/libyara/exec.c
@@ -214,7 +214,7 @@ int yr_execute_code(
{
case OP_NOP:
break;
-
+
case OP_HALT:
assert(sp == 0); // When HALT is reached the stack should be empty.
stop = TRUE;
@@ -481,21 +481,21 @@ int yr_execute_code(
switch(r1.o->type)
{
case OBJECT_TYPE_INTEGER:
- r1.i = ((YR_OBJECT_INTEGER*) r1.o)->value;
+ r1.i = r1.o->value.i;
break;
case OBJECT_TYPE_FLOAT:
- if (isnan(((YR_OBJECT_DOUBLE*) r1.o)->value))
+ if (isnan(r1.o->value.d))
r1.i = UNDEFINED;
else
- r1.d = ((YR_OBJECT_DOUBLE*) r1.o)->value;
+ r1.d = r1.o->value.d;
break;
case OBJECT_TYPE_STRING:
- if (((YR_OBJECT_STRING*) r1.o)->value == NULL)
+ if (r1.o->value.ss == NULL)
r1.i = UNDEFINED;
else
- r1.p = ((YR_OBJECT_STRING*) r1.o)->value;
+ r1.ss = r1.o->value.ss;
break;
default:
@@ -571,7 +571,7 @@ int yr_execute_code(
break;
}
- function = (YR_OBJECT_FUNCTION*) r2.o;
+ function = object_as_function(r2.o);
result = ERROR_INTERNAL_FATAL_ERROR;
for (i = 0; i < MAX_OVERLOADED_FUNCTIONS; i++)
diff --git a/libyara/grammar.c b/libyara/grammar.c
index 48f33c0..ea52503 100644
--- a/libyara/grammar.c
+++ b/libyara/grammar.c
@@ -1649,7 +1649,7 @@ yyreduce:
switch (yyn)
{
case 8:
-#line 230 "grammar.y" /* yacc.c:1646 */
+#line 230 "grammar.y" /* yacc.c:1661 */
{
int result = yr_parser_reduce_import(yyscanner, (yyvsp[0].sized_string));
@@ -1657,11 +1657,11 @@ yyreduce:
ERROR_IF(result != ERROR_SUCCESS);
}
-#line 1661 "grammar.c" /* yacc.c:1646 */
+#line 1661 "grammar.c" /* yacc.c:1661 */
break;
case 9:
-#line 242 "grammar.y" /* yacc.c:1646 */
+#line 242 "grammar.y" /* yacc.c:1661 */
{
YR_RULE* rule = yr_parser_reduce_rule_declaration_phase_1(
yyscanner, (int32_t) (yyvsp[-2].integer), (yyvsp[0].c_string));
@@ -1670,11 +1670,11 @@ yyreduce:
(yyval.rule) = rule;
}
-#line 1674 "grammar.c" /* yacc.c:1646 */
+#line 1674 "grammar.c" /* yacc.c:1661 */
break;
case 10:
-#line 251 "grammar.y" /* yacc.c:1646 */
+#line 251 "grammar.y" /* yacc.c:1661 */
{
YR_RULE* rule = (yyvsp[-4].rule); // rule created in phase 1
@@ -1682,11 +1682,11 @@ yyreduce:
rule->metas = (yyvsp[-1].meta);
rule->strings = (yyvsp[0].string);
}
-#line 1686 "grammar.c" /* yacc.c:1646 */
+#line 1686 "grammar.c" /* yacc.c:1661 */
break;
case 11:
-#line 259 "grammar.y" /* yacc.c:1646 */
+#line 259 "grammar.y" /* yacc.c:1661 */
{
YR_RULE* rule = (yyvsp[-7].rule); // rule created in phase 1
@@ -1697,19 +1697,19 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 1701 "grammar.c" /* yacc.c:1646 */
+#line 1701 "grammar.c" /* yacc.c:1661 */
break;
case 12:
-#line 274 "grammar.y" /* yacc.c:1646 */
+#line 274 "grammar.y" /* yacc.c:1661 */
{
(yyval.meta) = NULL;
}
-#line 1709 "grammar.c" /* yacc.c:1646 */
+#line 1709 "grammar.c" /* yacc.c:1661 */
break;
case 13:
-#line 278 "grammar.y" /* yacc.c:1646 */
+#line 278 "grammar.y" /* yacc.c:1661 */
{
// Each rule have a list of meta-data info, consisting in a
// sequence of YR_META structures. The last YR_META structure does
@@ -1732,19 +1732,19 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 1736 "grammar.c" /* yacc.c:1646 */
+#line 1736 "grammar.c" /* yacc.c:1661 */
break;
case 14:
-#line 305 "grammar.y" /* yacc.c:1646 */
+#line 305 "grammar.y" /* yacc.c:1661 */
{
(yyval.string) = NULL;
}
-#line 1744 "grammar.c" /* yacc.c:1646 */
+#line 1744 "grammar.c" /* yacc.c:1661 */
break;
case 15:
-#line 309 "grammar.y" /* yacc.c:1646 */
+#line 309 "grammar.y" /* yacc.c:1661 */
{
// Each rule have a list of strings, consisting in a sequence
// of YR_STRING structures. The last YR_STRING structure does not
@@ -1767,43 +1767,43 @@ yyreduce:
(yyval.string) = (yyvsp[0].string);
}
-#line 1771 "grammar.c" /* yacc.c:1646 */
+#line 1771 "grammar.c" /* yacc.c:1661 */
break;
case 17:
-#line 340 "grammar.y" /* yacc.c:1646 */
+#line 340 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = 0; }
-#line 1777 "grammar.c" /* yacc.c:1646 */
+#line 1777 "grammar.c" /* yacc.c:1661 */
break;
case 18:
-#line 341 "grammar.y" /* yacc.c:1646 */
+#line 341 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = (yyvsp[-1].integer) | (yyvsp[0].integer); }
-#line 1783 "grammar.c" /* yacc.c:1646 */
+#line 1783 "grammar.c" /* yacc.c:1661 */
break;
case 19:
-#line 346 "grammar.y" /* yacc.c:1646 */
+#line 346 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = RULE_GFLAGS_PRIVATE; }
-#line 1789 "grammar.c" /* yacc.c:1646 */
+#line 1789 "grammar.c" /* yacc.c:1661 */
break;
case 20:
-#line 347 "grammar.y" /* yacc.c:1646 */
+#line 347 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = RULE_GFLAGS_GLOBAL; }
-#line 1795 "grammar.c" /* yacc.c:1646 */
+#line 1795 "grammar.c" /* yacc.c:1661 */
break;
case 21:
-#line 353 "grammar.y" /* yacc.c:1646 */
+#line 353 "grammar.y" /* yacc.c:1661 */
{
(yyval.c_string) = NULL;
}
-#line 1803 "grammar.c" /* yacc.c:1646 */
+#line 1803 "grammar.c" /* yacc.c:1661 */
break;
case 22:
-#line 357 "grammar.y" /* yacc.c:1646 */
+#line 357 "grammar.y" /* yacc.c:1661 */
{
// Tags list is represented in the arena as a sequence
// of null-terminated strings, the sequence ends with an
@@ -1817,11 +1817,11 @@ yyreduce:
(yyval.c_string) = (yyvsp[0].c_string);
}
-#line 1821 "grammar.c" /* yacc.c:1646 */
+#line 1821 "grammar.c" /* yacc.c:1661 */
break;
case 23:
-#line 375 "grammar.y" /* yacc.c:1646 */
+#line 375 "grammar.y" /* yacc.c:1661 */
{
char* identifier;
@@ -1834,11 +1834,11 @@ yyreduce:
(yyval.c_string) = identifier;
}
-#line 1838 "grammar.c" /* yacc.c:1646 */
+#line 1838 "grammar.c" /* yacc.c:1661 */
break;
case 24:
-#line 388 "grammar.y" /* yacc.c:1646 */
+#line 388 "grammar.y" /* yacc.c:1661 */
{
char* tag_name = (yyvsp[-1].c_string);
size_t tag_length = tag_name != NULL ? strlen(tag_name) : 0;
@@ -1870,23 +1870,23 @@ yyreduce:
(yyval.c_string) = (yyvsp[-1].c_string);
}
-#line 1874 "grammar.c" /* yacc.c:1646 */
+#line 1874 "grammar.c" /* yacc.c:1661 */
break;
case 25:
-#line 424 "grammar.y" /* yacc.c:1646 */
+#line 424 "grammar.y" /* yacc.c:1661 */
{ (yyval.meta) = (yyvsp[0].meta); }
-#line 1880 "grammar.c" /* yacc.c:1646 */
+#line 1880 "grammar.c" /* yacc.c:1661 */
break;
case 26:
-#line 425 "grammar.y" /* yacc.c:1646 */
+#line 425 "grammar.y" /* yacc.c:1661 */
{ (yyval.meta) = (yyvsp[-1].meta); }
-#line 1886 "grammar.c" /* yacc.c:1646 */
+#line 1886 "grammar.c" /* yacc.c:1661 */
break;
case 27:
-#line 431 "grammar.y" /* yacc.c:1646 */
+#line 431 "grammar.y" /* yacc.c:1661 */
{
SIZED_STRING* sized_string = (yyvsp[0].sized_string);
@@ -1902,11 +1902,11 @@ yyreduce:
ERROR_IF((yyval.meta) == NULL);
}
-#line 1906 "grammar.c" /* yacc.c:1646 */
+#line 1906 "grammar.c" /* yacc.c:1661 */
break;
case 28:
-#line 447 "grammar.y" /* yacc.c:1646 */
+#line 447 "grammar.y" /* yacc.c:1661 */
{
(yyval.meta) = yr_parser_reduce_meta_declaration(
yyscanner,
@@ -1919,11 +1919,11 @@ yyreduce:
ERROR_IF((yyval.meta) == NULL);
}
-#line 1923 "grammar.c" /* yacc.c:1646 */
+#line 1923 "grammar.c" /* yacc.c:1661 */
break;
case 29:
-#line 460 "grammar.y" /* yacc.c:1646 */
+#line 460 "grammar.y" /* yacc.c:1661 */
{
(yyval.meta) = yr_parser_reduce_meta_declaration(
yyscanner,
@@ -1936,11 +1936,11 @@ yyreduce:
ERROR_IF((yyval.meta) == NULL);
}
-#line 1940 "grammar.c" /* yacc.c:1646 */
+#line 1940 "grammar.c" /* yacc.c:1661 */
break;
case 30:
-#line 473 "grammar.y" /* yacc.c:1646 */
+#line 473 "grammar.y" /* yacc.c:1661 */
{
(yyval.meta) = yr_parser_reduce_meta_declaration(
yyscanner,
@@ -1953,11 +1953,11 @@ yyreduce:
ERROR_IF((yyval.meta) == NULL);
}
-#line 1957 "grammar.c" /* yacc.c:1646 */
+#line 1957 "grammar.c" /* yacc.c:1661 */
break;
case 31:
-#line 486 "grammar.y" /* yacc.c:1646 */
+#line 486 "grammar.y" /* yacc.c:1661 */
{
(yyval.meta) = yr_parser_reduce_meta_declaration(
yyscanner,
@@ -1970,31 +1970,31 @@ yyreduce:
ERROR_IF((yyval.meta) == NULL);
}
-#line 1974 "grammar.c" /* yacc.c:1646 */
+#line 1974 "grammar.c" /* yacc.c:1661 */
break;
case 32:
-#line 502 "grammar.y" /* yacc.c:1646 */
+#line 502 "grammar.y" /* yacc.c:1661 */
{ (yyval.string) = (yyvsp[0].string); }
-#line 1980 "grammar.c" /* yacc.c:1646 */
+#line 1980 "grammar.c" /* yacc.c:1661 */
break;
case 33:
-#line 503 "grammar.y" /* yacc.c:1646 */
+#line 503 "grammar.y" /* yacc.c:1661 */
{ (yyval.string) = (yyvsp[-1].string); }
-#line 1986 "grammar.c" /* yacc.c:1646 */
+#line 1986 "grammar.c" /* yacc.c:1661 */
break;
case 34:
-#line 509 "grammar.y" /* yacc.c:1646 */
+#line 509 "grammar.y" /* yacc.c:1661 */
{
compiler->error_line = yyget_lineno(yyscanner);
}
-#line 1994 "grammar.c" /* yacc.c:1646 */
+#line 1994 "grammar.c" /* yacc.c:1661 */
break;
case 35:
-#line 513 "grammar.y" /* yacc.c:1646 */
+#line 513 "grammar.y" /* yacc.c:1661 */
{
(yyval.string) = yr_parser_reduce_string_declaration(
yyscanner, (int32_t) (yyvsp[0].integer), (yyvsp[-4].c_string), (yyvsp[-1].sized_string));
@@ -2005,19 +2005,19 @@ yyreduce:
ERROR_IF((yyval.string) == NULL);
compiler->error_line = 0;
}
-#line 2009 "grammar.c" /* yacc.c:1646 */
+#line 2009 "grammar.c" /* yacc.c:1661 */
break;
case 36:
-#line 524 "grammar.y" /* yacc.c:1646 */
+#line 524 "grammar.y" /* yacc.c:1661 */
{
compiler->error_line = yyget_lineno(yyscanner);
}
-#line 2017 "grammar.c" /* yacc.c:1646 */
+#line 2017 "grammar.c" /* yacc.c:1661 */
break;
case 37:
-#line 528 "grammar.y" /* yacc.c:1646 */
+#line 528 "grammar.y" /* yacc.c:1661 */
{
(yyval.string) = yr_parser_reduce_string_declaration(
yyscanner, (int32_t) (yyvsp[0].integer) | STRING_GFLAGS_REGEXP, (yyvsp[-4].c_string), (yyvsp[-1].sized_string));
@@ -2029,11 +2029,11 @@ yyreduce:
compiler->error_line = 0;
}
-#line 2033 "grammar.c" /* yacc.c:1646 */
+#line 2033 "grammar.c" /* yacc.c:1661 */
break;
case 38:
-#line 540 "grammar.y" /* yacc.c:1646 */
+#line 540 "grammar.y" /* yacc.c:1661 */
{
(yyval.string) = yr_parser_reduce_string_declaration(
yyscanner, STRING_GFLAGS_HEXADECIMAL, (yyvsp[-2].c_string), (yyvsp[0].sized_string));
@@ -2043,47 +2043,47 @@ yyreduce:
ERROR_IF((yyval.string) == NULL);
}
-#line 2047 "grammar.c" /* yacc.c:1646 */
+#line 2047 "grammar.c" /* yacc.c:1661 */
break;
case 39:
-#line 553 "grammar.y" /* yacc.c:1646 */
+#line 553 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = 0; }
-#line 2053 "grammar.c" /* yacc.c:1646 */
+#line 2053 "grammar.c" /* yacc.c:1661 */
break;
case 40:
-#line 554 "grammar.y" /* yacc.c:1646 */
+#line 554 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = (yyvsp[-1].integer) | (yyvsp[0].integer); }
-#line 2059 "grammar.c" /* yacc.c:1646 */
+#line 2059 "grammar.c" /* yacc.c:1661 */
break;
case 41:
-#line 559 "grammar.y" /* yacc.c:1646 */
+#line 559 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = STRING_GFLAGS_WIDE; }
-#line 2065 "grammar.c" /* yacc.c:1646 */
+#line 2065 "grammar.c" /* yacc.c:1661 */
break;
case 42:
-#line 560 "grammar.y" /* yacc.c:1646 */
+#line 560 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = STRING_GFLAGS_ASCII; }
-#line 2071 "grammar.c" /* yacc.c:1646 */
+#line 2071 "grammar.c" /* yacc.c:1661 */
break;
case 43:
-#line 561 "grammar.y" /* yacc.c:1646 */
+#line 561 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = STRING_GFLAGS_NO_CASE; }
-#line 2077 "grammar.c" /* yacc.c:1646 */
+#line 2077 "grammar.c" /* yacc.c:1661 */
break;
case 44:
-#line 562 "grammar.y" /* yacc.c:1646 */
+#line 562 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = STRING_GFLAGS_FULL_WORD; }
-#line 2083 "grammar.c" /* yacc.c:1646 */
+#line 2083 "grammar.c" /* yacc.c:1661 */
break;
case 45:
-#line 568 "grammar.y" /* yacc.c:1646 */
+#line 568 "grammar.y" /* yacc.c:1661 */
{
int var_index = yr_parser_lookup_loop_variable(yyscanner, (yyvsp[0].c_string));
@@ -2168,11 +2168,11 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 2172 "grammar.c" /* yacc.c:1646 */
+#line 2172 "grammar.c" /* yacc.c:1661 */
break;
case 46:
-#line 653 "grammar.y" /* yacc.c:1646 */
+#line 653 "grammar.y" /* yacc.c:1661 */
{
YR_OBJECT* field = NULL;
@@ -2218,11 +2218,11 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 2222 "grammar.c" /* yacc.c:1646 */
+#line 2222 "grammar.c" /* yacc.c:1661 */
break;
case 47:
-#line 699 "grammar.y" /* yacc.c:1646 */
+#line 699 "grammar.y" /* yacc.c:1661 */
{
YR_OBJECT_ARRAY* array;
YR_OBJECT_DICTIONARY* dict;
@@ -2242,7 +2242,7 @@ yyreduce:
compiler->last_result = yr_parser_emit(
yyscanner, OP_INDEX_ARRAY, NULL);
- array = (YR_OBJECT_ARRAY*) (yyvsp[-3].expression).value.object;
+ array = object_as_array((yyvsp[-3].expression).value.object);
(yyval.expression).type = EXPRESSION_TYPE_OBJECT;
(yyval.expression).value.object = array->prototype_item;
@@ -2263,7 +2263,7 @@ yyreduce:
compiler->last_result = yr_parser_emit(
yyscanner, OP_LOOKUP_DICT, NULL);
- dict = (YR_OBJECT_DICTIONARY*) (yyvsp[-3].expression).value.object;
+ dict = object_as_dictionary((yyvsp[-3].expression).value.object);
(yyval.expression).type = EXPRESSION_TYPE_OBJECT;
(yyval.expression).value.object = dict->prototype_item;
@@ -2279,11 +2279,11 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 2283 "grammar.c" /* yacc.c:1646 */
+#line 2283 "grammar.c" /* yacc.c:1661 */
break;
case 48:
-#line 757 "grammar.y" /* yacc.c:1646 */
+#line 757 "grammar.y" /* yacc.c:1661 */
{
YR_OBJECT_FUNCTION* function;
char* args_fmt;
@@ -2292,7 +2292,7 @@ yyreduce:
(yyvsp[-3].expression).value.object->type == OBJECT_TYPE_FUNCTION)
{
compiler->last_result = yr_parser_check_types(
- compiler, (YR_OBJECT_FUNCTION*) (yyvsp[-3].expression).value.object, (yyvsp[-1].c_string));
+ compiler, object_as_function((yyvsp[-3].expression).value.object), (yyvsp[-1].c_string));
if (compiler->last_result == ERROR_SUCCESS)
compiler->last_result = yr_arena_write_string(
@@ -2306,7 +2306,7 @@ yyreduce:
NULL,
NULL);
- function = (YR_OBJECT_FUNCTION*) (yyvsp[-3].expression).value.object;
+ function = object_as_function((yyvsp[-3].expression).value.object);
(yyval.expression).type = EXPRESSION_TYPE_OBJECT;
(yyval.expression).value.object = function->return_obj;
@@ -2324,23 +2324,23 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 2328 "grammar.c" /* yacc.c:1646 */
+#line 2328 "grammar.c" /* yacc.c:1661 */
break;
case 49:
-#line 801 "grammar.y" /* yacc.c:1646 */
+#line 801 "grammar.y" /* yacc.c:1661 */
{ (yyval.c_string) = yr_strdup(""); }
-#line 2334 "grammar.c" /* yacc.c:1646 */
+#line 2334 "grammar.c" /* yacc.c:1661 */
break;
case 50:
-#line 802 "grammar.y" /* yacc.c:1646 */
+#line 802 "grammar.y" /* yacc.c:1661 */
{ (yyval.c_string) = (yyvsp[0].c_string); }
-#line 2340 "grammar.c" /* yacc.c:1646 */
+#line 2340 "grammar.c" /* yacc.c:1661 */
break;
case 51:
-#line 807 "grammar.y" /* yacc.c:1646 */
+#line 807 "grammar.y" /* yacc.c:1661 */
{
(yyval.c_string) = (char*) yr_malloc(MAX_FUNCTION_ARGS + 1);
@@ -2367,11 +2367,11 @@ yyreduce:
ERROR_IF((yyval.c_string) == NULL);
}
-#line 2371 "grammar.c" /* yacc.c:1646 */
+#line 2371 "grammar.c" /* yacc.c:1661 */
break;
case 52:
-#line 834 "grammar.y" /* yacc.c:1646 */
+#line 834 "grammar.y" /* yacc.c:1661 */
{
if (strlen((yyvsp[-2].c_string)) == MAX_FUNCTION_ARGS)
{
@@ -2405,11 +2405,11 @@ yyreduce:
(yyval.c_string) = (yyvsp[-2].c_string);
}
-#line 2409 "grammar.c" /* yacc.c:1646 */
+#line 2409 "grammar.c" /* yacc.c:1661 */
break;
case 53:
-#line 872 "grammar.y" /* yacc.c:1646 */
+#line 872 "grammar.y" /* yacc.c:1661 */
{
SIZED_STRING* sized_string = (yyvsp[0].sized_string);
RE* re;
@@ -2447,11 +2447,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_REGEXP;
}
-#line 2451 "grammar.c" /* yacc.c:1646 */
+#line 2451 "grammar.c" /* yacc.c:1661 */
break;
case 54:
-#line 914 "grammar.y" /* yacc.c:1646 */
+#line 914 "grammar.y" /* yacc.c:1661 */
{
if ((yyvsp[0].expression).type == EXPRESSION_TYPE_STRING)
{
@@ -2470,11 +2470,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2474 "grammar.c" /* yacc.c:1646 */
+#line 2474 "grammar.c" /* yacc.c:1661 */
break;
case 55:
-#line 936 "grammar.y" /* yacc.c:1646 */
+#line 936 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_emit_with_arg(
yyscanner, OP_PUSH, 1, NULL, NULL);
@@ -2483,11 +2483,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2487 "grammar.c" /* yacc.c:1646 */
+#line 2487 "grammar.c" /* yacc.c:1661 */
break;
case 56:
-#line 945 "grammar.y" /* yacc.c:1646 */
+#line 945 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_emit_with_arg(
yyscanner, OP_PUSH, 0, NULL, NULL);
@@ -2496,11 +2496,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2500 "grammar.c" /* yacc.c:1646 */
+#line 2500 "grammar.c" /* yacc.c:1661 */
break;
case 57:
-#line 954 "grammar.y" /* yacc.c:1646 */
+#line 954 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[-2].expression), EXPRESSION_TYPE_STRING, "matches");
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_REGEXP, "matches");
@@ -2515,11 +2515,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2519 "grammar.c" /* yacc.c:1646 */
+#line 2519 "grammar.c" /* yacc.c:1661 */
break;
case 58:
-#line 969 "grammar.y" /* yacc.c:1646 */
+#line 969 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[-2].expression), EXPRESSION_TYPE_STRING, "contains");
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_STRING, "contains");
@@ -2531,11 +2531,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2535 "grammar.c" /* yacc.c:1646 */
+#line 2535 "grammar.c" /* yacc.c:1661 */
break;
case 59:
-#line 981 "grammar.y" /* yacc.c:1646 */
+#line 981 "grammar.y" /* yacc.c:1661 */
{
int result = yr_parser_reduce_string_identifier(
yyscanner,
@@ -2549,11 +2549,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2553 "grammar.c" /* yacc.c:1646 */
+#line 2553 "grammar.c" /* yacc.c:1661 */
break;
case 60:
-#line 995 "grammar.y" /* yacc.c:1646 */
+#line 995 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_INTEGER, "at");
@@ -2566,11 +2566,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2570 "grammar.c" /* yacc.c:1646 */
+#line 2570 "grammar.c" /* yacc.c:1661 */
break;
case 61:
-#line 1008 "grammar.y" /* yacc.c:1646 */
+#line 1008 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_string_identifier(
yyscanner, (yyvsp[-2].c_string), OP_FOUND_IN, UNDEFINED);
@@ -2581,11 +2581,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2585 "grammar.c" /* yacc.c:1646 */
+#line 2585 "grammar.c" /* yacc.c:1661 */
break;
case 62:
-#line 1019 "grammar.y" /* yacc.c:1646 */
+#line 1019 "grammar.y" /* yacc.c:1661 */
{
if (compiler->loop_depth > 0)
{
@@ -2595,11 +2595,11 @@ yyreduce:
YYERROR;
}
-#line 2599 "grammar.c" /* yacc.c:1646 */
+#line 2599 "grammar.c" /* yacc.c:1661 */
break;
case 63:
-#line 1029 "grammar.y" /* yacc.c:1646 */
+#line 1029 "grammar.y" /* yacc.c:1661 */
{
int var_index;
@@ -2629,11 +2629,11 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 2633 "grammar.c" /* yacc.c:1646 */
+#line 2633 "grammar.c" /* yacc.c:1661 */
break;
case 64:
-#line 1059 "grammar.y" /* yacc.c:1646 */
+#line 1059 "grammar.y" /* yacc.c:1661 */
{
int mem_offset = LOOP_LOCAL_VARS * compiler->loop_depth;
uint8_t* addr;
@@ -2668,11 +2668,11 @@ yyreduce:
compiler->loop_identifier[compiler->loop_depth] = (yyvsp[-4].c_string);
compiler->loop_depth++;
}
-#line 2672 "grammar.c" /* yacc.c:1646 */
+#line 2672 "grammar.c" /* yacc.c:1661 */
break;
case 65:
-#line 1094 "grammar.y" /* yacc.c:1646 */
+#line 1094 "grammar.y" /* yacc.c:1661 */
{
int mem_offset;
@@ -2751,11 +2751,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2755 "grammar.c" /* yacc.c:1646 */
+#line 2755 "grammar.c" /* yacc.c:1661 */
break;
case 66:
-#line 1173 "grammar.y" /* yacc.c:1646 */
+#line 1173 "grammar.y" /* yacc.c:1661 */
{
int mem_offset = LOOP_LOCAL_VARS * compiler->loop_depth;
uint8_t* addr;
@@ -2785,11 +2785,11 @@ yyreduce:
compiler->loop_identifier[compiler->loop_depth] = NULL;
compiler->loop_depth++;
}
-#line 2789 "grammar.c" /* yacc.c:1646 */
+#line 2789 "grammar.c" /* yacc.c:1661 */
break;
case 67:
-#line 1203 "grammar.y" /* yacc.c:1646 */
+#line 1203 "grammar.y" /* yacc.c:1661 */
{
int mem_offset;
@@ -2838,31 +2838,31 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2842 "grammar.c" /* yacc.c:1646 */
+#line 2842 "grammar.c" /* yacc.c:1661 */
break;
case 68:
-#line 1252 "grammar.y" /* yacc.c:1646 */
+#line 1252 "grammar.y" /* yacc.c:1661 */
{
yr_parser_emit(yyscanner, OP_OF, NULL);
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2852 "grammar.c" /* yacc.c:1646 */
+#line 2852 "grammar.c" /* yacc.c:1661 */
break;
case 69:
-#line 1258 "grammar.y" /* yacc.c:1646 */
+#line 1258 "grammar.y" /* yacc.c:1661 */
{
yr_parser_emit(yyscanner, OP_NOT, NULL);
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2862 "grammar.c" /* yacc.c:1646 */
+#line 2862 "grammar.c" /* yacc.c:1661 */
break;
case 70:
-#line 1264 "grammar.y" /* yacc.c:1646 */
+#line 1264 "grammar.y" /* yacc.c:1661 */
{
YR_FIXUP* fixup;
void* jmp_destination_addr;
@@ -2888,11 +2888,11 @@ yyreduce:
fixup->next = compiler->fixup_stack_head;
compiler->fixup_stack_head = fixup;
}
-#line 2892 "grammar.c" /* yacc.c:1646 */
+#line 2892 "grammar.c" /* yacc.c:1661 */
break;
case 71:
-#line 1290 "grammar.y" /* yacc.c:1646 */
+#line 1290 "grammar.y" /* yacc.c:1661 */
{
YR_FIXUP* fixup;
uint8_t* nop_addr;
@@ -2919,11 +2919,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2923 "grammar.c" /* yacc.c:1646 */
+#line 2923 "grammar.c" /* yacc.c:1661 */
break;
case 72:
-#line 1317 "grammar.y" /* yacc.c:1646 */
+#line 1317 "grammar.y" /* yacc.c:1661 */
{
YR_FIXUP* fixup;
void* jmp_destination_addr;
@@ -2948,11 +2948,11 @@ yyreduce:
fixup->next = compiler->fixup_stack_head;
compiler->fixup_stack_head = fixup;
}
-#line 2952 "grammar.c" /* yacc.c:1646 */
+#line 2952 "grammar.c" /* yacc.c:1661 */
break;
case 73:
-#line 1342 "grammar.y" /* yacc.c:1646 */
+#line 1342 "grammar.y" /* yacc.c:1661 */
{
YR_FIXUP* fixup;
uint8_t* nop_addr;
@@ -2979,11 +2979,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2983 "grammar.c" /* yacc.c:1646 */
+#line 2983 "grammar.c" /* yacc.c:1661 */
break;
case 74:
-#line 1369 "grammar.y" /* yacc.c:1646 */
+#line 1369 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, "<", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -2992,11 +2992,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 2996 "grammar.c" /* yacc.c:1646 */
+#line 2996 "grammar.c" /* yacc.c:1661 */
break;
case 75:
-#line 1378 "grammar.y" /* yacc.c:1646 */
+#line 1378 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, ">", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -3005,11 +3005,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 3009 "grammar.c" /* yacc.c:1646 */
+#line 3009 "grammar.c" /* yacc.c:1661 */
break;
case 76:
-#line 1387 "grammar.y" /* yacc.c:1646 */
+#line 1387 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, "<=", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -3018,11 +3018,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 3022 "grammar.c" /* yacc.c:1646 */
+#line 3022 "grammar.c" /* yacc.c:1661 */
break;
case 77:
-#line 1396 "grammar.y" /* yacc.c:1646 */
+#line 1396 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, ">=", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -3031,11 +3031,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 3035 "grammar.c" /* yacc.c:1646 */
+#line 3035 "grammar.c" /* yacc.c:1661 */
break;
case 78:
-#line 1405 "grammar.y" /* yacc.c:1646 */
+#line 1405 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, "==", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -3044,11 +3044,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 3048 "grammar.c" /* yacc.c:1646 */
+#line 3048 "grammar.c" /* yacc.c:1661 */
break;
case 79:
-#line 1414 "grammar.y" /* yacc.c:1646 */
+#line 1414 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, "!=", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -3057,39 +3057,39 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_BOOLEAN;
}
-#line 3061 "grammar.c" /* yacc.c:1646 */
+#line 3061 "grammar.c" /* yacc.c:1661 */
break;
case 80:
-#line 1423 "grammar.y" /* yacc.c:1646 */
+#line 1423 "grammar.y" /* yacc.c:1661 */
{
(yyval.expression) = (yyvsp[0].expression);
}
-#line 3069 "grammar.c" /* yacc.c:1646 */
+#line 3069 "grammar.c" /* yacc.c:1661 */
break;
case 81:
-#line 1427 "grammar.y" /* yacc.c:1646 */
+#line 1427 "grammar.y" /* yacc.c:1661 */
{
(yyval.expression) = (yyvsp[-1].expression);
}
-#line 3077 "grammar.c" /* yacc.c:1646 */
+#line 3077 "grammar.c" /* yacc.c:1661 */
break;
case 82:
-#line 1434 "grammar.y" /* yacc.c:1646 */
+#line 1434 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = INTEGER_SET_ENUMERATION; }
-#line 3083 "grammar.c" /* yacc.c:1646 */
+#line 3083 "grammar.c" /* yacc.c:1661 */
break;
case 83:
-#line 1435 "grammar.y" /* yacc.c:1646 */
+#line 1435 "grammar.y" /* yacc.c:1661 */
{ (yyval.integer) = INTEGER_SET_RANGE; }
-#line 3089 "grammar.c" /* yacc.c:1646 */
+#line 3089 "grammar.c" /* yacc.c:1661 */
break;
case 84:
-#line 1441 "grammar.y" /* yacc.c:1646 */
+#line 1441 "grammar.y" /* yacc.c:1661 */
{
if ((yyvsp[-3].expression).type != EXPRESSION_TYPE_INTEGER)
{
@@ -3107,11 +3107,11 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 3111 "grammar.c" /* yacc.c:1646 */
+#line 3111 "grammar.c" /* yacc.c:1661 */
break;
case 85:
-#line 1463 "grammar.y" /* yacc.c:1646 */
+#line 1463 "grammar.y" /* yacc.c:1661 */
{
if ((yyvsp[0].expression).type != EXPRESSION_TYPE_INTEGER)
{
@@ -3123,11 +3123,11 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 3127 "grammar.c" /* yacc.c:1646 */
+#line 3127 "grammar.c" /* yacc.c:1661 */
break;
case 86:
-#line 1475 "grammar.y" /* yacc.c:1646 */
+#line 1475 "grammar.y" /* yacc.c:1661 */
{
if ((yyvsp[0].expression).type != EXPRESSION_TYPE_INTEGER)
{
@@ -3138,77 +3138,77 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 3142 "grammar.c" /* yacc.c:1646 */
+#line 3142 "grammar.c" /* yacc.c:1661 */
break;
case 87:
-#line 1490 "grammar.y" /* yacc.c:1646 */
+#line 1490 "grammar.y" /* yacc.c:1661 */
{
// Push end-of-list marker
yr_parser_emit_with_arg(yyscanner, OP_PUSH, UNDEFINED, NULL, NULL);
}
-#line 3151 "grammar.c" /* yacc.c:1646 */
+#line 3151 "grammar.c" /* yacc.c:1661 */
break;
case 89:
-#line 1496 "grammar.y" /* yacc.c:1646 */
+#line 1496 "grammar.y" /* yacc.c:1661 */
{
yr_parser_emit_with_arg(yyscanner, OP_PUSH, UNDEFINED, NULL, NULL);
yr_parser_emit_pushes_for_strings(yyscanner, "$*");
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 3162 "grammar.c" /* yacc.c:1646 */
+#line 3162 "grammar.c" /* yacc.c:1661 */
break;
case 92:
-#line 1513 "grammar.y" /* yacc.c:1646 */
+#line 1513 "grammar.y" /* yacc.c:1661 */
{
yr_parser_emit_pushes_for_strings(yyscanner, (yyvsp[0].c_string));
yr_free((yyvsp[0].c_string));
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 3173 "grammar.c" /* yacc.c:1646 */
+#line 3173 "grammar.c" /* yacc.c:1661 */
break;
case 93:
-#line 1520 "grammar.y" /* yacc.c:1646 */
+#line 1520 "grammar.y" /* yacc.c:1661 */
{
yr_parser_emit_pushes_for_strings(yyscanner, (yyvsp[0].c_string));
yr_free((yyvsp[0].c_string));
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 3184 "grammar.c" /* yacc.c:1646 */
+#line 3184 "grammar.c" /* yacc.c:1661 */
break;
case 95:
-#line 1532 "grammar.y" /* yacc.c:1646 */
+#line 1532 "grammar.y" /* yacc.c:1661 */
{
yr_parser_emit_with_arg(yyscanner, OP_PUSH, UNDEFINED, NULL, NULL);
}
-#line 3192 "grammar.c" /* yacc.c:1646 */
+#line 3192 "grammar.c" /* yacc.c:1661 */
break;
case 96:
-#line 1536 "grammar.y" /* yacc.c:1646 */
+#line 1536 "grammar.y" /* yacc.c:1661 */
{
yr_parser_emit_with_arg(yyscanner, OP_PUSH, 1, NULL, NULL);
}
-#line 3200 "grammar.c" /* yacc.c:1646 */
+#line 3200 "grammar.c" /* yacc.c:1661 */
break;
case 97:
-#line 1544 "grammar.y" /* yacc.c:1646 */
+#line 1544 "grammar.y" /* yacc.c:1661 */
{
(yyval.expression) = (yyvsp[-1].expression);
}
-#line 3208 "grammar.c" /* yacc.c:1646 */
+#line 3208 "grammar.c" /* yacc.c:1661 */
break;
case 98:
-#line 1548 "grammar.y" /* yacc.c:1646 */
+#line 1548 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_emit(
yyscanner, OP_FILESIZE, NULL);
@@ -3218,11 +3218,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = UNDEFINED;
}
-#line 3222 "grammar.c" /* yacc.c:1646 */
+#line 3222 "grammar.c" /* yacc.c:1661 */
break;
case 99:
-#line 1558 "grammar.y" /* yacc.c:1646 */
+#line 1558 "grammar.y" /* yacc.c:1661 */
{
yywarning(yyscanner,
"Using deprecated \"entrypoint\" keyword. Use the \"entry_point\" "
@@ -3236,11 +3236,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = UNDEFINED;
}
-#line 3240 "grammar.c" /* yacc.c:1646 */
+#line 3240 "grammar.c" /* yacc.c:1661 */
break;
case 100:
-#line 1572 "grammar.y" /* yacc.c:1646 */
+#line 1572 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[-1].expression), EXPRESSION_TYPE_INTEGER, "intXXXX or uintXXXX");
@@ -3256,11 +3256,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = UNDEFINED;
}
-#line 3260 "grammar.c" /* yacc.c:1646 */
+#line 3260 "grammar.c" /* yacc.c:1661 */
break;
case 101:
-#line 1588 "grammar.y" /* yacc.c:1646 */
+#line 1588 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_emit_with_arg(
yyscanner, OP_PUSH, (yyvsp[0].integer), NULL, NULL);
@@ -3270,11 +3270,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = (yyvsp[0].integer);
}
-#line 3274 "grammar.c" /* yacc.c:1646 */
+#line 3274 "grammar.c" /* yacc.c:1661 */
break;
case 102:
-#line 1598 "grammar.y" /* yacc.c:1646 */
+#line 1598 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_emit_with_arg_double(
yyscanner, OP_PUSH, (yyvsp[0].double_), NULL, NULL);
@@ -3283,11 +3283,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_FLOAT;
}
-#line 3287 "grammar.c" /* yacc.c:1646 */
+#line 3287 "grammar.c" /* yacc.c:1661 */
break;
case 103:
-#line 1607 "grammar.y" /* yacc.c:1646 */
+#line 1607 "grammar.y" /* yacc.c:1661 */
{
SIZED_STRING* sized_string;
@@ -3312,11 +3312,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_STRING;
(yyval.expression).value.sized_string = sized_string;
}
-#line 3316 "grammar.c" /* yacc.c:1646 */
+#line 3316 "grammar.c" /* yacc.c:1661 */
break;
case 104:
-#line 1632 "grammar.y" /* yacc.c:1646 */
+#line 1632 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_string_identifier(
yyscanner, (yyvsp[0].c_string), OP_COUNT, UNDEFINED);
@@ -3328,11 +3328,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = UNDEFINED;
}
-#line 3332 "grammar.c" /* yacc.c:1646 */
+#line 3332 "grammar.c" /* yacc.c:1661 */
break;
case 105:
-#line 1644 "grammar.y" /* yacc.c:1646 */
+#line 1644 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_string_identifier(
yyscanner, (yyvsp[-3].c_string), OP_OFFSET, UNDEFINED);
@@ -3344,11 +3344,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = UNDEFINED;
}
-#line 3348 "grammar.c" /* yacc.c:1646 */
+#line 3348 "grammar.c" /* yacc.c:1661 */
break;
case 106:
-#line 1656 "grammar.y" /* yacc.c:1646 */
+#line 1656 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_emit_with_arg(
yyscanner, OP_PUSH, 1, NULL, NULL);
@@ -3364,11 +3364,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = UNDEFINED;
}
-#line 3368 "grammar.c" /* yacc.c:1646 */
+#line 3368 "grammar.c" /* yacc.c:1661 */
break;
case 107:
-#line 1672 "grammar.y" /* yacc.c:1646 */
+#line 1672 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_string_identifier(
yyscanner, (yyvsp[-3].c_string), OP_LENGTH, UNDEFINED);
@@ -3380,11 +3380,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = UNDEFINED;
}
-#line 3384 "grammar.c" /* yacc.c:1646 */
+#line 3384 "grammar.c" /* yacc.c:1661 */
break;
case 108:
-#line 1684 "grammar.y" /* yacc.c:1646 */
+#line 1684 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_emit_with_arg(
yyscanner, OP_PUSH, 1, NULL, NULL);
@@ -3400,11 +3400,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = UNDEFINED;
}
-#line 3404 "grammar.c" /* yacc.c:1646 */
+#line 3404 "grammar.c" /* yacc.c:1661 */
break;
case 109:
-#line 1700 "grammar.y" /* yacc.c:1646 */
+#line 1700 "grammar.y" /* yacc.c:1661 */
{
if ((yyvsp[0].expression).type == EXPRESSION_TYPE_INTEGER) // loop identifier
{
@@ -3449,11 +3449,11 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 3453 "grammar.c" /* yacc.c:1646 */
+#line 3453 "grammar.c" /* yacc.c:1661 */
break;
case 110:
-#line 1745 "grammar.y" /* yacc.c:1646 */
+#line 1745 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_INTEGER | EXPRESSION_TYPE_FLOAT, "-");
@@ -3472,11 +3472,11 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
-#line 3476 "grammar.c" /* yacc.c:1646 */
+#line 3476 "grammar.c" /* yacc.c:1661 */
break;
case 111:
-#line 1764 "grammar.y" /* yacc.c:1646 */
+#line 1764 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, "+", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -3494,11 +3494,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_FLOAT;
}
}
-#line 3498 "grammar.c" /* yacc.c:1646 */
+#line 3498 "grammar.c" /* yacc.c:1661 */
break;
case 112:
-#line 1782 "grammar.y" /* yacc.c:1646 */
+#line 1782 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, "-", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -3516,11 +3516,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_FLOAT;
}
}
-#line 3520 "grammar.c" /* yacc.c:1646 */
+#line 3520 "grammar.c" /* yacc.c:1661 */
break;
case 113:
-#line 1800 "grammar.y" /* yacc.c:1646 */
+#line 1800 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, "*", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -3538,11 +3538,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_FLOAT;
}
}
-#line 3542 "grammar.c" /* yacc.c:1646 */
+#line 3542 "grammar.c" /* yacc.c:1661 */
break;
case 114:
-#line 1818 "grammar.y" /* yacc.c:1646 */
+#line 1818 "grammar.y" /* yacc.c:1661 */
{
compiler->last_result = yr_parser_reduce_operation(
yyscanner, "\\", (yyvsp[-2].expression), (yyvsp[0].expression));
@@ -3568,11 +3568,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_FLOAT;
}
}
-#line 3572 "grammar.c" /* yacc.c:1646 */
+#line 3572 "grammar.c" /* yacc.c:1661 */
break;
case 115:
-#line 1844 "grammar.y" /* yacc.c:1646 */
+#line 1844 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[-2].expression), EXPRESSION_TYPE_INTEGER, "%");
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_INTEGER, "%");
@@ -3590,11 +3590,11 @@ yyreduce:
ERROR_IF(compiler->last_result != ERROR_SUCCESS);
}
}
-#line 3594 "grammar.c" /* yacc.c:1646 */
+#line 3594 "grammar.c" /* yacc.c:1661 */
break;
case 116:
-#line 1862 "grammar.y" /* yacc.c:1646 */
+#line 1862 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[-2].expression), EXPRESSION_TYPE_INTEGER, "^");
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_INTEGER, "^");
@@ -3604,11 +3604,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = OPERATION(^, (yyvsp[-2].expression).value.integer, (yyvsp[0].expression).value.integer);
}
-#line 3608 "grammar.c" /* yacc.c:1646 */
+#line 3608 "grammar.c" /* yacc.c:1661 */
break;
case 117:
-#line 1872 "grammar.y" /* yacc.c:1646 */
+#line 1872 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[-2].expression), EXPRESSION_TYPE_INTEGER, "^");
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_INTEGER, "^");
@@ -3618,11 +3618,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = OPERATION(&, (yyvsp[-2].expression).value.integer, (yyvsp[0].expression).value.integer);
}
-#line 3622 "grammar.c" /* yacc.c:1646 */
+#line 3622 "grammar.c" /* yacc.c:1661 */
break;
case 118:
-#line 1882 "grammar.y" /* yacc.c:1646 */
+#line 1882 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[-2].expression), EXPRESSION_TYPE_INTEGER, "|");
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_INTEGER, "|");
@@ -3632,11 +3632,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = OPERATION(|, (yyvsp[-2].expression).value.integer, (yyvsp[0].expression).value.integer);
}
-#line 3636 "grammar.c" /* yacc.c:1646 */
+#line 3636 "grammar.c" /* yacc.c:1661 */
break;
case 119:
-#line 1892 "grammar.y" /* yacc.c:1646 */
+#line 1892 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_INTEGER, "~");
@@ -3646,11 +3646,11 @@ yyreduce:
(yyval.expression).value.integer = ((yyvsp[0].expression).value.integer == UNDEFINED) ?
UNDEFINED : ~((yyvsp[0].expression).value.integer);
}
-#line 3650 "grammar.c" /* yacc.c:1646 */
+#line 3650 "grammar.c" /* yacc.c:1661 */
break;
case 120:
-#line 1902 "grammar.y" /* yacc.c:1646 */
+#line 1902 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[-2].expression), EXPRESSION_TYPE_INTEGER, "<<");
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_INTEGER, "<<");
@@ -3660,11 +3660,11 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = OPERATION(<<, (yyvsp[-2].expression).value.integer, (yyvsp[0].expression).value.integer);
}
-#line 3664 "grammar.c" /* yacc.c:1646 */
+#line 3664 "grammar.c" /* yacc.c:1661 */
break;
case 121:
-#line 1912 "grammar.y" /* yacc.c:1646 */
+#line 1912 "grammar.y" /* yacc.c:1661 */
{
CHECK_TYPE((yyvsp[-2].expression), EXPRESSION_TYPE_INTEGER, ">>");
CHECK_TYPE((yyvsp[0].expression), EXPRESSION_TYPE_INTEGER, ">>");
@@ -3674,19 +3674,19 @@ yyreduce:
(yyval.expression).type = EXPRESSION_TYPE_INTEGER;
(yyval.expression).value.integer = OPERATION(>>, (yyvsp[-2].expression).value.integer, (yyvsp[0].expression).value.integer);
}
-#line 3678 "grammar.c" /* yacc.c:1646 */
+#line 3678 "grammar.c" /* yacc.c:1661 */
break;
case 122:
-#line 1922 "grammar.y" /* yacc.c:1646 */
+#line 1922 "grammar.y" /* yacc.c:1661 */
{
(yyval.expression) = (yyvsp[0].expression);
}
-#line 3686 "grammar.c" /* yacc.c:1646 */
+#line 3686 "grammar.c" /* yacc.c:1661 */
break;
-#line 3690 "grammar.c" /* yacc.c:1646 */
+#line 3690 "grammar.c" /* yacc.c:1661 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
diff --git a/libyara/grammar.h b/libyara/grammar.h
index 0e35f37..f8b4bd8 100644
--- a/libyara/grammar.h
+++ b/libyara/grammar.h
@@ -152,7 +152,7 @@ extern int yara_yydebug;
union YYSTYPE
{
-#line 204 "grammar.y" /* yacc.c:1909 */
+#line 204 "grammar.y" /* yacc.c:1915 */
EXPRESSION expression;
SIZED_STRING* sized_string;
@@ -163,7 +163,7 @@ union YYSTYPE
YR_META* meta;
YR_RULE* rule;
-#line 167 "grammar.h" /* yacc.c:1909 */
+#line 167 "grammar.h" /* yacc.c:1915 */
};
typedef union YYSTYPE YYSTYPE;
diff --git a/libyara/grammar.y b/libyara/grammar.y
index 6ba7a91..e7228ca 100644
--- a/libyara/grammar.y
+++ b/libyara/grammar.y
@@ -715,7 +715,7 @@ identifier
compiler->last_result = yr_parser_emit(
yyscanner, OP_INDEX_ARRAY, NULL);
- array = (YR_OBJECT_ARRAY*) $1.value.object;
+ array = object_as_array($1.value.object);
$$.type = EXPRESSION_TYPE_OBJECT;
$$.value.object = array->prototype_item;
@@ -736,7 +736,7 @@ identifier
compiler->last_result = yr_parser_emit(
yyscanner, OP_LOOKUP_DICT, NULL);
- dict = (YR_OBJECT_DICTIONARY*) $1.value.object;
+ dict = object_as_dictionary($1.value.object);
$$.type = EXPRESSION_TYPE_OBJECT;
$$.value.object = dict->prototype_item;
@@ -762,7 +762,7 @@ identifier
$1.value.object->type == OBJECT_TYPE_FUNCTION)
{
compiler->last_result = yr_parser_check_types(
- compiler, (YR_OBJECT_FUNCTION*) $1.value.object, $3);
+ compiler, object_as_function($1.value.object), $3);
if (compiler->last_result == ERROR_SUCCESS)
compiler->last_result = yr_arena_write_string(
@@ -776,7 +776,7 @@ identifier
NULL,
NULL);
- function = (YR_OBJECT_FUNCTION*) $1.value.object;
+ function = object_as_function($1.value.object);
$$.type = EXPRESSION_TYPE_OBJECT;
$$.value.object = function->return_obj;
diff --git a/libyara/include/yara/types.h b/libyara/include/yara/types.h
index 4cf997e..614128c 100644
--- a/libyara/include/yara/types.h
+++ b/libyara/include/yara/types.h
@@ -442,51 +442,35 @@ typedef struct _YR_SCAN_CONTEXT
} YR_SCAN_CONTEXT;
+struct _YR_OBJECT;
-#define OBJECT_COMMON_FIELDS \
- int8_t type; \
- const char* identifier; \
- void* data; \
- struct _YR_OBJECT* parent;
-
-
-typedef struct _YR_OBJECT
-{
- OBJECT_COMMON_FIELDS
-
-} YR_OBJECT;
-
-
-typedef struct _YR_OBJECT_INTEGER
-{
- OBJECT_COMMON_FIELDS
- int64_t value;
-
-} YR_OBJECT_INTEGER;
-
-typedef struct _YR_OBJECT_DOUBLE
+typedef union _YR_VALUE
{
- OBJECT_COMMON_FIELDS
- double value;
-
-} YR_OBJECT_DOUBLE;
+ int64_t i;
+ double d;
+ void* p;
+ struct _YR_OBJECT* o;
+ YR_STRING* s;
+ SIZED_STRING* ss;
+ RE* re;
+} YR_VALUE;
-typedef struct _YR_OBJECT_STRING
-{
- OBJECT_COMMON_FIELDS
- SIZED_STRING* value;
-} YR_OBJECT_STRING;
+#define OBJECT_COMMON_FIELDS \
+ int8_t type; \
+ const char* identifier; \
+ struct _YR_OBJECT* parent; \
+ void* data;
-typedef struct _YR_OBJECT_REGEXP
+typedef struct _YR_OBJECT
{
OBJECT_COMMON_FIELDS
- RE_AST* value;
+ YR_VALUE value;
-} YR_OBJECT_REGEXP;
+} YR_OBJECT;
typedef struct _YR_OBJECT_STRUCTURE
@@ -515,19 +499,6 @@ typedef struct _YR_OBJECT_DICTIONARY
} YR_OBJECT_DICTIONARY;
-typedef union _YR_VALUE {
-
- int64_t i;
- double d;
- void* p;
- YR_OBJECT* o;
- YR_STRING* s;
- SIZED_STRING* ss;
- RE* re;
-
-} YR_VALUE;
-
-
struct _YR_OBJECT_FUNCTION;
@@ -540,17 +511,24 @@ typedef int (*YR_MODULE_FUNC)(
typedef struct _YR_OBJECT_FUNCTION
{
OBJECT_COMMON_FIELDS
-
YR_OBJECT* return_obj;
- struct {
+ struct
+ {
const char* arguments_fmt;
YR_MODULE_FUNC code;
+
} prototypes[MAX_OVERLOADED_FUNCTIONS];
} YR_OBJECT_FUNCTION;
+#define object_as_structure(obj) ((YR_OBJECT_STRUCTURE*) (obj))
+#define object_as_array(obj) ((YR_OBJECT_ARRAY*) (obj))
+#define object_as_dictionary(obj) ((YR_OBJECT_DICTIONARY*) (obj))
+#define object_as_function(obj) ((YR_OBJECT_FUNCTION*) (obj))
+
+
typedef struct _YR_STRUCTURE_MEMBER
{
YR_OBJECT* object;
diff --git a/libyara/object.c b/libyara/object.c
index 5b5b265..6cb1ff9 100644
--- a/libyara/object.c
+++ b/libyara/object.c
@@ -72,13 +72,13 @@ int yr_object_create(
object_size = sizeof(YR_OBJECT_DICTIONARY);
break;
case OBJECT_TYPE_INTEGER:
- object_size = sizeof(YR_OBJECT_INTEGER);
+ object_size = sizeof(YR_OBJECT);
break;
case OBJECT_TYPE_FLOAT:
- object_size = sizeof(YR_OBJECT_DOUBLE);
+ object_size = sizeof(YR_OBJECT);
break;
case OBJECT_TYPE_STRING:
- object_size = sizeof(YR_OBJECT_STRING);
+ object_size = sizeof(YR_OBJECT);
break;
case OBJECT_TYPE_FUNCTION:
object_size = sizeof(YR_OBJECT_FUNCTION);
@@ -99,32 +99,32 @@ int yr_object_create(
switch(type)
{
- case OBJECT_TYPE_STRUCTURE:
- ((YR_OBJECT_STRUCTURE*) obj)->members = NULL;
- break;
- case OBJECT_TYPE_ARRAY:
- ((YR_OBJECT_ARRAY*) obj)->items = NULL;
- ((YR_OBJECT_ARRAY*) obj)->prototype_item = NULL;
- break;
- case OBJECT_TYPE_DICTIONARY:
- ((YR_OBJECT_DICTIONARY*) obj)->items = NULL;
- ((YR_OBJECT_DICTIONARY*) obj)->prototype_item = NULL;
- break;
case OBJECT_TYPE_INTEGER:
- ((YR_OBJECT_INTEGER*) obj)->value = UNDEFINED;
+ obj->value.i = UNDEFINED;
break;
case OBJECT_TYPE_FLOAT:
- ((YR_OBJECT_DOUBLE*) obj)->value = NAN;
+ obj->value.d = NAN;
break;
case OBJECT_TYPE_STRING:
- ((YR_OBJECT_STRING*) obj)->value = NULL;
+ obj->value.ss = NULL;
+ break;
+ case OBJECT_TYPE_STRUCTURE:
+ object_as_structure(obj)->members = NULL;
+ break;
+ case OBJECT_TYPE_ARRAY:
+ object_as_array(obj)->items = NULL;
+ object_as_array(obj)->prototype_item = NULL;
+ break;
+ case OBJECT_TYPE_DICTIONARY:
+ object_as_dictionary(obj)->items = NULL;
+ object_as_dictionary(obj)->prototype_item = NULL;
break;
case OBJECT_TYPE_FUNCTION:
- ((YR_OBJECT_FUNCTION*) obj)->return_obj = NULL;
+ object_as_function(obj)->return_obj = NULL;
for (i = 0; i < MAX_OVERLOADED_FUNCTIONS; i++)
{
- ((YR_OBJECT_FUNCTION*) obj)->prototypes[i].arguments_fmt = NULL;
- ((YR_OBJECT_FUNCTION*) obj)->prototypes[i].code = NULL;
+ object_as_function(obj)->prototypes[i].arguments_fmt = NULL;
+ object_as_function(obj)->prototypes[i].code = NULL;
}
break;
}
@@ -154,15 +154,15 @@ int yr_object_create(
break;
case OBJECT_TYPE_ARRAY:
- ((YR_OBJECT_ARRAY*) parent)->prototype_item = obj;
+ object_as_array(parent)->prototype_item = obj;
break;
case OBJECT_TYPE_DICTIONARY:
- ((YR_OBJECT_DICTIONARY*) parent)->prototype_item = obj;
+ object_as_dictionary(parent)->prototype_item = obj;
break;
case OBJECT_TYPE_FUNCTION:
- ((YR_OBJECT_FUNCTION*) parent)->return_obj = obj;
+ object_as_function(parent)->return_obj = obj;
break;
}
}
@@ -213,7 +213,7 @@ int yr_object_function_create(
// Try to find if the structure already has a function
// with that name. In that case this is a function overload.
- f = (YR_OBJECT_FUNCTION*) yr_object_lookup_field(parent, identifier);
+ f = object_as_function(yr_object_lookup_field(parent, identifier));
// Overloaded functions must have the same return type.
@@ -238,7 +238,7 @@ int yr_object_function_create(
&return_obj),
yr_object_destroy(o));
- f = (YR_OBJECT_FUNCTION*) o;
+ f = object_as_function(o);
}
for (i = 0; i < MAX_OVERLOADED_FUNCTIONS; i++)
@@ -328,7 +328,6 @@ void yr_object_destroy(
YR_ARRAY_ITEMS* array_items;
YR_DICTIONARY_ITEMS* dict_items;
- SIZED_STRING* str;
int i;
if (object == NULL)
@@ -337,7 +336,7 @@ void yr_object_destroy(
switch(object->type)
{
case OBJECT_TYPE_STRUCTURE:
- member = ((YR_OBJECT_STRUCTURE*) object)->members;
+ member = object_as_structure(object)->members;
while (member != NULL)
{
@@ -349,16 +348,15 @@ void yr_object_destroy(
break;
case OBJECT_TYPE_STRING:
- str = ((YR_OBJECT_STRING*) object)->value;
- if (str != NULL)
- yr_free(str);
+ if (object->value.ss != NULL)
+ yr_free(object->value.ss);
break;
case OBJECT_TYPE_ARRAY:
- if (((YR_OBJECT_ARRAY*) object)->prototype_item != NULL)
- yr_object_destroy(((YR_OBJECT_ARRAY*) object)->prototype_item);
+ if (object_as_array(object)->prototype_item != NULL)
+ yr_object_destroy(object_as_array(object)->prototype_item);
- array_items = ((YR_OBJECT_ARRAY*) object)->items;
+ array_items = object_as_array(object)->items;
if (array_items != NULL)
{
@@ -371,10 +369,10 @@ void yr_object_destroy(
break;
case OBJECT_TYPE_DICTIONARY:
- if (((YR_OBJECT_DICTIONARY*) object)->prototype_item != NULL)
- yr_object_destroy(((YR_OBJECT_DICTIONARY*) object)->prototype_item);
+ if (object_as_dictionary(object)->prototype_item != NULL)
+ yr_object_destroy(object_as_dictionary(object)->prototype_item);
- dict_items = ((YR_OBJECT_DICTIONARY*) object)->items;
+ dict_items = object_as_dictionary(object)->items;
if (dict_items != NULL)
{
@@ -392,7 +390,7 @@ void yr_object_destroy(
break;
case OBJECT_TYPE_FUNCTION:
- yr_object_destroy(((YR_OBJECT_FUNCTION*) object)->return_obj);
+ yr_object_destroy(object_as_function(object)->return_obj);
break;
}
@@ -410,7 +408,7 @@ YR_OBJECT* yr_object_lookup_field(
assert(object != NULL);
assert(object->type == OBJECT_TYPE_STRUCTURE);
- member = ((YR_OBJECT_STRUCTURE*) object)->members;
+ member = object_as_structure(object)->members;
while (member != NULL)
{
@@ -557,8 +555,6 @@ int yr_object_copy(
YR_OBJECT* o;
YR_STRUCTURE_MEMBER* structure_member;
- YR_OBJECT_FUNCTION* func;
- YR_OBJECT_FUNCTION* func_copy;
int i;
@@ -573,42 +569,37 @@ int yr_object_copy(
switch(object->type)
{
case OBJECT_TYPE_INTEGER:
- ((YR_OBJECT_INTEGER*) copy)->value = ((YR_OBJECT_INTEGER*) object)->value;
+ copy->value.i = object->value.i;
break;
- case OBJECT_TYPE_STRING:
- if (((YR_OBJECT_STRING*) object)->value != NULL)
- {
- ((YR_OBJECT_STRING*) copy)->value = sized_string_dup(
- ((YR_OBJECT_STRING*) object)->value);
- }
- else
- {
- ((YR_OBJECT_STRING*) copy)->value = NULL;
- }
+ case OBJECT_TYPE_FLOAT:
+ copy->value.d = object->value.d;
break;
- case OBJECT_TYPE_FLOAT:
- ((YR_OBJECT_DOUBLE*) copy)->value = ((YR_OBJECT_DOUBLE*) object)->value;
+ case OBJECT_TYPE_STRING:
+ if (object->value.ss != NULL)
+ copy->value.ss = sized_string_dup(object->value.ss);
+ else
+ copy->value.ss = NULL;
break;
case OBJECT_TYPE_FUNCTION:
- func = (YR_OBJECT_FUNCTION*) object;
- func_copy = (YR_OBJECT_FUNCTION*) copy;
-
FAIL_ON_ERROR_WITH_CLEANUP(
- yr_object_copy(func->return_obj, &func_copy->return_obj),
- yr_object_destroy(copy));
+ yr_object_copy(
+ object_as_function(object)->return_obj,
+ &object_as_function(copy)->return_obj),
+ yr_object_destroy(copy));
for (i = 0; i < MAX_OVERLOADED_FUNCTIONS; i++)
- func_copy->prototypes[i] = func->prototypes[i];
+ object_as_function(copy)->prototypes[i] = \
+ object_as_function(object)->prototypes[i];
break;
case OBJECT_TYPE_STRUCTURE:
- structure_member = ((YR_OBJECT_STRUCTURE*) object)->members;
+ structure_member = object_as_structure(object)->members;
while (structure_member != NULL)
{
@@ -628,21 +619,21 @@ int yr_object_copy(
case OBJECT_TYPE_ARRAY:
- yr_object_copy(
- ((YR_OBJECT_ARRAY *) object)->prototype_item,
- &o);
+ FAIL_ON_ERROR_WITH_CLEANUP(
+ yr_object_copy(object_as_array(object)->prototype_item, &o),
+ yr_object_destroy(copy));
- ((YR_OBJECT_ARRAY *)copy)->prototype_item = o;
+ object_as_array(copy)->prototype_item = o;
break;
case OBJECT_TYPE_DICTIONARY:
- yr_object_copy(
- ((YR_OBJECT_DICTIONARY *) object)->prototype_item,
- &o);
+ FAIL_ON_ERROR_WITH_CLEANUP(
+ yr_object_copy(object_as_dictionary(object)->prototype_item, &o),
+ yr_object_destroy(copy));
- ((YR_OBJECT_DICTIONARY *)copy)->prototype_item = o;
+ object_as_dictionary(copy)->prototype_item = o;
break;
@@ -677,9 +668,9 @@ int yr_object_structure_set_member(
member->parent = object;
sm->object = member;
- sm->next = ((YR_OBJECT_STRUCTURE*) object)->members;
+ sm->next = object_as_structure(object)->members;
- ((YR_OBJECT_STRUCTURE*) object)->members = sm;
+ object_as_structure(object)->members = sm;
return ERROR_SUCCESS;
}
@@ -698,7 +689,7 @@ YR_OBJECT* yr_object_array_get_item(
if (index < 0)
return NULL;
- array = (YR_OBJECT_ARRAY*) object;
+ array = object_as_array(object);
if (array->items != NULL && array->items->count > index)
result = array->items->objects[index];
@@ -728,7 +719,7 @@ int yr_object_array_set_item(
assert(index >= 0);
assert(object->type == OBJECT_TYPE_ARRAY);
- array = ((YR_OBJECT_ARRAY*) object);
+ array = object_as_array(object);
if (array->items == NULL)
{
@@ -779,7 +770,7 @@ YR_OBJECT* yr_object_dict_get_item(
assert(object->type == OBJECT_TYPE_DICTIONARY);
- dict = (YR_OBJECT_DICTIONARY*) object;
+ dict = object_as_dictionary(object);
if (dict->items != NULL)
{
@@ -814,7 +805,7 @@ int yr_object_dict_set_item(
assert(object->type == OBJECT_TYPE_DICTIONARY);
- dict = ((YR_OBJECT_DICTIONARY*) object);
+ dict = object_as_dictionary(object);
if (dict->items == NULL)
{
@@ -885,11 +876,11 @@ int yr_object_has_undefined_value(
switch(field_obj->type)
{
case OBJECT_TYPE_FLOAT:
- return isnan(((YR_OBJECT_DOUBLE*) field_obj)->value);
+ return isnan(field_obj->value.d);
case OBJECT_TYPE_STRING:
- return ((YR_OBJECT_STRING*) field_obj)->value == NULL;
+ return field_obj->value.ss == NULL;
case OBJECT_TYPE_INTEGER:
- return ((YR_OBJECT_INTEGER*) field_obj)->value == UNDEFINED;
+ return field_obj->value.i == UNDEFINED;
}
return FALSE;
@@ -919,7 +910,7 @@ int64_t yr_object_get_integer(
assertf(integer_obj->type == OBJECT_TYPE_INTEGER,
"type of \"%s\" is not integer\n", field);
- return ((YR_OBJECT_INTEGER*) integer_obj)->value;
+ return integer_obj->value.i;
}
@@ -946,7 +937,7 @@ double yr_object_get_float(
assertf(double_obj->type == OBJECT_TYPE_FLOAT,
"type of \"%s\" is not double\n", field);
- return ((YR_OBJECT_DOUBLE*) double_obj)->value;
+ return double_obj->value.d;
}
@@ -973,7 +964,7 @@ SIZED_STRING* yr_object_get_string(
assertf(string_obj->type == OBJECT_TYPE_STRING,
"type of \"%s\" is not string\n", field);
- return ((YR_OBJECT_STRING*) string_obj)->value;
+ return string_obj->value.ss;
}
@@ -989,8 +980,7 @@ int yr_object_set_integer(
va_start(args, field);
if (field != NULL)
- integer_obj = _yr_object_lookup(
- object, OBJECT_CREATE, field, args);
+ integer_obj = _yr_object_lookup(object, OBJECT_CREATE, field, args);
else
integer_obj = object;
@@ -999,7 +989,7 @@ int yr_object_set_integer(
assert(integer_obj != NULL);
assert(integer_obj->type == OBJECT_TYPE_INTEGER);
- ((YR_OBJECT_INTEGER*) integer_obj)->value = value;
+ integer_obj->value.i = value;
return ERROR_SUCCESS;
}
@@ -1017,8 +1007,7 @@ int yr_object_set_float(
va_start(args, field);
if (field != NULL)
- double_obj = _yr_object_lookup(
- object, OBJECT_CREATE, field, args);
+ double_obj = _yr_object_lookup(object, OBJECT_CREATE, field, args);
else
double_obj = object;
@@ -1027,7 +1016,7 @@ int yr_object_set_float(
assert(double_obj != NULL);
assert(double_obj->type == OBJECT_TYPE_FLOAT);
- ((YR_OBJECT_DOUBLE*) double_obj)->value = value;
+ double_obj->value.d = value;
return ERROR_SUCCESS;
}
@@ -1040,41 +1029,41 @@ int yr_object_set_string(
const char* field,
...)
{
- YR_OBJECT_STRING* string_obj;
+ YR_OBJECT* string_obj;
va_list args;
va_start(args, field);
if (field != NULL)
- string_obj = (YR_OBJECT_STRING*) _yr_object_lookup(
- object, OBJECT_CREATE, field, args);
+ string_obj = _yr_object_lookup(object, OBJECT_CREATE, field, args);
else
- string_obj = (YR_OBJECT_STRING*) object;
+ string_obj = object;
va_end(args);
assert(string_obj != NULL);
assert(string_obj->type == OBJECT_TYPE_STRING);
- if (string_obj->value != NULL)
- yr_free(string_obj->value);
+ if (string_obj->value.ss != NULL)
+ yr_free(string_obj->value.ss);
if (value != NULL)
{
- string_obj->value = (SIZED_STRING*) yr_malloc(len + sizeof(SIZED_STRING));
+ string_obj->value.ss = (SIZED_STRING*) yr_malloc(
+ len + sizeof(SIZED_STRING));
- if (string_obj->value == NULL)
+ if (string_obj->value.ss == NULL)
return ERROR_INSUFFICIENT_MEMORY;
- string_obj->value->length = (uint32_t) len;
- string_obj->value->flags = 0;
+ string_obj->value.ss->length = (uint32_t) len;
+ string_obj->value.ss->flags = 0;
- memcpy(string_obj->value->c_string, value, len);
- string_obj->value->c_string[len] = '\0';
+ memcpy(string_obj->value.ss->c_string, value, len);
+ string_obj->value.ss->c_string[len] = '\0';
}
else
{
- string_obj->value = NULL;
+ string_obj->value.ss = NULL;
}
return ERROR_SUCCESS;
@@ -1115,21 +1104,24 @@ YR_API void yr_object_print_data(
switch(object->type)
{
case OBJECT_TYPE_INTEGER:
- if (((YR_OBJECT_INTEGER*) object)->value != UNDEFINED)
- printf(" = %" PRIu64, ((YR_OBJECT_INTEGER*) object)->value);
+
+ if (object->value.i != UNDEFINED)
+ printf(" = %" PRIu64, object->value.i);
else
printf(" = UNDEFINED");
+
break;
case OBJECT_TYPE_STRING:
- if (((YR_OBJECT_STRING*) object)->value != NULL)
+
+ if (object->value.ss != NULL)
{
size_t l;
printf(" = \"");
- for (l = 0; l < ((YR_OBJECT_STRING*) object)->value->length; l++)
+ for (l = 0; l < object->value.ss->length; l++)
{
- char c = ((YR_OBJECT_STRING*) object)->value->c_string[l];
+ char c = object->value.ss->c_string[l];
if (isprint((unsigned char) c))
printf("%c", c);
@@ -1148,7 +1140,7 @@ YR_API void yr_object_print_data(
case OBJECT_TYPE_STRUCTURE:
- member = ((YR_OBJECT_STRUCTURE*) object)->members;
+ member = object_as_structure(object)->members;
while (member != NULL)
{
@@ -1163,7 +1155,8 @@ YR_API void yr_object_print_data(
break;
case OBJECT_TYPE_ARRAY:
- array_items = ((YR_OBJECT_ARRAY*) object)->items;
+
+ array_items = object_as_array(object)->items;
if (array_items != NULL)
{
@@ -1181,7 +1174,7 @@ YR_API void yr_object_print_data(
case OBJECT_TYPE_DICTIONARY:
- dict_items = ((YR_OBJECT_DICTIONARY*) object)->items;
+ dict_items = object_as_dictionary(object)->items;
if (dict_items != NULL)
{
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/forensics/yara.git
More information about the forensics-changes
mailing list