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 namespace Twiglet.CS2J.Translator.Transform
{ {
public class CommonWalker : TreeParser public abstract class CommonWalker : TreeParser
{ {
// CONSTANTS // CONSTANTS
@ -126,6 +126,11 @@ namespace Twiglet.CS2J.Translator.Transform
return (String.IsNullOrEmpty(ns) ? "" : ns + "."); 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 // 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) public CommonTree parseString(string startRule, string inStr)
{ {
@ -163,6 +168,7 @@ namespace Twiglet.CS2J.Translator.Transform
javaMaker.TraceDestination = Console.Error; javaMaker.TraceDestination = Console.Error;
javaMaker.Cfg = Cfg; javaMaker.Cfg = Cfg;
javaMaker.IsJavaish = true; javaMaker.IsJavaish = true;
javaMaker.InitParser();
// Try and call a rule like CSParser.namespace_body() // Try and call a rule like CSParser.namespace_body()
// Use reflection to find the rule to use. // Use reflection to find the rule to use.
@ -177,19 +183,23 @@ namespace Twiglet.CS2J.Translator.Transform
CommonTree javaSyntaxAST = (CommonTree)javaSyntaxRet.Tree; CommonTree javaSyntaxAST = (CommonTree)javaSyntaxRet.Tree;
// CommonTreeNodeStream javaSyntaxNodes = new CommonTreeNodeStream(javaSyntaxAST); CommonTreeNodeStream javaSyntaxNodes = new CommonTreeNodeStream(javaSyntaxAST);
//
// javaSyntaxNodes.TokenStream = csTree.TokenStream; javaSyntaxNodes.TokenStream = csTreeStream.TokenStream;
//
// NetMaker netMaker = new NetMaker(javaSyntaxNodes); NetMaker netMaker = new NetMaker(javaSyntaxNodes);
// netMaker.TraceDestination = Console.Error; netMaker.TraceDestination = Console.Error;
//
// netMaker.Cfg = Cfg; netMaker.Cfg = Cfg;
// netMaker.AppEnv = AppEnv; netMaker.AppEnv = AppEnv;
// netMaker.InitParser();
// CommonTree javaAST = (CommonTree)netMaker.class_member_declarations().Tree;
// CommonTree javaAST = (CommonTree)netMaker.class_member_declarations().Tree;
return javaSyntaxAST;
// snaffle additional imports
this.AddToImports(netMaker.Imports);
return javaAST;
} }
// If true, then we are parsing some JavaIsh fragment // 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; string ret = String.Empty;

View File

@ -913,6 +913,28 @@ scope MkNonGeneric {
return root; 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 public compilation_unit