From 752f86e065705da4e4f7a4c2d153972f7286997c Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Fri, 6 May 2011 12:35:07 +0200 Subject: [PATCH] Ordinarily cast expressions have only unary_expressions as target, but 'as' expansion can provide full expressions --- .../src/CS2JTranslator/CS2JTransform/JavaMaker.g | 4 ++-- .../CS2JTranslator/CS2JTransform/JavaPrettyPrint.g | 2 +- .../src/CS2JTranslator/CS2JTransform/NetMaker.g | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g index 3c013a0..d54a907 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g @@ -840,8 +840,8 @@ relational_expression: ( ((o='<'|o='>'|o='>='|o='<=') s2=shift_expression -> ^($o $relational_expression $s2)) | (i='is' t=non_nullable_type -> ^(INSTANCEOF[$i.Token,"instanceof"] $relational_expression $t) | i1='as' t1=non_nullable_type -> ^(COND_EXPR[$i1.Token, "?:"] - ^(INSTANCEOF[$i1.Token,"instanceof"] { dupTree($relational_expression.tree) } { dupTree($t1.tree) } ) - ^(CAST_EXPR[$i1.Token, "(cast)"] { dupTree($t1.tree) } { dupTree($relational_expression.tree) }) + ^(INSTANCEOF[$i1.Token,"instanceof"] { dupTree($s1.tree) } { dupTree($t1.tree) } ) + ^(CAST_EXPR[$i1.Token, "(cast)"] { dupTree($t1.tree) } { dupTree($s1.tree) }) ^(CAST_EXPR[$i1.Token, "(cast)"] { dupTree($t1.tree) } NULL[$i1.Token, "null"]))) )* ; equality_expression: diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g index 017f118..5e31c1d 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g @@ -734,7 +734,7 @@ unary_expression returns [int precedence] }: //('(' arguments ')' ('[' | '.' | '(')) => primary_or_array_creation_expression // ^(CAST_EXPR type expression) - ^(CAST_EXPR type u0=unary_expression) { $precedence = precedence[CAST_EXPR]; } -> cast_expr(type= { $type.st}, exp = { $u0.st}) + ^(CAST_EXPR type u0=expression) { $precedence = precedence[CAST_EXPR]; } -> cast_expr(type= { $type.st}, exp = { $u0.st}) | primary_or_array_creation_expression { $precedence = $primary_or_array_creation_expression.precedence; } -> { $primary_or_array_creation_expression.st } | ^((op=MONOPLUS | op=MONOMINUS | op=MONONOT | op=MONOTWIDDLE | op=PREINC | op=PREDEC) u1=unary_expression) { $precedence = precedence[$op.token.Type]; } -> op(postparen={ comparePrecedence($op.token, $u1.precedence) <= 0 }, op={ $op.token.Text }, post={$u1.st}) diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g index 58df530..95eeed7 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g @@ -1448,28 +1448,28 @@ cast_expression returns [TypeRepTemplate dotNetType] if (ret != null) $cast_expression.tree = ret; }: - ^(c=CAST_EXPR type unary_expression) + ^(c=CAST_EXPR type expression) { $dotNetType = $type.dotNetType; - if ($type.dotNetType != null && $unary_expression.dotNetType != null) { + if ($type.dotNetType != null && $expression.dotNetType != null) { // see if expression's type has a cast to type - ResolveResult kaster = $unary_expression.dotNetType.ResolveCastTo($type.dotNetType, AppEnv); + ResolveResult kaster = $expression.dotNetType.ResolveCastTo($type.dotNetType, AppEnv); if (kaster == null) { // see if type has a cast from expression's type - kaster = $type.dotNetType.ResolveCastFrom($unary_expression.dotNetType, AppEnv); + kaster = $type.dotNetType.ResolveCastFrom($expression.dotNetType, AppEnv); } if (kaster != null) { if (!String.IsNullOrEmpty(kaster.Result.Warning)) Warning($c.line, kaster.Result.Warning); Dictionary myMap = new Dictionary(); - myMap["expr"] = wrapExpression($unary_expression.tree, $c.token); + myMap["expr"] = wrapExpression($expression.tree, $c.token); myMap["TYPEOF_totype"] = wrapTypeOfType($type.dotNetType, $c.token); - myMap["TYPEOF_expr"] = wrapTypeOfType($unary_expression.dotNetType, $c.token); + myMap["TYPEOF_expr"] = wrapTypeOfType($expression.dotNetType, $c.token); ret = mkJavaWrapper(kaster.Result.Java, myMap, $c.token); AddToImports(kaster.Result.Imports); } } } - -> ^($c { ($unary_expression.dotNetType != null && $unary_expression.dotNetType.TypeName == "System.Object" ? mkBoxedType($type.tree, $type.tree.Token) : $type.tree) } unary_expression) + -> ^($c { ($expression.dotNetType != null && $expression.dotNetType.TypeName == "System.Object" ? mkBoxedType($type.tree, $type.tree.Token) : $type.tree) } expression) // -> ^($c { ($type.dotNetType.IsUnboxedType && !$unary_expression.dotNetType.IsUnboxedType ? mkBoxedType($type.tree, $type.tree.Token) : $type.tree) } unary_expression) ; assignment_operator: