SciRuby / rubex

rubex - A Ruby-like language for writing Ruby C extensions.
BSD 2-Clause "Simplified" License
451 stars 21 forks source link

Error with struct example from tutorial #25

Closed JacobUb closed 7 years ago

JacobUb commented 7 years ago
lib "rubex/ruby"; end

struct mp3info
  int id
  char* title
end

class Music attach mp3info
  def initialize(id, title)
    mp3info* mp3 = data$.mp3info

    mp3.id = id
    mp3.title = title
  end

  def id
    return data$.id
  end

  def title
    return data$.title
  end

  cfunc void deallocate
    xfree(data$.mp3info)
  end
end

Output when compiling:

/home/jacob/.rvm/gems/ruby-2.4.1/gems/rubex-0.0.1/lib/rubex/ast/expression.rb:810:in 
`analyse_command_type': Entry #<Rubex::AST::Expression::CommandCall:0x00000001592df0> does 
not exist in #<Rubex::AST::Expression::ElementRef:0x000000018ff470>. (RuntimeError)
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/expression.rb:749:in `analyse_statement'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/statement.rb:341:in `analyse_statement'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/top_statement.rb:171:in `block in analyse_statement'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/top_statement.rb:170:in `each'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/top_statement.rb:170:in `analyse_statement'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/top_statement.rb:253:in `analyse_statement'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/top_statement.rb:437:in `block in analyse_statement'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/top_statement.rb:433:in `each'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/top_statement.rb:433:in `analyse_statement'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/node.rb:147:in `block in analyse_statement'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/node.rb:146:in `each'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/node.rb:146:in `analyse_statement'
  from [..]/gems/rubex-0.0.1/lib/rubex/ast/node.rb:14:in `process_statements'
  from [..]/gems/rubex-0.0.1/lib/rubex/compiler.rb:50:in `generate_code'
  from [..]/gems/rubex-0.0.1/lib/rubex/compiler.rb:9:in `compile'
  from [..]/gems/rubex-0.0.1/bin/rubex:10:in `<top (required)>'
  from [..]/bin/rubex:23:in `load'
  from [..]/bin/rubex:23:in `<main>'

It compiles if I remove the #id and #title methods.

v0dro commented 7 years ago

Ah. My bad. Fixing.

v0dro commented 7 years ago

Fixed in latest commit.