       # TODO: Bounds checking.
       [@visit(node.apropos)].concat(subexpressions)
 
-    # Turns a record access into a 
+    # Turns a record access into a
     record_access: (node) ->
-      [@visit(node.apropos), '[', @visit(node.field, 'string'), ']']
+      [@visit(node.apropos), '[', @visit({val: node.field}, 'string'), ']']
 
     # Got to place strings in quotes and escape characters.
     string: (node) ->

      subroutineName =
        # 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

    # of any function, subroutine, etc.
    # Assumes indent is set at the correct level.
    $body: (node) ->
      vars = @visit node.vars, '$stmt'

      # Compile all of the subroutines.
      subroutines =
