new field def compiles, fix test
This commit is contained in:
@ -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"
|
||||
|
16
lib/bosl/compiler/field_def.rb
Normal file
16
lib/bosl/compiler/field_def.rb
Normal 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
|
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user