Filter: index array, sequences, implement bitwise binary operators
[lttng-tools.git] / src / lib / lttng-ctl / filter / filter-grammar-test.c
index 2b9a27dc299543beb38e3191ecd662c406121e40..b5e6616f5e871bdf01fe706cb3375f3418bdec18 100644 (file)
@@ -34,7 +34,8 @@ int main(int argc, char **argv)
 {
        struct filter_parser_ctx *ctx;
        int ret;
-       int print_xml = 0, generate_ir = 0, generate_bytecode = 0;
+       int print_xml = 0, generate_ir = 0, generate_bytecode = 0,
+               print_bytecode = 0;
        int i;
 
        for (i = 1; i < argc; i++) {
@@ -46,6 +47,8 @@ int main(int argc, char **argv)
                        generate_bytecode = 1;
                else if (strcmp(argv[i], "-d") == 0)
                        filter_parser_debug = 1;
+               else if (strcmp(argv[i], "-B") == 0)
+                       print_bytecode = 1;
        }
 
        ctx = filter_parser_ctx_alloc(stdin);
@@ -58,11 +61,6 @@ int main(int argc, char **argv)
                fprintf(stderr, "Parse error\n");
                goto parse_error;
        }
-       ret = filter_visitor_set_parent(ctx);
-       if (ret) {
-               fprintf(stderr, "Set parent error\n");
-               goto parse_error;
-       }
        if (print_xml) {
                ret = filter_visitor_print_xml(ctx, stdout, 0);
                if (ret) {
@@ -101,23 +99,28 @@ int main(int argc, char **argv)
                printf("Size of bytecode generated: %u bytes.\n",
                        bytecode_get_len(&ctx->bytecode->b));
        }
-#if 0
-       if (run_bytecode) {
-               int64_t retval;
 
-               printf("Interpreting bytecode... ");
-               fflush(stdout);
-               ret = bytecode_interpret(&ctx->bytecode->b, &retval, NULL);
-               if (ret) {
-                       fprintf(stderr, "Error interpreting bytecode\n");
-                       goto parse_error;
-               } else {
-                       printf("Bytecode interpret result: %" PRIi64 "\n",
-                               retval);
+       if (print_bytecode) {
+               unsigned int bytecode_len, len, i;
+
+               len = bytecode_get_len(&ctx->bytecode->b);
+               bytecode_len = ctx->bytecode->b.reloc_table_offset;
+               printf("Bytecode:\n");
+               for (i = 0; i < bytecode_len; i++) {
+                       printf("0x%X ",
+                               ((uint8_t *) ctx->bytecode->b.data)[i]);
                }
-               printf("done\n");
+               printf("\n");
+               printf("Reloc table:\n");
+               for (i = bytecode_len; i < len;) {
+                       printf("{ 0x%X, ",
+                               *(uint16_t *) &ctx->bytecode->b.data[i]);
+                       i += sizeof(uint16_t);
+                       printf("%s } ", &((char *) ctx->bytecode->b.data)[i]);
+                       i += strlen(&((char *) ctx->bytecode->b.data)[i]) + 1;
+               }
+               printf("\n");
        }
-#endif //0
 
        filter_bytecode_free(ctx);
        filter_ir_free(ctx);
This page took 0.024865 seconds and 4 git commands to generate.