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 {
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -306,7 +306,7 @@ primary_expression returns [int precedence]
|
||||
$precedence = int.MaxValue;
|
||||
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 } )
|
||||
| ^(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]; }
|
||||
@ -426,6 +426,11 @@ rank_specifier:
|
||||
// dim_separators:
|
||||
// ','+ ;
|
||||
|
||||
wrapped:
|
||||
^(JAVAWRAPPEREXPRESSION expression) -> { $expression.st }
|
||||
| ^(JAVAWRAPPERARGUMENT argument_value) -> { $argument_value.st }
|
||||
;
|
||||
|
||||
delegate_creation_expression:
|
||||
// 'new'
|
||||
type_name '(' type_name ')' ;
|
||||
|
@ -131,6 +131,22 @@ scope SymTab {
|
||||
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
|
||||
// protected ResolveResult ResolveGetter(InterfaceRepTemplate thisType, String name) {
|
||||
// ResolveResult ret = null;
|
||||
@ -221,10 +237,10 @@ scope {
|
||||
MethodRepTemplate methodRep = methodResult.Result as MethodRepTemplate;
|
||||
Dictionary<string,CommonTree> myMap = new Dictionary<string,CommonTree>();
|
||||
if (!implicitThis) {
|
||||
myMap["this"] = $e2.tree;
|
||||
myMap["this"] = wrapExpression($e2.tree, $i2.tree.Token);
|
||||
}
|
||||
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);
|
||||
Imports.Add(methodResult.Result.Imports);
|
||||
@ -254,7 +270,7 @@ scope {
|
||||
if (fieldResult != null) {
|
||||
Debug($d1.token.Line + ": Found '" + $i1.thetext + "'");
|
||||
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);
|
||||
Imports.Add(fieldResult.Result.Imports);
|
||||
$dotNetType = fieldResult.ResultType;
|
||||
@ -324,7 +340,8 @@ scope {
|
||||
$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*
|
||||
// | ('base' brackets) => 'this' brackets primary_expression_part*
|
||||
// | primary_expression_start primary_expression_part*
|
||||
@ -345,7 +362,6 @@ scope {
|
||||
|
||||
primary_expression_start returns [TypeRepTemplate dotNetType]:
|
||||
^('::' identifier identifier)
|
||||
| literal
|
||||
;
|
||||
|
||||
primary_expression_part:
|
||||
@ -370,7 +386,7 @@ argument_list returns [List<TypeRepTemplate> argTypes, List<CommonTree> argTrees
|
||||
$argTypes = new List<TypeRepTemplate>();
|
||||
$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
|
||||
argument returns [TypeRepTemplate dotNetType]:
|
||||
argument_name argument_value { $dotNetType = $argument_value.dotNetType; }
|
||||
@ -632,8 +648,8 @@ scope {
|
||||
Debug($i.tree.Token.Line + ": Found '" + $i.thetext + "'");
|
||||
Dictionary<string,CommonTree> valMap = new Dictionary<string,CommonTree>();
|
||||
if (!isThis)
|
||||
valMap["this"] = $se.tree;
|
||||
valMap["value"] = $rhs.tree;
|
||||
valMap["this"] = wrapExpression($se.tree, $i.tree.Token);
|
||||
valMap["value"] = wrapExpression($rhs.tree, $i.tree.Token);
|
||||
ret = mkJavaWrapper(((PropRepTemplate)fieldResult.Result).JavaSet, valMap, $a.token);
|
||||
Imports.Add(fieldResult.Result.Imports);
|
||||
}
|
||||
|
@ -127,6 +127,8 @@ tokens {
|
||||
PAYLOAD; // carries arbitrary text for the output file
|
||||
PAYLOAD_LIST;
|
||||
JAVAWRAPPER;
|
||||
JAVAWRAPPEREXPRESSION;
|
||||
JAVAWRAPPERARGUMENT;
|
||||
SEP;
|
||||
KGHOLE;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user