Sha256: a03cee490105ed38b8ec98009d1db56933424c9a20943c43619e0b19300453e0

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

#include "ruby.h"
#include "grammar.hpp"
#include "symbols.hpp"

#ifdef __cplusplus
  extern "C" {
#endif

VALUE melbourne_string_to_ast(VALUE self, VALUE source, VALUE name, VALUE line) {
  bstring b_str = blk2bstr(RSTRING_PTR(source), RSTRING_LEN(source));
  VALUE result = melbourne::string_to_ast(self, RSTRING_PTR(name), b_str, FIX2INT(line));
  bdestroy(b_str);
  return result;
}

VALUE melbourne_file_to_ast(VALUE self, VALUE fname, VALUE start) {
  FILE *file = fopen(RSTRING_PTR(fname), "r");
  if(file) {
    VALUE result = melbourne::file_to_ast(self, RSTRING_PTR(fname), file, FIX2INT(start));
    fclose(file);
    return result;
  } else {
    rb_raise(rb_eLoadError, "no such file to load -- %s", RSTRING_PTR(fname));
  }
}

void Init_melbourne(void) {
  melbourne::init_symbols();
  VALUE rb_mMelbourne = rb_define_module("Melbourne");
  VALUE rb_cParser = rb_define_class_under(rb_mMelbourne, "Parser", rb_cObject);
  rb_define_method(rb_cParser, "string_to_ast", RUBY_METHOD_FUNC(melbourne_string_to_ast), 3);
  rb_define_method(rb_cParser, "file_to_ast", RUBY_METHOD_FUNC(melbourne_file_to_ast), 2);
}

#ifdef __cplusplus
  }  /* extern "C" { */
#endif

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
melbourne-1.0.1 ext/melbourne/melbourne.cpp
melbourne-1.0.0 ext/melbourne/melbourne.cpp