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
|
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;
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user