new field def compiles, fix test

This commit is contained in:
Torsten Ruger
2015-09-20 16:30:07 +03:00
parent bc70c1efe5
commit f2fc9c5f89
5 changed files with 35 additions and 14 deletions

View File

@ -34,13 +34,14 @@ module Bosl
end
require_relative "compiler/basic_expressions"
require_relative "compiler/name_expression"
require_relative "compiler/callsite_expression"
require_relative "compiler/compound_expressions"
require_relative "compiler/if_expression"
require_relative "compiler/expression_list"
require_relative "compiler/field_def"
require_relative "compiler/function_expression"
require_relative "compiler/if_expression"
require_relative "compiler/module_expression"
require_relative "compiler/name_expression"
require_relative "compiler/operator_expressions"
require_relative "compiler/return_expression"
require_relative "compiler/while_expression"
require_relative "compiler/expression_list"

View File

@ -0,0 +1,16 @@
module Bosl
Compiler.class_eval do
def on_field_def expression
type , name , value = *expression
name = name
index = method.ensure_local( name )
if value
value = process( value )
end
Virtual::Return.new( value )
end
end
end

View File

@ -2,10 +2,11 @@ module Bosl
Compiler.class_eval do
# function attr_reader :name, :params, :body , :receiver
def on_function expression
# puts expression.inspect
return_type , name , parameters, kids = *expression
name = name.to_a.first
args = parameters.to_a.collect do |p|
raise "error, argument must be a identifier, not #{p}" unless p.type == :field
raise "error, argument must be a identifier, not #{p}" unless p.type == :parameter
p[2]
end