Esempio n. 1
0
 private IRubyObject ensureParsedAndDecoded(ThreadContext ctx, String ivname) {
   ErrorCollector collector = new ErrorCollector();
   try {
     if (!template.isParsed()) {
       ParseStrategy s = template.accept(ctx, CodecStrategyVisitor.INSTANCE);
       parse(ctx, this, template, s, collector);
       collector.clear();
     }
     RubyAsn1Template v = (RubyAsn1Template) getInstanceVariable(ivname);
     if (v == null) return ctx.getRuntime().getNil();
     Asn1Template valueTemplate = v.getTemplate();
     if (!(valueTemplate.isParsed() && valueTemplate.isDecoded())) {
       ParseStrategy s = valueTemplate.accept(ctx, CodecStrategyVisitor.INSTANCE);
       if (!valueTemplate.isParsed()) {
         parse(ctx, v, valueTemplate, s, collector);
         collector.clear();
       }
       if (!valueTemplate.isDecoded()) {
         decode(ctx, v, valueTemplate, s, collector);
       }
     }
     return valueTemplate.getValue();
   } catch (RuntimeException ex) {
     throw templateError(ctx, collector.getErrorMessages(), template.getDefinition());
   }
 }
Esempio n. 2
0
 @JRubyMethod(name = {"_set_callback"})
 public IRubyObject set_callback(ThreadContext ctx, IRubyObject ivname, IRubyObject value) {
   String name = ivname.asJavaString().substring(1);
   RubyAsn1Template container = (RubyAsn1Template) getInstanceVariable(name);
   if (container == null) {
     Asn1Template t = new Asn1Template(null, null, null);
     t.setParsed(true);
     t.setDecoded(true);
     container = new RubyAsn1Template(ctx.getRuntime(), cTemplateValue, t);
     setInstanceVariable(name, container);
   }
   container.getTemplate().setValue(value);
   template.setModified(true);
   return value;
 }