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

parseString calls a Init method which can be overridden in sub classes. Use in NetMaker to initialize dynamic scopes

This commit is contained in:
Kevin Glynn 2011-10-09 19:29:32 +02:00
parent eb760267f9
commit 34fdb5266a
2 changed files with 47 additions and 15 deletions

View File

@ -18,7 +18,7 @@ using Twiglet.CS2J.Translator;
namespace Twiglet.CS2J.Translator.Transform
{
public class CommonWalker : TreeParser
public abstract class CommonWalker : TreeParser
{
// CONSTANTS
@ -126,6 +126,11 @@ namespace Twiglet.CS2J.Translator.Transform
return (String.IsNullOrEmpty(ns) ? "" : ns + ".");
}
// Used from parseString() to set up dynamic scopes
public virtual void InitParser()
{
}
// Routines to parse strings to ANTLR Trees on the fly, used to generate fragments needed by the transformation
public CommonTree parseString(string startRule, string inStr)
{
@ -163,6 +168,7 @@ namespace Twiglet.CS2J.Translator.Transform
javaMaker.TraceDestination = Console.Error;
javaMaker.Cfg = Cfg;
javaMaker.IsJavaish = true;
javaMaker.InitParser();
// Try and call a rule like CSParser.namespace_body()
// Use reflection to find the rule to use.
@ -177,19 +183,23 @@ namespace Twiglet.CS2J.Translator.Transform
CommonTree javaSyntaxAST = (CommonTree)javaSyntaxRet.Tree;
// CommonTreeNodeStream javaSyntaxNodes = new CommonTreeNodeStream(javaSyntaxAST);
//
// javaSyntaxNodes.TokenStream = csTree.TokenStream;
//
// NetMaker netMaker = new NetMaker(javaSyntaxNodes);
// netMaker.TraceDestination = Console.Error;
//
// netMaker.Cfg = Cfg;
// netMaker.AppEnv = AppEnv;
//
// CommonTree javaAST = (CommonTree)netMaker.class_member_declarations().Tree;
//
return javaSyntaxAST;
CommonTreeNodeStream javaSyntaxNodes = new CommonTreeNodeStream(javaSyntaxAST);
javaSyntaxNodes.TokenStream = csTreeStream.TokenStream;
NetMaker netMaker = new NetMaker(javaSyntaxNodes);
netMaker.TraceDestination = Console.Error;
netMaker.Cfg = Cfg;
netMaker.AppEnv = AppEnv;
netMaker.InitParser();
CommonTree javaAST = (CommonTree)netMaker.class_member_declarations().Tree;
// snaffle additional imports
this.AddToImports(netMaker.Imports);
return javaAST;
}
// If true, then we are parsing some JavaIsh fragment
@ -320,7 +330,7 @@ xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
}
}
protected string toJavaConvention(CSharpEntity type, string str)
public string toJavaConvention(CSharpEntity type, string str)
{
string ret = String.Empty;

View File

@ -913,6 +913,28 @@ scope MkNonGeneric {
return root;
}
// Used from parseString() to set up dynamic scopes
public override void InitParser()
{
// Set up dynamic scopes
NSContext_stack.Push(new NSContext_scope());
PrimitiveRep_stack.Push(new PrimitiveRep_scope());
MkNonGeneric_stack.Push(new MkNonGeneric_scope());
// Set up dynamic scopes
$PrimitiveRep::primitiveTypeAsObject = false;
$MkNonGeneric::scrubGenericArgs = false;
$NSContext::namespaces = SearchPath ?? new List<string>();
$NSContext::globalNamespaces = SearchPath ?? new List<string>();
$NSContext::typeVariables = new List<string>();
$NSContext::globalTypeVariables = new List<string>();
$NSContext::baseClass = ObjectType;
$NSContext::interfaceList = new List<InterfaceRepTemplate>();
}
}
public compilation_unit