mirror of
https://github.com/twiglet/cs2j.git
synced 2025-01-18 13:15:17 +01:00
wrap javawrapper's arguments so that we know how to treat them. make sure literal types ripple up
This commit is contained in:
parent
a879b884fd
commit
245ca22844
@ -464,7 +464,15 @@ namespace RusticiSoftware.Translator.CLR
|
|||||||
else {
|
else {
|
||||||
methStr.Append("${this}.");
|
methStr.Append("${this}.");
|
||||||
}
|
}
|
||||||
methStr.Append(Name);
|
// special for ToString -> tostring
|
||||||
|
if (Name == "ToString" && Params.Count == 0)
|
||||||
|
{
|
||||||
|
methStr.Append("toString");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
methStr.Append(Name);
|
||||||
|
}
|
||||||
return methStr.ToString() + mkJavaParams(Params);
|
return methStr.ToString() + mkJavaParams(Params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ primary_expression returns [int precedence]
|
|||||||
$precedence = int.MaxValue;
|
$precedence = int.MaxValue;
|
||||||
Dictionary<string,string> templateMap = new Dictionary<string,string>();
|
Dictionary<string,string> templateMap = new Dictionary<string,string>();
|
||||||
}:
|
}:
|
||||||
^(JAVAWRAPPER t=identifier (k=identifier v=expression { templateMap[$k.st.ToString()] = $v.st.ToString(); })*) -> string(payload = { fillTemplate($t.st.ToString(), templateMap) })
|
^(JAVAWRAPPER t=identifier (k=identifier v=wrapped { templateMap[$k.st.ToString()] = $v.st.ToString(); })*) -> string(payload = { fillTemplate($t.st.ToString(), templateMap) })
|
||||||
| ^(INDEX expression expression_list?) { $precedence = precedence[INDEX]; } -> index(func= { $expression.st }, funcparens = { comparePrecedence(precedence[INDEX], $expression.precedence) < 0 }, args = { $expression_list.st } )
|
| ^(INDEX expression expression_list?) { $precedence = precedence[INDEX]; } -> index(func= { $expression.st }, funcparens = { comparePrecedence(precedence[INDEX], $expression.precedence) < 0 }, args = { $expression_list.st } )
|
||||||
| ^(APPLY expression argument_list?) { $precedence = precedence[APPLY]; } -> application(func= { $expression.st }, funcparens = { comparePrecedence(precedence[APPLY], $expression.precedence) < 0 }, args = { $argument_list.st } )
|
| ^(APPLY expression argument_list?) { $precedence = precedence[APPLY]; } -> application(func= { $expression.st }, funcparens = { comparePrecedence(precedence[APPLY], $expression.precedence) < 0 }, args = { $argument_list.st } )
|
||||||
| ^((op=POSTINC|op=POSTDEC) expression) { $precedence = precedence[$op.token.Type]; }
|
| ^((op=POSTINC|op=POSTDEC) expression) { $precedence = precedence[$op.token.Type]; }
|
||||||
@ -426,6 +426,11 @@ rank_specifier:
|
|||||||
// dim_separators:
|
// dim_separators:
|
||||||
// ','+ ;
|
// ','+ ;
|
||||||
|
|
||||||
|
wrapped:
|
||||||
|
^(JAVAWRAPPEREXPRESSION expression) -> { $expression.st }
|
||||||
|
| ^(JAVAWRAPPERARGUMENT argument_value) -> { $argument_value.st }
|
||||||
|
;
|
||||||
|
|
||||||
delegate_creation_expression:
|
delegate_creation_expression:
|
||||||
// 'new'
|
// 'new'
|
||||||
type_name '(' type_name ')' ;
|
type_name '(' type_name ')' ;
|
||||||
|
@ -131,6 +131,22 @@ scope SymTab {
|
|||||||
return (CommonTree)adaptor.RulePostProcessing(root);
|
return (CommonTree)adaptor.RulePostProcessing(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected CommonTree wrapExpression(CommonTree e, IToken tok) {
|
||||||
|
CommonTree root = (CommonTree)adaptor.Nil;
|
||||||
|
root = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(JAVAWRAPPEREXPRESSION, tok, "EXPRESSION"), root);
|
||||||
|
adaptor.AddChild(root, dupTree(e));
|
||||||
|
|
||||||
|
return (CommonTree)adaptor.RulePostProcessing(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected CommonTree wrapArgument(CommonTree e, IToken tok) {
|
||||||
|
CommonTree root = (CommonTree)adaptor.Nil;
|
||||||
|
root = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(JAVAWRAPPERARGUMENT, tok, "ARGUMENT"), root);
|
||||||
|
adaptor.AddChild(root, dupTree(e));
|
||||||
|
|
||||||
|
return (CommonTree)adaptor.RulePostProcessing(root);
|
||||||
|
}
|
||||||
|
|
||||||
// Resolve Routines
|
// Resolve Routines
|
||||||
// protected ResolveResult ResolveGetter(InterfaceRepTemplate thisType, String name) {
|
// protected ResolveResult ResolveGetter(InterfaceRepTemplate thisType, String name) {
|
||||||
// ResolveResult ret = null;
|
// ResolveResult ret = null;
|
||||||
@ -221,10 +237,10 @@ scope {
|
|||||||
MethodRepTemplate methodRep = methodResult.Result as MethodRepTemplate;
|
MethodRepTemplate methodRep = methodResult.Result as MethodRepTemplate;
|
||||||
Dictionary<string,CommonTree> myMap = new Dictionary<string,CommonTree>();
|
Dictionary<string,CommonTree> myMap = new Dictionary<string,CommonTree>();
|
||||||
if (!implicitThis) {
|
if (!implicitThis) {
|
||||||
myMap["this"] = $e2.tree;
|
myMap["this"] = wrapExpression($e2.tree, $i2.tree.Token);
|
||||||
}
|
}
|
||||||
for (int idx = 0; idx < methodRep.Params.Count; idx++) {
|
for (int idx = 0; idx < methodRep.Params.Count; idx++) {
|
||||||
myMap[methodRep.Params[idx].Name] = $argument_list.argTrees[idx];
|
myMap[methodRep.Params[idx].Name] = wrapArgument($argument_list.argTrees[idx], $i2.tree.Token);
|
||||||
}
|
}
|
||||||
ret = mkJavaWrapper(methodResult.Result.Java, myMap, $i2.tree.Token);
|
ret = mkJavaWrapper(methodResult.Result.Java, myMap, $i2.tree.Token);
|
||||||
Imports.Add(methodResult.Result.Imports);
|
Imports.Add(methodResult.Result.Imports);
|
||||||
@ -254,7 +270,7 @@ scope {
|
|||||||
if (fieldResult != null) {
|
if (fieldResult != null) {
|
||||||
Debug($d1.token.Line + ": Found '" + $i1.thetext + "'");
|
Debug($d1.token.Line + ": Found '" + $i1.thetext + "'");
|
||||||
Dictionary<string,CommonTree> myMap = new Dictionary<string,CommonTree>();
|
Dictionary<string,CommonTree> myMap = new Dictionary<string,CommonTree>();
|
||||||
myMap["this"] = $e1.tree;
|
myMap["this"] = wrapExpression($e1.tree, $i1.tree.Token);
|
||||||
ret = mkJavaWrapper(fieldResult.Result.Java, myMap, $i1.tree.Token);
|
ret = mkJavaWrapper(fieldResult.Result.Java, myMap, $i1.tree.Token);
|
||||||
Imports.Add(fieldResult.Result.Imports);
|
Imports.Add(fieldResult.Result.Imports);
|
||||||
$dotNetType = fieldResult.ResultType;
|
$dotNetType = fieldResult.ResultType;
|
||||||
@ -324,7 +340,8 @@ scope {
|
|||||||
$dotNetType = new UnknownRepTemplate($identifier.thetext);
|
$dotNetType = new UnknownRepTemplate($identifier.thetext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| primary_expression_start
|
| primary_expression_start { $dotNetType = $primary_expression_start.dotNetType; }
|
||||||
|
| literal { $dotNetType = $literal.dotNetType; }
|
||||||
// ('this' brackets) => 'this' brackets primary_expression_part*
|
// ('this' brackets) => 'this' brackets primary_expression_part*
|
||||||
// | ('base' brackets) => 'this' brackets primary_expression_part*
|
// | ('base' brackets) => 'this' brackets primary_expression_part*
|
||||||
// | primary_expression_start primary_expression_part*
|
// | primary_expression_start primary_expression_part*
|
||||||
@ -345,7 +362,6 @@ scope {
|
|||||||
|
|
||||||
primary_expression_start returns [TypeRepTemplate dotNetType]:
|
primary_expression_start returns [TypeRepTemplate dotNetType]:
|
||||||
^('::' identifier identifier)
|
^('::' identifier identifier)
|
||||||
| literal
|
|
||||||
;
|
;
|
||||||
|
|
||||||
primary_expression_part:
|
primary_expression_part:
|
||||||
@ -370,7 +386,7 @@ argument_list returns [List<TypeRepTemplate> argTypes, List<CommonTree> argTrees
|
|||||||
$argTypes = new List<TypeRepTemplate>();
|
$argTypes = new List<TypeRepTemplate>();
|
||||||
$argTrees = new List<CommonTree>();
|
$argTrees = new List<CommonTree>();
|
||||||
}:
|
}:
|
||||||
^(ARGS (argument { $argTypes.Add($argument.dotNetType); $argTrees.Add($argument.tree); })+);
|
^(ARGS (argument { $argTypes.Add($argument.dotNetType); $argTrees.Add(dupTree($argument.tree)); })+);
|
||||||
// 4.0
|
// 4.0
|
||||||
argument returns [TypeRepTemplate dotNetType]:
|
argument returns [TypeRepTemplate dotNetType]:
|
||||||
argument_name argument_value { $dotNetType = $argument_value.dotNetType; }
|
argument_name argument_value { $dotNetType = $argument_value.dotNetType; }
|
||||||
@ -632,8 +648,8 @@ scope {
|
|||||||
Debug($i.tree.Token.Line + ": Found '" + $i.thetext + "'");
|
Debug($i.tree.Token.Line + ": Found '" + $i.thetext + "'");
|
||||||
Dictionary<string,CommonTree> valMap = new Dictionary<string,CommonTree>();
|
Dictionary<string,CommonTree> valMap = new Dictionary<string,CommonTree>();
|
||||||
if (!isThis)
|
if (!isThis)
|
||||||
valMap["this"] = $se.tree;
|
valMap["this"] = wrapExpression($se.tree, $i.tree.Token);
|
||||||
valMap["value"] = $rhs.tree;
|
valMap["value"] = wrapExpression($rhs.tree, $i.tree.Token);
|
||||||
ret = mkJavaWrapper(((PropRepTemplate)fieldResult.Result).JavaSet, valMap, $a.token);
|
ret = mkJavaWrapper(((PropRepTemplate)fieldResult.Result).JavaSet, valMap, $a.token);
|
||||||
Imports.Add(fieldResult.Result.Imports);
|
Imports.Add(fieldResult.Result.Imports);
|
||||||
}
|
}
|
||||||
|
@ -127,6 +127,8 @@ tokens {
|
|||||||
PAYLOAD; // carries arbitrary text for the output file
|
PAYLOAD; // carries arbitrary text for the output file
|
||||||
PAYLOAD_LIST;
|
PAYLOAD_LIST;
|
||||||
JAVAWRAPPER;
|
JAVAWRAPPER;
|
||||||
|
JAVAWRAPPEREXPRESSION;
|
||||||
|
JAVAWRAPPERARGUMENT;
|
||||||
SEP;
|
SEP;
|
||||||
KGHOLE;
|
KGHOLE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user