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:
parent
eb760267f9
commit
34fdb5266a
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user