<< Back to previous view

[CLJS-510] Problems with :optimizations :whitespace & :output-wrapper true Created: 28/May/13  Updated: 13/Nov/14  Resolved: 13/Nov/14

Status: Closed
Project: ClojureScript
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Aku Kotkavuo Assignee: Unassigned
Resolution: Completed Votes: 2
Labels: None

OS X 10.8.3, Google Chrome 28

Attachments: Text File CLJS-510.patch    


When I have both output wrapper and :whitespace optimizations enabled, I get the following error when loading the produced output:

goog.string.Unicode = {NBSP:"\u00a0"};
^- Uncaught TypeError: Cannot set property 'Unicode' of undefined

Any ideas on what is going wrong? The error disappears if I use :simple or :advanced optimizations or if I set :output-wrapper to false (combined with any optimization level).

Comment by Aku Kotkavuo [ 28/May/13 10:14 AM ]

ClojureScript version used is 0.0-1806.

Comment by Aku Kotkavuo [ 28/May/13 10:30 AM ]

I'm also seeing this:

GET http://localhost:7070/deps.js 404 (Not Found)
goog.importScript_(goog.basePath + "deps.js")

I have no idea what deps.js is, something related to Google Closure Compiler?

Comment by David Nolen [ 19/Nov/13 9:23 PM ]

Is this problem still present? Thanks.

Comment by Immo Heikkinen [ 11/Mar/14 3:59 AM ]

The problem is still present in clojurescript master. To reproduce, compile https://github.com/clojure/clojurescript/tree/master/samples/hello using

cljsc src {:output-wrapper true :optimizations :whitespace} > hello.js
Comment by Herwig Hochleitner [ 13/Oct/14 5:28 PM ]

I just saw this with [org.clojure/clojurescript "0.0-2371"]

The last line of the following, throws the error, when compiled with :output-wrapper

goog.define("goog.string.DETECT_DOUBLE_ESCAPING", false);
goog.string.Unicode = {NBSP:"\u00a0"};

Notice how if fails right after providing goog.string, so it might be a bug with google closure.

Comment by Immo Heikkinen [ 14/Oct/14 12:10 AM ]

I noticed that if you move

var goog = goog || {};

outside the wrapper function, the problem goes away. Looks like tt's some kind of JavaScript scope issue.

Comment by David Nolen [ 14/Oct/14 5:22 AM ]

I suspect that the whitespace and output wrapper combination is not compatible. I'm inclined to close this one as it's a Closure limitation not a ClojureScript one. I would be open to an error when these two options are combined.

Comment by Immo Heikkinen [ 27/Oct/14 6:06 AM ]

Patch for throwing error when :output-wrapper and :optimizations :whitespace are combined

Comment by David Nolen [ 31/Oct/14 2:51 AM ]

Before proceeding this ticket needs more information. I would like confirmation that it is actually a Closure limitation first. The easiest way to confirm is to use Google Closure directly on some simple JavaScript.

Comment by Immo Heikkinen [ 11/Nov/14 4:51 AM ]

With the following JS file:

$ cat hello.js


the following compile command (using the same versions of closure-library and closure-compiler as clojurescript master)

$ java -jar closure-compiler/build/compiler.jar --js closure-library/closure/goog/base.js --js closure-library/closure/goog/string/string.js --js hello.js --compilation_level=WHITESPACE_ONLY --formatting=PRETTY_PRINT --output_wrapper=';(function(){%output%})();' --js_output_file=hello-compiled.js

produces a file the fails in the same way.

If I remove goog.string dependency, the compiled JS file works fine. If I change it to something else (e.g. goog.object), it gives a similar kind of error.

Comment by David Nolen [ 13/Nov/14 9:08 AM ]

Thank you for the confirmation!

Comment by David Nolen [ 13/Nov/14 9:11 AM ]

fixed https://github.com/clojure/clojurescript/commit/805348d55c987493709c89a5910d679d56cf47e4

Generated at Wed Jan 17 05:30:53 CST 2018 using JIRA 4.4#649-r158309.