CompilerContext(CompilerParameters parameters, CompilerResults results) {
     this.Parameters = parameters;
     this.Results = results;
     this.CompilationUnits = new ArrayList<CompilationUnitNode>();
     this.TypeBuilders = new ArrayList<TypeBuilder>();
     this.Iterables = new HashMap<MethodBuilder, TypeBuilder>();
     this.ConstructorBuilders = new ArrayList<MethodBuilder>();
     this.CodeValidationContext = new CodeValidationContext(this);
     this.MethodGenerationContext = new MethodGenerationContext();
     this.LambdaScopes = new HashMap<MethodBuilder, TypeBuilder>();
     this.ConstantBuilder = new ConstantBuilder(this);
     this.PrivateAccessors = new HashMap<Object, MethodInfo>();
     this.PrivateMutators = new HashMap<Object, MethodInfo>();
     this.localFields = new HashMap<LocalMemberInfo, FieldInfo>();
 }
        private bool handleArguments(String[] arguments) {
            parameters = new CompilerParameters();
            int i = 0;
            while (i < sizeof(arguments) && (arguments[i].startsWith("-"))) {
                int idx = arguments[i].indexOf(':');
                var argument = arguments[i].substring(1);
                var parameter = "";
                if (idx > 0) {
                    argument = arguments[i].substring(1, idx);
                    parameter = arguments[i].substring(idx + 1);
                }
                var option = Options[argument];
                if (option == null) {
                    System.out.println("Error: Unknown option: " + argument);
                    return false;
                }
                switch (option) {
                case Annotatedlibs: {
                    while (parameter.length() > 0) {
                        idx = parameter.indexOf(';');
                        String file;
                        if (idx >= 0) {
                            file = parameter.substring(0, idx);
                            parameter = parameter.substring(idx + 1);
                        } else {
                            file = parameter;
                            parameter = "";
                        }
                        if (!new File(file).exists()) {
                            System.out.println(MISSING_FILE + file);
                            return false;
                        }
                        parameters.AnnotatedLibraryPaths.add(file);
                    }
                    break;
                }
                case Classpath: {
                    while (parameter.length() > 0) {
                        idx = parameter.indexOf(';');
                        String file;
                        if (idx >= 0) {
                            file = parameter.substring(0, idx);
                            parameter = parameter.substring(idx + 1);
                        } else {
                            file = parameter;
                            parameter = "";
                        }
                        if (!new File(file).exists()) {
                            System.out.println(MISSING_FILE + file);
                            return false;
                        }
                        parameters.ClassPath.add(file);
                    }
                    break;
                }
                case Define: {
                    while (parameter.length() > 0) {
                        idx = parameter.indexOf(';');
                        if (idx >= 0) {
                            parameters.getSymbols().add(parameter.substring(0, idx));
                            parameter = parameter.substring(idx + 1);
                        } else {
                            parameters.getSymbols().add(parameter);
                            parameter = "";
                        }
                    }
                    break;
                }
                case Doc: {
                    parameters.DocumentationPath = parameter;
                    break;
                }
                case Manifest: {
                    manifestPath = parameter;
                    if (!new File(manifestPath).exists()) {
                        System.out.println(MISSING_FILE + manifestPath);
                        return false;
                    }
                    break;
                }
                case Out: {
                    outputPath = parameter;
                    break;
                }
                case Resources: {
                    resourcesPath = parameter;
                    break;
                }
                case Help: {
                    System.out.println("    Cnatural Compiler Options");
                    System.out.println();
                    foreach (var opt in OptionInfos) {
                        System.out.print("-");
                        System.out.print(opt.Name);
                        if (opt.Arguments != null) {
                            System.out.print(":");
                            System.out.print(opt.Arguments);
                        }
                        System.out.println();
                        System.out.print("\t");
                        System.out.print(opt.Description);
                        if (opt.ShortForm != null) {
                            System.out.print(" (Short form: -");
                            System.out.print(opt.ShortForm);
                            System.out.print(")");
                        }
                        System.out.println();
                        System.out.println();
                    }
                    break;
                }
                }
                i++;
            }
            while (i < sizeof(arguments)) {
                File file = new File(arguments[i]);
                if (!file.exists()) {
                    System.out.println(MISSING_FILE + arguments[i]);
                    return false;
                }
                if (file.isDirectory()) {
                    System.out.println("Error: Argument is a directory: " + arguments[i]);
                    return false;
                }
                sourceFiles.add(file);
                i++;
            }
            if (sourceFiles.size() == 0) {
                System.out.println("Error: No input file");
                return false;
            }
            if (outputPath == null) {
                var absolutePath = sourceFiles[0].getAbsolutePath();
				var dir = PathHelper.getDirectoryName(absolutePath);
				var filename = PathHelper.getFileNameWithoutExtension((absolutePath.endsWith(".cs"))? PathHelper.getFileNameWithoutExtension(absolutePath) : absolutePath);
                outputPath = PathHelper.combine(dir, filename + ".jar");
            }
			System.out.println("Output: "+outputPath);
            return true;
        }