modulize field_access and field_def
This commit is contained in:
parent
4da13c3867
commit
059fb38f08
@ -3,7 +3,8 @@ require_relative "tree"
|
||||
module Typed
|
||||
|
||||
CompilerModules = [ "assignment" , "basic_values" , "call_site", "class_field" ,
|
||||
"class_statement" , "if_statement" , "name_expression"]
|
||||
"class_statement" , "collections" , "field_def" , "field_access",
|
||||
"if_statement" , "name_expression"]
|
||||
|
||||
CompilerModules.each do |mod|
|
||||
require_relative "compiler/" + mod
|
||||
@ -189,9 +190,6 @@ module Typed
|
||||
end
|
||||
end
|
||||
|
||||
require_relative "compiler/collections"
|
||||
require_relative "compiler/field_def"
|
||||
require_relative "compiler/field_access"
|
||||
require_relative "compiler/function_definition"
|
||||
require_relative "compiler/operator_value"
|
||||
require_relative "compiler/return_statement"
|
||||
|
@ -1,5 +1,6 @@
|
||||
module Typed
|
||||
Compiler.class_eval do
|
||||
|
||||
module Collections
|
||||
|
||||
# attr_reader :values
|
||||
def on_array statement, context
|
||||
|
@ -1,15 +1,12 @@
|
||||
module Typed
|
||||
Compiler.class_eval do
|
||||
module FieldAccess
|
||||
|
||||
def on_FieldAccess statement
|
||||
# receiver_ast , field_ast = *statement
|
||||
receiver = process(statement.receiver)
|
||||
|
||||
clazz = Register.machine.space.get_class_by_name receiver.type
|
||||
|
||||
field_name = statement.field.name
|
||||
|
||||
|
||||
index = clazz.instance_type.variable_index(field_name)
|
||||
raise "field access, but no such field:#{field_name} for class #{clazz.name}" unless index
|
||||
value = use_reg(clazz.instance_type.type_at(index))
|
||||
|
@ -1,11 +1,11 @@
|
||||
module Typed
|
||||
Compiler.class_eval do
|
||||
module FieldDef
|
||||
include AST::Sexp
|
||||
|
||||
def on_FieldDef statement
|
||||
reset_regs # field_def is a statement, no return and all regs
|
||||
#puts statement.inspect
|
||||
# type , name , value = *statement
|
||||
|
||||
reset_regs # field_def is a statement, no return and all regs
|
||||
name_s = no_space( statement.name.value )
|
||||
@method.ensure_local( name_s, statement.type ) unless( @method.has_arg(name_s))
|
||||
# if there is a value assigned, process it as am assignemnt statement (kind of call on_assign)
|
||||
|
@ -1,5 +1,7 @@
|
||||
module Typed
|
||||
module Tree
|
||||
class FieldAccess < Expression
|
||||
attr_accessor :receiver , :field
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user