oc_nodejs.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. "use strict";
  2. var language = require("eberon/eberon_grammar.js").language;
  3. var nodejs = require("nodejs.js");
  4. var options = {
  5. "--include": "includeDirs",
  6. "--out-dir": "outDir",
  7. "--import-dir": "importDir",
  8. "--timing": "timing"
  9. };
  10. function parseOption(a, result){
  11. for(var o in options){
  12. var optionPrefix = o + "=";
  13. if (a.indexOf(optionPrefix) === 0){
  14. result[options[o]] = a.substr(optionPrefix.length);
  15. return;
  16. }
  17. }
  18. result.notParsed.push(a);
  19. }
  20. function parseOptions(argv){
  21. var result = {notParsed: []};
  22. for(var i = 0; i < argv.length; ++i)
  23. parseOption(argv[i], result);
  24. return result;
  25. }
  26. function main(){
  27. var args = parseOptions(process.argv.splice(2));
  28. var sources = args.notParsed;
  29. if (!sources.length){
  30. console.info("Usage: <oc_nodejs> [options] <input oberon module file(s)>");
  31. console.info("options:\n--include=<search directories separated by ';'>\n--out-dir=<out dir>\n--import-dir=<import dir>");
  32. return -1;
  33. }
  34. var includeDirs = (args.includeDirs && args.includeDirs.split(";")) || [];
  35. var outDir = args.outDir || ".";
  36. var errors = "";
  37. var start = args.timing == "true" ? (new Date()).getTime() : undefined;
  38. var success = nodejs.compile(sources,
  39. language,
  40. function(e){
  41. console.error(e);
  42. errors += e + "\n";
  43. },
  44. includeDirs,
  45. outDir,
  46. args.importDir
  47. );
  48. if (!success)
  49. return -2;
  50. if (start){
  51. var stop = (new Date()).getTime();
  52. console.log("elapsed: " + (stop - start) / 1000 + " s" );
  53. }
  54. console.info("OK!");
  55. return 0;
  56. }
  57. // process.exit(main());
  58. // hack to avoid problem with not flushed stdout on exit: https://github.com/joyent/node/issues/1669
  59. var rc = main();
  60. process.stdout.once("drain", function(){process.exit(rc);});
  61. process.stdout.write("");