1
0
mirror of https://github.com/twiglet/cs2j.git synced 2025-01-18 13:15:17 +01:00

Build type names. If first type in class_base is a class then extend from it

This commit is contained in:
Kevin Glynn 2011-01-07 18:09:50 +01:00
parent 5016c29910
commit 5e8707c7b9

View File

@ -331,14 +331,14 @@ commas:
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
type_name returns [TypeRepTemplate dotNetType]: type_name returns [TypeRepTemplate dotNetType]:
namespace_or_type_name { $dotNetType = findType("ExternalId" /*$namespace_or_type_name.name*/); } ; namespace_or_type_name { $dotNetType = findType($namespace_or_type_name.name); } ;
namespace_or_type_name returns [String name, List<string> tyargs]: namespace_or_type_name returns [String name, List<string> tyargs]:
type_or_generic type_or_generic { $name = $type_or_generic.name; $tyargs = $type_or_generic.tyargs; }
| ^('::' namespace_or_type_name type_or_generic) | ^('::' namespace_or_type_name type_or_generic) { $name = "System.Object"; } // give up, we don't support these
| ^('.' namespace_or_type_name type_or_generic) ; | ^(d='.' n1=namespace_or_type_name type_or_generic) { WarningAssert($n1.tyargs == null, $d.token.Line, "Didn't expect type arguments in prefix of type name"); $name = $n1.name + "." + $type_or_generic.name; $tyargs = $type_or_generic.tyargs; } ;
type_or_generic returns [TypeRepTemplate dotNetType]: type_or_generic returns [String name, List<String> tyargs]:
(identifier generic_argument_list) => identifier generic_argument_list (identifier generic_argument_list) => identifier { $name = $identifier.text; } generic_argument_list { $tyargs = $generic_argument_list.argTexts; }
| identifier ; | identifier { $name = $identifier.text; };
qid: // qualified_identifier v2 qid: // qualified_identifier v2
^(access_operator qid type_or_generic) ^(access_operator qid type_or_generic)
@ -355,12 +355,15 @@ qid_start:
qid_part: qid_part:
access_identifier ; access_identifier;
generic_argument_list: generic_argument_list returns [List<string> argTexts]:
'<' type_arguments '>' ; '<' type_arguments '>' { $argTexts = $type_arguments.tyTexts; };
type_arguments: type_arguments returns [List<string> tyTexts]
type (',' type)* ; @init {
$tyTexts = new List<String>();
}:
t1=type { $tyTexts.Add($t1.dotNetType.TypeName); } (',' tn=type { $tyTexts.Add($tn.dotNetType.TypeName); })* ;
// TODO add arrays // TODO add arrays
type returns [TypeRepTemplate dotNetType] type returns [TypeRepTemplate dotNetType]
@ -638,7 +641,8 @@ class_implements:
class_implement_or_extend class_implement* ; class_implement_or_extend class_implement* ;
class_implement_or_extend: class_implement_or_extend:
^(i=IMPLEMENTS type) -> ^(EXTENDS[$i.token, "extends"] type); ^(i=IMPLEMENTS t=type) -> { $t.dotNetType is ClassRepTemplate }? ^(EXTENDS[$i.token, "extends"] type)
-> ^($i $t);
class_implement: class_implement:
^(IMPLEMENTS type) ; ^(IMPLEMENTS type) ;