         if node.name is 'writeln' then '_output' else '_' + node.name
 
       "#{subroutineName}(#{paramList})"
+
+    # Variables are complicated, but I'm just going to do the following naïve
+    # thing: Just spit out a dollar and the name. The dollar is so that people
+    # don't name a Pal variable 'return' and make unparsable JavaScript.
+    variable: (node) ->
+      '$' + node.name
 
     # Got to place strings in quotes and escape characters.
     string: (node) ->


      condition.concat [body, @indent, '}']

    sub_invocation: (node) ->
      params =
        @visit param for param in node.params

        func.call(@, @visit(node.declarations, '$body'), node)

    [@indent, header, body, @indent, '}\n']



