diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs index 379d7cb..4d62f84 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs @@ -60,7 +60,7 @@ namespace Twiglet.CS2J.Translator Console.Out.WriteLine("Usage: " + Path.GetFileNameWithoutExtension(System.Environment.GetCommandLineArgs()[0])); Console.Out.WriteLine(" [-help] (this usage message)"); Console.Out.WriteLine(" [-v] (be [somewhat more] verbose, repeat for more verbosity)"); - Console.Out.WriteLine(" [-config ] (read settings from , overriden from command line"); + Console.Out.WriteLine(" [-config ] (read settings from , overriden from command line"); Console.Out.WriteLine(" [-D ] (define C# preprocessor , option can be repeated)"); Console.Out.WriteLine(" [-show-tokens] (the lexer prints the tokenized input to the console)"); Console.Out.WriteLine(" [-show-csharp] [-show-javasyntax] [-show-java] (show parse tree at various stages of the translation)"); @@ -93,6 +93,9 @@ namespace Twiglet.CS2J.Translator for (int i = 0; i < argDirs.Length; i++) { string dir = Path.GetFullPath(argDirs[i]).TrimEnd(Path.DirectorySeparatorChar); + if (!(File.Exists(dir) || Directory.Exists(dir))) { + Console.Out.WriteLine("WARNING: Cannot read " + dir); + } strs.Add(dir); } } diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTemplate/TranslationTemplate.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTemplate/TranslationTemplate.cs index 7f3e9eb..cedc25b 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTemplate/TranslationTemplate.cs +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTemplate/TranslationTemplate.cs @@ -2495,7 +2495,7 @@ namespace Twiglet.CS2J.Translator.TypeRep // Take care of arrays .... while (typeStr.StartsWith("[]")) { - TypeRepTemplate arrayType = AppEnv.Search("System.Array'1"); + TypeRepTemplate arrayType = AppEnv.Search("System.Array'1", new UnknownRepTemplate("System.Array'1")); typeRep = arrayType.Instantiate(new TypeRepTemplate[] { typeRep }); typeStr = typeStr.Substring(2).TrimStart(); } @@ -3842,7 +3842,15 @@ namespace Twiglet.CS2J.Translator.TypeRep public UnknownRepTemplate (string typeName) : base(typeName) { - Inherits = new String[] { "System.Object" }; + // If we are creating an UnknownRepTemplate for System.Object then don't + // inherit from ourselves, else we get stack overflow when resolving. + // This should only happen in the case that we don't have a valid + // net-templates-dir with a definition for System.Object. + if (typeName != "System.Object") { + Inherits = new String[] { "System.Object" }; + } else { + Inherits = new String[] { }; + } } public UnknownRepTemplate (TypeRepRef typeName) : this(typeName.Type) diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g index b8b4db6..4520db6 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g @@ -549,7 +549,7 @@ scope MkNonGeneric { foreach (string t in ScruTypeStrs) { - if (sType.IsA(AppEnv.Search(t), AppEnv)) + if (sType.IsA(findType(t), AppEnv)) { ret = false; break; @@ -1726,7 +1726,7 @@ initializer_value: /////////////////////////////////////////////////////// typeof_expression returns [TypeRepTemplate dotNetType, TypeRepTemplate typeofType]: - ^('typeof' (unbound_type_name | type { $typeofType = $type.dotNetType; } | 'void' { $typeofType = AppEnv.Search("System.Void"); }) ) { $dotNetType = AppEnv.Search("System.Type"); }; + ^('typeof' (unbound_type_name | type { $typeofType = $type.dotNetType; } | 'void' { $typeofType = findType("System.Void"); }) ) { $dotNetType = findType("System.Type"); }; // unbound type examples //foo>> //bar::foo<> @@ -2641,7 +2641,7 @@ scope NSContext,SymTab; } } class_body magicAnnotation[$modifiers.tree, $identifier.tree, null, $c.token]) - -> {$class_implements.hasExtends && $class_implements.extendDotNetType.IsA(AppEnv.Search("System.Attribute", new UnknownRepTemplate("System.Attribute")), AppEnv)}? magicAnnotation + -> {$class_implements.hasExtends && $class_implements.extendDotNetType.IsA(findType("System.Attribute"), AppEnv)}? magicAnnotation -> ^($c 'partial'? PAYLOAD? attributes? modifiers? identifier type_parameter_constraints_clauses? type_parameter_list? class_implements? class_body); type_parameter_list returns [List tyParams] @@ -3097,7 +3097,7 @@ scope { ^(s='switch' se=expression[ObjectType] sv=magicScrutineeVar[$s.token] { if ($expression.dotNetType != null) { - $switch_statement::isEnum = $expression.dotNetType.IsA(AppEnv.Search("System.Enum"), AppEnv); + $switch_statement::isEnum = $expression.dotNetType.IsA(findType("System.Enum"), AppEnv); $switch_statement::convertToIfThenElse = typeIsInvalidForScrutinee($expression.dotNetType); $switch_statement::scrutVar = $sv.thetext; } @@ -3427,7 +3427,7 @@ literal returns [TypeRepTemplate dotNetType] bool isNull = false; } @after { - TypeRepTemplate retTy = AppEnv.Search(ns); + TypeRepTemplate retTy = findType(ns); if (isNull) { retTy = new ClassRepTemplate((ClassRepTemplate)retTy); retTy.IsExplicitNull = true;