Class: Liquid::C::Expression
- Inherits:
-
Object
- Object
- Liquid::C::Expression
- Defined in:
- ext/liquid_c/expression.c
Direct Known Subclasses
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.strict_parse(markup) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'ext/liquid_c/expression.c', line 63 static VALUE expression_strict_parse(VALUE klass, VALUE markup) { if (NIL_P(markup)) return Qnil; StringValue(markup); char *start = RSTRING_PTR(markup); parser_t p; init_parser(&p, start, start + RSTRING_LEN(markup)); VALUE expr_obj = internal_expression_parse(&p); if (p.cur.type != TOKEN_EOS) rb_enc_raise(utf8_encoding, cLiquidSyntaxError, "[:%s] is not a valid expression", symbol_names[p.cur.type]); return expr_obj; } |
Instance Method Details
#disassemble ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'ext/liquid_c/expression.c', line 93 static VALUE expression_disassemble(VALUE self) { expression_t *expression; Expression_Get_Struct(self, expression); VALUE constants = rb_ary_new(); uint32_t constants_len = (uint32_t)(c_buffer_size(&expression->code.constants) / sizeof(VALUE)); rb_ary_cat(constants, (VALUE *)expression->code.constants.data, constants_len); return vm_assembler_disassemble( expression->code.instructions.data, expression->code.instructions.data_end, &constants ); } |
#evaluate(context) ⇒ Object
81 82 83 84 85 86 |
# File 'ext/liquid_c/expression.c', line 81 VALUE expression_evaluate(VALUE self, VALUE context) { expression_t *expression; Expression_Get_Struct(self, expression); return liquid_vm_evaluate(context, &expression->code); } |