fix field default values
This commit is contained in:
parent
d0b950eed9
commit
c331bdd80a
@ -39,9 +39,9 @@ module Parser
|
||||
rule(:type) { (str("int") | str("ref")).as(:type) >> space }
|
||||
# identifier must start with lower case
|
||||
# TODO rule forbit names like if_true, because it starts with a keyword. a little looser please!
|
||||
rule(:name) { keyword.absent? >> (match['a-z_'] >> match['a-zA-Z0-9_'].repeat).as(:name) >> space? }
|
||||
rule(:name) { (keyword|type).absent? >> (match['a-z_'] >> match['a-zA-Z0-9_'].repeat).as(:name) >> space? }
|
||||
# fields have type
|
||||
rule(:field) { type >> name }
|
||||
rule(:field) { type >> name >> (assign >> value_expression.as(:value) ).maybe}
|
||||
# and class/module names must start with capital
|
||||
# (admittatly the rule matches constants too, but one step at a time)
|
||||
rule(:module_name) { keyword.absent? >> (match['A-Z'] >> match['a-zA-Z0-9_'].repeat).as(:module_name) >> space? }
|
||||
|
@ -15,6 +15,8 @@ module Parser
|
||||
rule(:integer => simple(:value)) { s(:int ,value.to_i) }
|
||||
rule(:name => simple(:name)) { s(:name , name.to_sym) }
|
||||
rule(:type => simple(:type), :name => simple(:name)) { s(:field_def , type.to_sym , name.to_sym) }
|
||||
rule(:type => simple(:type), :name => simple(:name) , :value => simple(:value)) {
|
||||
s(:field_def , type.to_sym , name.to_sym , value ) }
|
||||
|
||||
rule(:module_name => simple(:module_name)) { s(:module,module_name.to_s) }
|
||||
|
||||
|
@ -9,9 +9,7 @@ end
|
||||
s(:expressions,
|
||||
s(:class, :Foo,
|
||||
s(:derives, :Object),
|
||||
s(:name, :int),
|
||||
s(:assign,
|
||||
s(:name, :field),
|
||||
s(:field_def, :int, :field,
|
||||
s(:int, 3)),
|
||||
s(:function, :int,
|
||||
s(:name, :func),
|
||||
|
@ -13,9 +13,7 @@ s(:expressions,
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :x)),
|
||||
s(:expressions,
|
||||
s(:name, :int),
|
||||
s(:assign,
|
||||
s(:name, :abba),
|
||||
s(:field_def, :int, :abba,
|
||||
s(:int, 5)),
|
||||
s(:operator, "+",
|
||||
s(:name, :abba),
|
||||
|
@ -9,9 +9,7 @@ s(:expressions,
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :x)),
|
||||
s(:expressions,
|
||||
s(:name, :int),
|
||||
s(:assign,
|
||||
s(:name, :abba),
|
||||
s(:field_def, :int, :abba,
|
||||
s(:int, 5)),
|
||||
s(:operator, "+",
|
||||
s(:name, :abba),
|
||||
|
@ -9,9 +9,7 @@ s(:expressions,
|
||||
s(:parameters,
|
||||
s(:parameter, :ref, :n)),
|
||||
s(:expressions,
|
||||
s(:name, :int),
|
||||
s(:assign,
|
||||
s(:name, :i),
|
||||
s(:field_def, :int, :i,
|
||||
s(:field_access,
|
||||
s(:receiver,
|
||||
s(:name, :n)),
|
||||
|
@ -1,6 +1,6 @@
|
||||
module Opers
|
||||
int foo(int x)
|
||||
int abba = x + self.index
|
||||
int abba = self.index
|
||||
return abba + 5
|
||||
end
|
||||
end
|
||||
@ -12,16 +12,12 @@ s(:expressions,
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :x)),
|
||||
s(:expressions,
|
||||
s(:name, :int),
|
||||
s(:assign,
|
||||
s(:name, :abba),
|
||||
s(:operator, "+",
|
||||
s(:name, :x),
|
||||
s(:field_access,
|
||||
s(:receiver,
|
||||
s(:name, :self)),
|
||||
s(:field,
|
||||
s(:name, :index))))),
|
||||
s(:field_def, :int, :abba,
|
||||
s(:field_access,
|
||||
s(:receiver,
|
||||
s(:name, :self)),
|
||||
s(:field,
|
||||
s(:name, :index)))),
|
||||
s(:return,
|
||||
s(:operator, "+",
|
||||
s(:name, :abba),
|
||||
|
@ -15,9 +15,7 @@ s(:expressions,
|
||||
s(:parameters,
|
||||
s(:parameter, :int, :n)),
|
||||
s(:expressions,
|
||||
s(:name, :int),
|
||||
s(:assign,
|
||||
s(:name, :a),
|
||||
s(:field_def, :int, :a,
|
||||
s(:int, 0)),
|
||||
s(:return,
|
||||
s(:name, :a)))),
|
||||
|
Loading…
x
Reference in New Issue
Block a user