       # Hack! I should have a table of builtins, but instead, I have only
       # implemented this one and only method.
       subroutineName =
-        # TODO: Handle builtins.
-        if node.name is 'writeln' then '_output' else '_' + node.name
+        # TODO: Handle other builtins.
+        if node.name is 'writeln'
+          '_output'
+        else
+          @subroutineNameFor 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
+    # don't name a Pal variable 'return' and generate invalid JavaScript.
+    variable: (node) -> @variableNameFor(node.name)
 
     # Got to place strings in quotes and escape characters.
     string: (node) ->

    # TODO: Get the names of the parameters...
    params = []

    { name } = node
    header = "function #{name}(#{params.join(', ')}) {\n"

    # Visit the body of the subroutine, calling the given wrapper function

    # I don't know what else to do other than visit the node.
    # Regardless... here it is:
    @visit ast

  ##
  # Static helpers -- used for generation of this class def.
  ##

  # Returns an action for a JS binary operator.
  @makeBinOp: (binop) -> (node) ->
