From 43c0db44ea7dd92738f755cc137d35eb4b600062 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 23 Sep 2009 00:20:30 -0700 Subject: [PATCH 1/2] Update to support new narwhal. Reviewed by me. --- Objective-J/Tools/objj/lib-js/objj/objjc.js | 76 +++++++++++---------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/Objective-J/Tools/objj/lib-js/objj/objjc.js b/Objective-J/Tools/objj/lib-js/objj/objjc.js index 6e532d89e..03b046025 100644 --- a/Objective-J/Tools/objj/lib-js/objj/objjc.js +++ b/Objective-J/Tools/objj/lib-js/objj/objjc.js @@ -1,6 +1,14 @@ -var file = require("file"), - os = require("os") - objj = require("./objj"); +var FILE = require("file"), + OS = require("os"), + objj = require("./objj"), + objj_preprocess = objj.objj_preprocess, + IS_FILE = objj.IS_FILE, + GET_CODE = objj.GET_CODE, + IS_LOCAL = objj.IS_LOCAL, + MARKER_IMPORT_STD = objj.MARKER_IMPORT_STD, + MARKER_IMPORT_LOCAL = objj.MARKER_IMPORT_LOCAL, + MARKER_CODE = objj.MARKER_CODE, + GET_PATH = objj.GET_PATH; require("objj/regexp-rhino-patch"); @@ -10,21 +18,24 @@ var OBJJ_PREPROCESSOR_PREPROCESS = exports.OBJJ_PREPROCESSOR_PREPROCESS var OBJJ_PREPROCESSOR_COMPRESS = exports.OBJJ_PREPROCESSOR_COMPRESS = 1 << 11; var OBJJ_PREPROCESSOR_SYNTAX = exports.OBJJ_PREPROCESSOR_SYNTAX = 1 << 12; -var SHRINKSAFE_PATH = file.join(objj.OBJJ_HOME, "shrinksafe", "shrinksafe.jar"), - RHINO_PATH = file.join(objj.OBJJ_HOME, "shrinksafe", "js.jar") +var SHRINKSAFE_PATH = FILE.join(objj.OBJJ_HOME, "shrinksafe", "shrinksafe.jar"), + RHINO_PATH = FILE.join(objj.OBJJ_HOME, "shrinksafe", "js.jar") -function compress(/*String*/ aCode, /*Object*/ flags, /*String*/ tmpFile) +function compress(/*String*/ aCode, /*String*/ FIXME) { - file.write(tmpFile, aCode, { charset:"UTF-8" }); + // FIXME: figure out why this doesn't work on Windows/Cygwin + //var tmpFile = java.io.File.createTempFile("OBJJC", ""); + var tmpFile = new java.io.File(FIXME + ".tmp"); + tmpFile.deleteOnExit(); + tmpFile = tmpFile.getAbsolutePath(); - return os.command(["java", "-Dfile.encoding=UTF-8", "-classpath", [RHINO_PATH, SHRINKSAFE_PATH].join(":"), "org.dojotoolkit.shrinksafe.Main", tmpFile]); + FILE.write(tmpFile, aCode, { charset:"UTF-8" }); + + return OS.command(["java", "-Dfile.encoding=UTF-8", "-classpath", [RHINO_PATH, SHRINKSAFE_PATH].join(":"), "org.dojotoolkit.shrinksafe.Main", tmpFile]); } exports.preprocess = function(inFile, outFile, flags, gccArgs) { - with(objj) - { - print("Statically Preprocessing " + inFile); if (flags === undefined) @@ -33,31 +44,26 @@ exports.preprocess = function(inFile, outFile, flags, gccArgs) var shouldObjjPreprocess = flags & OBJJ_PREPROCESSOR_PREPROCESS, shouldCheckSyntax = flags & OBJJ_PREPROCESSOR_SYNTAX, shouldCompress = flags & OBJJ_PREPROCESSOR_COMPRESS; - - // FIXME: figure out why this doesn't work on Windows/Cygwin - //var tmpFile = java.io.File.createTempFile("OBJJC", ""); - var tmpFile = new java.io.File(outFile + ".tmp"); - tmpFile.deleteOnExit(); - tmpFile = tmpFile.getAbsolutePath(); - - // -E JUST preprocess. - // -x c Interpret language as C -- closest thing to JavaScript. - // -P Don't generate #line directives - var gccComponents = ["gcc"] - .concat("-E", "-x", "c", "-P", inFile) - .concat(gccArgs || []) - .concat("-o", shouldObjjPreprocess ? tmpFile : outFile); - - os.system(gccComponents); + + var gccCommand = "gcc -E -x c -P " + (gccArgs.join(" ") || "") + " " + inFile; if (!shouldObjjPreprocess) + { + OS.system(gccCommand + " -o" + outFile); return; - + } + + var gcc = OS.popen(gccCommand); + // Read file and preprocess it. - var fileContents = file.read(tmpFile, { charset: "UTF-8" }); + var fileContents = "", + chunk = ""; + + while (chunk = gcc.stdout.read()) + fileContents += chunk; // Preprocess contents into fragments. - var fragments = objj_preprocess(fileContents, { path : "/x" }, { path: file.basename(inFile) }, flags), + var fragments = objj_preprocess(fileContents, { path : "/x" }, { path: FILE.basename(inFile) }, flags), preprocessed = ""; // Writer preprocessed fragments out. @@ -86,13 +92,13 @@ exports.preprocess = function(inFile, outFile, flags, gccArgs) " on preprocessed line number "+e.lineNumber+"\n"+ "\t"+lines.slice(Math.max(0, e.lineNumber - 1 - PAD), e.lineNumber+PAD).join("\n\t")); - os.exit(1); + OS.exit(1); } } if (shouldCompress) { - code = compress("function(){" + code + '}', 0, tmpFile); + code = compress("function(){" + code + '}', outFile); code = code.substr("function(){".length, code.length - "function(){};\n\n".length); } @@ -100,11 +106,9 @@ exports.preprocess = function(inFile, outFile, flags, gccArgs) preprocessed += MARKER_CODE + ';' + code.length + ';' + code; } } - + // Write file. - file.write(outFile, preprocessed, { charset: "UTF-8" }); - - } + FILE.write(outFile, preprocessed, { charset: "UTF-8" }); } exports.main = function(args) From 47694c2d801e359cbe7a6a1dcd56a30e87d8aa86 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Wed, 23 Sep 2009 03:25:41 -0700 Subject: [PATCH 2/2] Fix for gcc args. Reviewed by me. --- Objective-J/Tools/objj/lib-js/objj/objj.js | 3 ++- Objective-J/Tools/objj/lib-js/objj/objjc.js | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Objective-J/Tools/objj/lib-js/objj/objj.js b/Objective-J/Tools/objj/lib-js/objj/objj.js index 2338a73f5..656a077a8 100644 --- a/Objective-J/Tools/objj/lib-js/objj/objj.js +++ b/Objective-J/Tools/objj/lib-js/objj/objj.js @@ -37,7 +37,8 @@ with (window) "OBJJ_PREPROCESSOR_DEBUG_SYMBOLS", "objj_data", "CPPropertyListCreateData", "CPPropertyListCreateFromData", - "kCFPropertyListXMLFormat_v1_0", "kCFPropertyList280NorthFormat_v1_0" + "kCFPropertyListXMLFormat_v1_0", "kCFPropertyList280NorthFormat_v1_0", + "objj_dictionary" ].forEach(function(v) { exports[v] = eval(v); }); diff --git a/Objective-J/Tools/objj/lib-js/objj/objjc.js b/Objective-J/Tools/objj/lib-js/objj/objjc.js index 03b046025..553d60e7a 100644 --- a/Objective-J/Tools/objj/lib-js/objj/objjc.js +++ b/Objective-J/Tools/objj/lib-js/objj/objjc.js @@ -45,7 +45,9 @@ exports.preprocess = function(inFile, outFile, flags, gccArgs) shouldCheckSyntax = flags & OBJJ_PREPROCESSOR_SYNTAX, shouldCompress = flags & OBJJ_PREPROCESSOR_COMPRESS; - var gccCommand = "gcc -E -x c -P " + (gccArgs.join(" ") || "") + " " + inFile; + gccArgs = gccArgs ? gccArgs.join(" ") : ""; + + var gccCommand = "gcc -E -x c -P " + gccArgs + " " + inFile; if (!shouldObjjPreprocess) {