321,323c321,324
< def p_decl__object(self, p):
< "decl : type ident pairs SEMI"
< p[0] = ast.ObjDeclAST(self, p[1], p[2], p[3])
---
> # Type fields
> def p_type_members__list(self, p):
> "type_members : type_member type_members"
> p[0] = [ p[1] ] + p[2]
324a326,356
> def p_type_members__empty(self, p):
> "type_members : empty"
> p[0] = []
>
> def p_type_member__0(self, p):
> """type_member : obj_decl
> | func_decl
> | func_def"""
> p[0] = p[1]
>
> # Member / Variable declarations
> def p_decl__obj_decl(self, p):
> "decl : obj_decl"
> p[0] = p[1]
>
> def p_obj_decl__0(self, p):
> "obj_decl : type ident pairs SEMI"
> p[0] = ast.ObjDeclAST(self, p[1], p[2], p[3], None)
>
> def p_obj_decl__1(self, p):
> "obj_decl : type STAR ident pairs SEMI"
> p[0] = ast.ObjDeclAST(self, p[1], p[3], p[4], None)
>
> def p_obj_decl__2(self, p):
> "obj_decl : type ident ASSIGN expr SEMI"
> p[0] = ast.ObjDeclAST(self, p[1], p[2], ast.PairListAST(self), p[4])
>
> def p_obj_decl__3(self, p):
> "obj_decl : type STAR ident ASSIGN expr SEMI"
> p[0] = ast.ObjDeclAST(self, p[1], p[3], ast.PairListAST(self), p[5])
>
334a367,371
> def p_func_decl__1(self, p):
> """func_decl : void ident '(' types ')' pairs SEMI
> | type ident '(' types ')' pairs SEMI"""
> p[0] = ast.FuncDeclAST(self, p[1], p[2], p[4], p[6], None)
>
344,369d380
< # Type fields
< def p_type_members__list(self, p):
< "type_members : type_member type_members"
< p[0] = [ p[1] ] + p[2]
<
< def p_type_members__empty(self, p):
< "type_members : empty"
< p[0] = []
<
< def p_type_method__0(self, p):
< "type_member : type_or_void ident '(' types ')' pairs SEMI"
< p[0] = ast.TypeFieldMethodAST(self, p[1], p[2], p[4], p[6])
<
< def p_type_method__1(self, p):
< "type_member : type_or_void ident '(' params ')' pairs statements"
< p[0] = ast.FuncDeclAST(self, p[1], p[2], p[4], p[6], p[7])
<
< def p_type_member__1(self, p):
< "type_member : type_or_void ident pairs SEMI"
< p[0] = ast.TypeFieldMemberAST(self, p[1], p[2], p[3], None)
<
< def p_type_member__2(self, p):
< "type_member : type_or_void ident ASSIGN expr SEMI"
< p[0] = ast.TypeFieldMemberAST(self, p[1], p[2],
< ast.PairListAST(self), p[4])
<
396,429d406
< # Type
< def p_types__multiple(self, p):
< "types : type ',' types"
< p[0] = [ p[1] ] + p[3]
<
< def p_types__one(self, p):
< "types : type"
< p[0] = [ p[1] ]
<
< def p_types__empty(self, p):
< "types : empty"
< p[0] = []
<
< def p_typestr__multi(self, p):
< "typestr : typestr DOUBLE_COLON ident"
< p[0] = '%s::%s' % (p[1], p[3])
<
< def p_typestr__single(self, p):
< "typestr : ident"
< p[0] = p[1]
<
< def p_type__one(self, p):
< "type : typestr"
< p[0] = ast.TypeAST(self, p[1])
<
< def p_void(self, p):
< "void : VOID"
< p[0] = ast.TypeAST(self, p[1])
<
< def p_type_or_void(self, p):
< """type_or_void : type
< | void"""
< p[0] = p[1]
<
466a444,472
> # Type
> def p_types__multiple(self, p):
> "types : type ',' types"
> p[0] = [ p[1] ] + p[3]
>
> def p_types__one(self, p):
> "types : type"
> p[0] = [ p[1] ]
>
> def p_types__empty(self, p):
> "types : empty"
> p[0] = []
>
> def p_typestr__multi(self, p):
> "typestr : typestr DOUBLE_COLON ident"
> p[0] = '%s::%s' % (p[1], p[3])
>
> def p_typestr__single(self, p):
> "typestr : ident"
> p[0] = p[1]
>
> def p_type__one(self, p):
> "type : typestr"
> p[0] = ast.TypeAST(self, p[1])
>
> def p_void(self, p):
> "void : VOID"
> p[0] = ast.TypeAST(self, p[1])
>