[Nice-commit] Nice/src/bossa/parser Parser.jj,1.211,1.212
Brought to you by:
bonniot
From: <bo...@us...> - 2003-11-15 13:02:20
|
Update of /cvsroot/nice/Nice/src/bossa/parser In directory sc8-pr-cvs1:/tmp/cvs-serv23249/src/bossa/parser Modified Files: Parser.jj Log Message: Initial support for constraints prefixing a class definition. Index: Parser.jj =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/parser/Parser.jj,v retrieving revision 1.211 retrieving revision 1.212 diff -C2 -d -r1.211 -r1.212 *** Parser.jj 8 Oct 2003 21:51:42 -0000 1.211 --- Parser.jj 15 Nov 2003 13:02:16 -0000 1.212 *************** *** 949,953 **** } ! ClassDefinition classDefinition(List definitions): { ClassDefinition res; --- 949,955 ---- } ! // The constraint prefixing the class keyword is optional ! // It is useful for complex constraints ! ClassDefinition classDefinition(Constraint cst, List definitions): { ClassDefinition res; *************** *** 959,966 **** } { ( "interface" name=ident() ! [ parameters=classTypeParameters(typeParametersVariances) ] { List ext = null; } [ "extends" ext = interfaces() ] --- 961,969 ---- } { + ( "interface" name=ident() ! [ parameters=classTypeParameters(cst, typeParametersVariances) ] { List ext = null; } [ "extends" ext = interfaces() ] *************** *** 976,980 **** "class" name=ident() ! [ parameters=classTypeParameters(typeParametersVariances) ] { TypeIdent sup = null; } --- 979,983 ---- "class" name=ident() ! [ parameters=classTypeParameters(cst, typeParametersVariances) ] { TypeIdent sup = null; } *************** *** 1049,1053 **** } ! AbstractInterface interfaceDefinition(): { LocatedString name; --- 1052,1056 ---- } ! AbstractInterface interfaceDefinition(Constraint prefix): { LocatedString name; *************** *** 1060,1064 **** "abstract" "interface" name=ident() ! [ parameters=classTypeParameters(typeParametersVariances) ] [ "extends" extensions=interfaces() ] "{" --- 1063,1067 ---- "abstract" "interface" name=ident() ! [ parameters=classTypeParameters(prefix, typeParametersVariances) ] [ "extends" extensions=interfaces() ] "{" *************** *** 1092,1110 **** ! MethodContainer.Constraint classTypeParameters(List tags): { List binders = new ArrayList(3); List atoms = new ArrayList(3); MonotypeVar var; } { ! "<" var=taggedMonotypeVar(tags, atoms) { binders.add(var); } ( "," var=taggedMonotypeVar(tags, atoms) { binders.add(var); } )* [ "|" atomics(atoms) ] ">" ! { MonotypeVar[] b = (MonotypeVar[]) binders.toArray(new MonotypeVar[binders.size()]); ! return new MethodContainer.Constraint(b, atoms); } } --- 1095,1120 ---- ! MethodContainer.Constraint classTypeParameters(Constraint prefix, List tags): { List binders = new ArrayList(3); List atoms = new ArrayList(3); MonotypeVar var; + Token start; } { ! start="<" var=taggedMonotypeVar(tags, atoms) { binders.add(var); } ( "," var=taggedMonotypeVar(tags, atoms) { binders.add(var); } )* [ "|" atomics(atoms) ] ">" ! { ! // For the moment, disallow constraints to come from both the prefix ! // and the type parameters. ! if (prefix != Constraint.True && atoms.size() > 0) ! throw bossa.util.User.error ! (Location.make(start), "Constraints on type parameters should all be specified in the prefix constraint"); ! MonotypeVar[] b = (MonotypeVar[]) binders.toArray(new MonotypeVar[binders.size()]); ! return new MethodContainer.Constraint(prefix, b, atoms); } } *************** *** 1263,1277 **** } ! Definition methodDeclaration(): { LocatedString name; Monotype returnType; FormalParameters parameters; - Constraint cst; Definition res; List statements = new LinkedList(); } { - cst=constraint() returnType=monotype() name=identOrBackquoted() --- 1273,1285 ---- } ! Definition methodDeclaration(Constraint cst): { LocatedString name; Monotype returnType; FormalParameters parameters; Definition res; List statements = new LinkedList(); } { returnType=monotype() name=identOrBackquoted() *************** *** 1439,1443 **** ( LOOKAHEAD ( "abstract" "interface" ) ! res=interfaceDefinition() | LOOKAHEAD( ("class" | "interface") fullyQualifiedName() ) --- 1447,1451 ---- ( LOOKAHEAD ( "abstract" "interface" ) ! res=interfaceDefinition(Constraint.True) | LOOKAHEAD( ("class" | "interface") fullyQualifiedName() ) *************** *** 1450,1455 **** ( res=globalVariable() | res=enumDefinition() ! | res=classDefinition(definitions) ! | res=methodDeclaration() ) ) --- 1458,1465 ---- ( res=globalVariable() | res=enumDefinition() ! | { Constraint cst; } cst = constraint() ! ( res=classDefinition(cst, definitions) ! | res=methodDeclaration(cst) ! ) ) ) |