Class: Rjq::Program

Inherits:
Object
  • Object
show all
Defined in:
lib/rjq/opcodes.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(instructions:, constants: [], definitions: [], module_metadata: {}, module_variables: {}) ⇒ Program

Returns a new instance of Program.



53
54
55
56
57
58
59
# File 'lib/rjq/opcodes.rb', line 53

def initialize(instructions:, constants: [], definitions: [], module_metadata: {}, module_variables: {})
  @instructions = instructions
  @constants = constants
  @definitions = definitions
  @module_metadata = 
  @module_variables = module_variables
end

Instance Attribute Details

#constantsObject (readonly)

Returns the value of attribute constants.



51
52
53
# File 'lib/rjq/opcodes.rb', line 51

def constants
  @constants
end

#definitionsObject (readonly)

Returns the value of attribute definitions.



51
52
53
# File 'lib/rjq/opcodes.rb', line 51

def definitions
  @definitions
end

#instructionsObject (readonly)

Returns the value of attribute instructions.



51
52
53
# File 'lib/rjq/opcodes.rb', line 51

def instructions
  @instructions
end

#module_metadataObject (readonly)

Returns the value of attribute module_metadata.



51
52
53
# File 'lib/rjq/opcodes.rb', line 51

def 
  @module_metadata
end

#module_variablesObject (readonly)

Returns the value of attribute module_variables.



51
52
53
# File 'lib/rjq/opcodes.rb', line 51

def module_variables
  @module_variables
end

Instance Method Details

#disasmObject



61
62
63
64
65
66
67
68
69
# File 'lib/rjq/opcodes.rb', line 61

def disasm
  lines = []
  append_disasm(lines, instructions, 'main', 0)
  definitions.each do |definition|
    append_disasm(lines, definition.body.instructions,
                  "definition:#{definition.name}/#{definition.params.length}", 0)
  end
  lines.join("\n")
end

#finalize!Object



71
72
73
74
75
76
77
78
# File 'lib/rjq/opcodes.rb', line 71

def finalize!
  freeze_value(instructions)
  freeze_value(constants)
  freeze_value(definitions)
  freeze_value()
  freeze_value(module_variables)
  freeze
end