haml-more 0.4.0.c → 0.4.0.d

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/vendor/coffee-script/Cakefile +8 -0
  2. data/vendor/coffee-script/Rakefile +11 -0
  3. data/vendor/coffee-script/documentation/index.html.erb +85 -50
  4. data/vendor/coffee-script/documentation/js/aliases.js +1 -1
  5. data/vendor/coffee-script/documentation/js/arguments.js +1 -1
  6. data/vendor/coffee-script/documentation/js/array_comprehensions.js +1 -1
  7. data/vendor/coffee-script/documentation/js/assignment.js +1 -1
  8. data/vendor/coffee-script/documentation/js/cake_tasks.js +1 -1
  9. data/vendor/coffee-script/documentation/js/comparisons.js +1 -1
  10. data/vendor/coffee-script/documentation/js/conditionals.js +1 -1
  11. data/vendor/coffee-script/documentation/js/embedded.js +1 -1
  12. data/vendor/coffee-script/documentation/js/existence.js +1 -1
  13. data/vendor/coffee-script/documentation/js/expressions.js +1 -1
  14. data/vendor/coffee-script/documentation/js/expressions_assignment.js +1 -1
  15. data/vendor/coffee-script/documentation/js/expressions_comprehension.js +1 -1
  16. data/vendor/coffee-script/documentation/js/expressions_try.js +1 -1
  17. data/vendor/coffee-script/documentation/js/fat_arrow.js +1 -1
  18. data/vendor/coffee-script/documentation/js/functions.js +1 -1
  19. data/vendor/coffee-script/documentation/js/heredocs.js +1 -1
  20. data/vendor/coffee-script/documentation/js/multiple_return_values.js +1 -1
  21. data/vendor/coffee-script/documentation/js/object_comprehensions.js +1 -1
  22. data/vendor/coffee-script/documentation/js/object_extraction.js +1 -1
  23. data/vendor/coffee-script/documentation/js/objects_and_arrays.js +1 -1
  24. data/vendor/coffee-script/documentation/js/overview.js +1 -1
  25. data/vendor/coffee-script/documentation/js/parallel_assignment.js +1 -1
  26. data/vendor/coffee-script/documentation/js/range_comprehensions.js +1 -1
  27. data/vendor/coffee-script/documentation/js/scope.js +1 -1
  28. data/vendor/coffee-script/documentation/js/slices.js +1 -1
  29. data/vendor/coffee-script/documentation/js/soaks.js +1 -1
  30. data/vendor/coffee-script/documentation/js/splats.js +1 -1
  31. data/vendor/coffee-script/documentation/js/splices.js +1 -1
  32. data/vendor/coffee-script/documentation/js/strings.js +1 -1
  33. data/vendor/coffee-script/documentation/js/super.js +1 -1
  34. data/vendor/coffee-script/documentation/js/switch.js +1 -1
  35. data/vendor/coffee-script/documentation/js/try.js +1 -1
  36. data/vendor/coffee-script/documentation/js/while.js +1 -1
  37. data/vendor/coffee-script/extras/EXTRAS +9 -1
  38. data/vendor/coffee-script/extras/coffee-script.js +1 -0
  39. data/vendor/coffee-script/index.html +83 -48
  40. data/vendor/coffee-script/lib/cake.js +30 -32
  41. data/vendor/coffee-script/lib/coffee-script.js +12 -16
  42. data/vendor/coffee-script/lib/command_line.js +64 -74
  43. data/vendor/coffee-script/lib/grammar.js +1 -1
  44. data/vendor/coffee-script/lib/lexer.js +1 -1
  45. data/vendor/coffee-script/lib/narwhal.js +1 -1
  46. data/vendor/coffee-script/lib/nodes.js +48 -44
  47. data/vendor/coffee-script/lib/optparse.js +11 -17
  48. data/vendor/coffee-script/lib/repl.js +1 -1
  49. data/vendor/coffee-script/lib/rewriter.js +1 -1
  50. data/vendor/coffee-script/lib/scope.js +1 -1
  51. data/vendor/coffee-script/package.json +1 -1
  52. data/vendor/coffee-script/src/cake.coffee +15 -15
  53. data/vendor/coffee-script/src/coffee-script.coffee +6 -6
  54. data/vendor/coffee-script/src/command_line.coffee +43 -39
  55. data/vendor/coffee-script/src/nodes.coffee +43 -41
  56. data/vendor/coffee-script/src/optparse.coffee +6 -13
  57. data/vendor/coffee-script/test/test_destructuring_assignment.coffee +6 -0
  58. metadata +7 -6
@@ -1,4 +1,6 @@
1
1
  # `cake` is a simplified version of Make (Rake, Jake) for CoffeeScript.
2
+ # You define tasks with names and descriptions in a Cakefile, and can call them
3
+ # from the command line, or invoke them from other tasks.
2
4
 
3
5
  fs: require 'fs'
4
6
  path: require 'path'
@@ -6,11 +8,7 @@ coffee: require 'coffee-script'
6
8
 
7
9
  tasks: {}
8
10
 
9
- no_such_task: (task) ->
10
- process.stdio.writeError('No such task: "' + task + '"\n')
11
- process.exit(1)
12
-
13
- # Mixin the Cake functionality.
11
+ # Mixin the top-level Cake functions for Cakefiles to use.
14
12
  process.mixin {
15
13
 
16
14
  # Define a task with a name, a description, and the action itself.
@@ -23,13 +21,6 @@ process.mixin {
23
21
  tasks[name].action()
24
22
  }
25
23
 
26
- # Display the list of Cake tasks.
27
- print_tasks: ->
28
- for name, task of tasks
29
- spaces: 20 - name.length
30
- spaces: if spaces > 0 then (' ' for i in [0..spaces]).join('') else ''
31
- puts "cake " + name + spaces + ' # ' + task.description
32
-
33
24
  # Running `cake` runs the tasks you pass asynchronously (node-style), or
34
25
  # prints them out, with no arguments.
35
26
  exports.run: ->
@@ -39,7 +30,16 @@ exports.run: ->
39
30
  fs.readFile 'Cakefile', (err, source) ->
40
31
  eval coffee.compile source
41
32
  return print_tasks() unless args.length
42
- for arg in args
43
- no_such_task arg unless tasks[arg]
44
- tasks[arg].action()
33
+ invoke arg for arg in args
45
34
 
35
+ # Display the list of Cake tasks.
36
+ print_tasks: ->
37
+ for name, task of tasks
38
+ spaces: 20 - name.length
39
+ spaces: if spaces > 0 then (' ' for i in [0..spaces]).join('') else ''
40
+ puts "cake " + name + spaces + ' # ' + task.description
41
+
42
+ # Print an error and exit when attempting to all an undefined task.
43
+ no_such_task: (task) ->
44
+ process.stdio.writeError('No such task: "' + task + '"\n')
45
+ process.exit(1)
@@ -24,7 +24,7 @@ parser.lexer: {
24
24
  showPosition: -> @pos
25
25
  }
26
26
 
27
- exports.VERSION: '0.5.1'
27
+ exports.VERSION: '0.5.2'
28
28
 
29
29
  # Compile CoffeeScript to JavaScript, using the Coffee/Jison compiler.
30
30
  exports.compile: (code, options) ->
@@ -38,8 +38,8 @@ exports.tokenize: (code) ->
38
38
  exports.tree: (code) ->
39
39
  parser.parse lexer.tokenize code
40
40
 
41
- # Pretty-print a token stream.
42
- exports.print_tokens: (tokens) ->
43
- strings: for token in tokens
44
- '[' + token[0] + ' ' + token[1].toString().replace(/\n/, '\\n') + ']'
45
- puts strings.join(' ')
41
+ # Activate CoffeeScript in the browser by having it compile and eval
42
+ # all script tags with a content-type of text/coffeescript.
43
+ if document? and document.getElementsByTagName
44
+ for tag in document.getElementsByTagName('script') when tag.type is 'text/coffeescript'
45
+ eval exports.compile tag.innerHTML
@@ -1,7 +1,7 @@
1
- fs: require 'fs'
2
- path: require 'path'
3
- coffee: require 'coffee-script'
4
- optparse: require('optparse')
1
+ fs: require 'fs'
2
+ path: require 'path'
3
+ optparse: require 'optparse'
4
+ CoffeeScript: require 'coffee-script'
5
5
 
6
6
  BANNER: '''
7
7
  coffee compiles CoffeeScript source files into JavaScript.
@@ -17,10 +17,11 @@ SWITCHES: [
17
17
  ['-w', '--watch', 'watch scripts for changes, and recompile']
18
18
  ['-p', '--print', 'print the compiled JavaScript to stdout']
19
19
  ['-l', '--lint', 'pipe the compiled JavaScript through JSLint']
20
+ ['-s', '--stdio', 'listen for and compile scripts over stdio']
20
21
  ['-e', '--eval', 'compile a string from the command line']
22
+ ['-n', '--no-wrap', 'compile without the top-level function wrapper']
21
23
  ['-t', '--tokens', 'print the tokens that the lexer produces']
22
24
  ['-tr','--tree', 'print the parse tree that Jison produces']
23
- ['-n', '--no-wrap', 'compile without the top-level function wrapper']
24
25
  ['-v', '--version', 'display CoffeeScript version']
25
26
  ['-h', '--help', 'display this help message']
26
27
  ]
@@ -32,9 +33,12 @@ option_parser: null
32
33
  # The CommandLine handles all of the functionality of the `coffee` utility.
33
34
  exports.run: ->
34
35
  parse_options()
35
- return require 'repl' if options.interactive
36
- return compile_script 'terminal', sources[0] if options.eval
37
- usage() unless sources.length
36
+ return usage() if options.help
37
+ return version() if options.version
38
+ return require 'repl' if options.interactive
39
+ return compile_stdio() if options.stdio
40
+ return compile_script 'unknown', sources[0] if options.eval
41
+ return usage() unless sources.length
38
42
  separator: sources.indexOf '--'
39
43
  flags: []
40
44
  if separator >= 0
@@ -52,7 +56,7 @@ usage: ->
52
56
 
53
57
  # The "--version" message.
54
58
  version: ->
55
- puts "CoffeeScript version " + coffee.VERSION
59
+ puts "CoffeeScript version " + CoffeeScript.VERSION
56
60
  process.exit 0
57
61
 
58
62
  # Compiles the source CoffeeScript, returning the desired JavaScript, tokens,
@@ -62,23 +66,30 @@ compile_scripts: ->
62
66
  fs.readFile source, (err, code) -> compile_script(source, code)
63
67
  compile(source) for source in sources
64
68
 
65
-
66
69
  # Compile a single source script, containing the given code, according to the
67
70
  # requested options. Both compile_scripts and watch_scripts share this method.
68
71
  compile_script: (source, code) ->
69
- opts: options
70
- o: if opts.no_wrap then {no_wrap: true} else {}
72
+ o: options
71
73
  try
72
- if opts.tokens then coffee.print_tokens coffee.tokenize code
73
- else if opts.tree then puts coffee.tree(code).toString()
74
+ if o.tokens then print_tokens CoffeeScript.tokenize code
75
+ else if o.tree then puts CoffeeScript.tree(code).toString()
74
76
  else
75
- js: coffee.compile code, o
76
- if opts.run then eval js
77
- else if opts.lint then lint js
78
- else if opts.print or opts.eval then puts js
79
- else write_js source, js
77
+ js: CoffeeScript.compile code, compile_options()
78
+ if o.run then eval js
79
+ else if o.lint then lint js
80
+ else if o.print or o.eval then print js
81
+ else write_js source, js
80
82
  catch err
81
- if opts.watch then puts err.message else throw err
83
+ if o.watch then puts err.message else throw err
84
+
85
+ # Listen for and compile scripts over stdio.
86
+ compile_stdio: ->
87
+ code: ''
88
+ process.stdio.open()
89
+ process.stdio.addListener 'data', (string) ->
90
+ code += string if string
91
+ process.stdio.addListener 'close', ->
92
+ process.stdio.write CoffeeScript.compile code, compile_options()
82
93
 
83
94
  # Watch a list of source CoffeeScript files, recompiling them every time the
84
95
  # files are updated.
@@ -106,25 +117,18 @@ lint: (js) ->
106
117
  jsl.write js
107
118
  jsl.close()
108
119
 
120
+ # Pretty-print a token stream.
121
+ print_tokens: (tokens) ->
122
+ strings: for token in tokens
123
+ '[' + token[0] + ' ' + token[1].toString().replace(/\n/, '\\n') + ']'
124
+ puts strings.join(' ')
125
+
109
126
  # Use OptionParser for all the options.
110
127
  parse_options: ->
111
- opts: options: {}
112
- oparser: option_parser: new optparse.OptionParser SWITCHES
113
- oparser.banner: BANNER
114
-
115
- oparser.add 'interactive', -> opts.interactive: true
116
- oparser.add 'run', -> opts.run: true
117
- oparser.add 'output', (dir) -> opts.output: dir
118
- oparser.add 'watch', -> opts.watch: true
119
- oparser.add 'print', -> opts.print: true
120
- oparser.add 'lint', -> opts.lint: true
121
- oparser.add 'eval', -> opts.eval: true
122
- oparser.add 'tokens', -> opts.tokens: true
123
- oparser.add 'tree', -> opts.tree: true
124
- oparser.add 'no-wrap', -> opts.no_wrap: true
125
- oparser.add 'help', => usage()
126
- oparser.add 'version', => version()
127
-
128
- paths: oparser.parse(process.ARGV)
129
- sources: paths[2...paths.length]
128
+ option_parser: new optparse.OptionParser SWITCHES, BANNER
129
+ options: option_parser.parse(process.ARGV)
130
+ sources: options.arguments[2...options.arguments.length]
130
131
 
132
+ # The options to pass to the CoffeeScript compiler.
133
+ compile_options: ->
134
+ if options['no-wrap'] then {no_wrap: true} else {}
@@ -54,13 +54,13 @@ statement: (klass, only) ->
54
54
  # generated code should be wrapped up in a closure. An options hash is passed
55
55
  # and cloned throughout, containing messages from higher in the AST,
56
56
  # information about the current scope, and indentation level.
57
- Node: exports.Node: ->
57
+ BaseNode: exports.BaseNode: ->
58
58
 
59
59
  # This is extremely important -- we convert JS statements into expressions
60
60
  # by wrapping them in a closure, only if it's possible, and we're not at
61
61
  # the top level of a block (which would be unnecessary), and we haven't
62
62
  # already been asked to return the result.
63
- Node::compile: (o) ->
63
+ BaseNode::compile: (o) ->
64
64
  @options: merge o or {}
65
65
  @indent: o.indent
66
66
  del @options, 'operation' unless @operation_sensitive()
@@ -72,46 +72,46 @@ Node::compile: (o) ->
72
72
 
73
73
  # Statements converted into expressions share scope with their parent
74
74
  # closure, to preserve JavaScript-style lexical scope.
75
- Node::compile_closure: (o) ->
75
+ BaseNode::compile_closure: (o) ->
76
76
  @indent: o.indent
77
77
  o.shared_scope: o.scope
78
78
  ClosureNode.wrap(this).compile(o)
79
79
 
80
80
  # If the code generation wishes to use the result of a complex expression
81
81
  # in multiple places, ensure that the expression is only ever evaluated once.
82
- Node::compile_reference: (o) ->
82
+ BaseNode::compile_reference: (o) ->
83
83
  reference: new LiteralNode(o.scope.free_variable())
84
84
  compiled: new AssignNode(reference, this)
85
85
  [compiled, reference]
86
86
 
87
87
  # Quick short method for the current indentation level, plus tabbing in.
88
- Node::idt: (tabs) ->
88
+ BaseNode::idt: (tabs) ->
89
89
  idt: (@indent || '')
90
90
  idt += TAB for i in [0...(tabs or 0)]
91
91
  idt
92
92
 
93
93
  # Does this node, or any of its children, contain a node of a certain kind?
94
- Node::contains: (block) ->
94
+ BaseNode::contains: (block) ->
95
95
  for node in @children
96
96
  return true if block(node)
97
- return true if node instanceof Node and node.contains block
97
+ return true if node instanceof BaseNode and node.contains block
98
98
  false
99
99
 
100
100
  # toString representation of the node, for inspecting the parse tree.
101
- Node::toString: (idt) ->
101
+ BaseNode::toString: (idt) ->
102
102
  idt ||= ''
103
103
  '\n' + idt + @type + (child.toString(idt + TAB) for child in @children).join('')
104
104
 
105
105
  # Default implementations of the common node methods.
106
- Node::unwrap: -> this
107
- Node::children: []
108
- Node::is_statement: -> false
109
- Node::is_statement_only: -> false
110
- Node::top_sensitive: -> false
111
- Node::operation_sensitive: -> false
106
+ BaseNode::unwrap: -> this
107
+ BaseNode::children: []
108
+ BaseNode::is_statement: -> false
109
+ BaseNode::is_statement_only: -> false
110
+ BaseNode::top_sensitive: -> false
111
+ BaseNode::operation_sensitive: -> false
112
112
 
113
113
  # A collection of nodes, each one representing an expression.
114
- Expressions: exports.Expressions: inherit Node, {
114
+ Expressions: exports.Expressions: inherit BaseNode, {
115
115
  type: 'Expressions'
116
116
 
117
117
  constructor: (nodes) ->
@@ -144,7 +144,7 @@ Expressions: exports.Expressions: inherit Node, {
144
144
 
145
145
  compile: (o) ->
146
146
  o ||= {}
147
- if o.scope then Node::compile.call(this, o) else @compile_root(o)
147
+ if o.scope then BaseNode::compile.call(this, o) else @compile_root(o)
148
148
 
149
149
  # Compile each expression in the Expressions body.
150
150
  compile_node: (o) ->
@@ -156,7 +156,7 @@ Expressions: exports.Expressions: inherit Node, {
156
156
  o.scope: new Scope(null, this, null)
157
157
  code: if o.globals then @compile_node(o) else @compile_with_declarations(o)
158
158
  code: code.replace(TRAILING_WHITESPACE, '')
159
- if o.no_wrap then code else "(function(){\n"+code+"\n})();"
159
+ if o.no_wrap then code else "(function(){\n"+code+"\n})();\n"
160
160
 
161
161
  # Compile the expressions body, with declarations of all inner variables
162
162
  # pushed up to the top.
@@ -192,7 +192,7 @@ statement Expressions
192
192
 
193
193
  # Literals are static values that can be passed through directly into
194
194
  # JavaScript without translation, eg.: strings, numbers, true, false, null...
195
- LiteralNode: exports.LiteralNode: inherit Node, {
195
+ LiteralNode: exports.LiteralNode: inherit BaseNode, {
196
196
  type: 'Literal'
197
197
 
198
198
  constructor: (value) ->
@@ -217,7 +217,7 @@ LiteralNode: exports.LiteralNode: inherit Node, {
217
217
  LiteralNode::is_statement_only: LiteralNode::is_statement
218
218
 
219
219
  # Return an expression, or wrap it in a closure and return it.
220
- ReturnNode: exports.ReturnNode: inherit Node, {
220
+ ReturnNode: exports.ReturnNode: inherit BaseNode, {
221
221
  type: 'Return'
222
222
 
223
223
  constructor: (expression) ->
@@ -233,7 +233,7 @@ ReturnNode: exports.ReturnNode: inherit Node, {
233
233
  statement ReturnNode, true
234
234
 
235
235
  # A value, indexed or dotted into, or vanilla.
236
- ValueNode: exports.ValueNode: inherit Node, {
236
+ ValueNode: exports.ValueNode: inherit BaseNode, {
237
237
  type: 'Value'
238
238
 
239
239
  SOAK: " == undefined ? undefined : "
@@ -302,7 +302,7 @@ ValueNode: exports.ValueNode: inherit Node, {
302
302
 
303
303
  # Pass through CoffeeScript comments into JavaScript comments at the
304
304
  # same position.
305
- CommentNode: exports.CommentNode: inherit Node, {
305
+ CommentNode: exports.CommentNode: inherit BaseNode, {
306
306
  type: 'Comment'
307
307
 
308
308
  constructor: (lines) ->
@@ -318,7 +318,7 @@ statement CommentNode
318
318
 
319
319
  # Node for a function invocation. Takes care of converting super() calls into
320
320
  # calls against the prototype's function of the same name.
321
- CallNode: exports.CallNode: inherit Node, {
321
+ CallNode: exports.CallNode: inherit BaseNode, {
322
322
  type: 'Call'
323
323
 
324
324
  constructor: (variable, args) ->
@@ -366,7 +366,7 @@ CallNode: exports.CallNode: inherit Node, {
366
366
 
367
367
  # Node to extend an object's prototype with an ancestor object.
368
368
  # After goog.inherits from the Closure Library.
369
- ExtendsNode: exports.ExtendsNode: inherit Node, {
369
+ ExtendsNode: exports.ExtendsNode: inherit BaseNode, {
370
370
  type: 'Extends'
371
371
 
372
372
  constructor: (child, parent) ->
@@ -399,7 +399,7 @@ statement ExtendsNode
399
399
 
400
400
  # A dotted accessor into a part of a value, or the :: shorthand for
401
401
  # an accessor into the object's prototype.
402
- AccessorNode: exports.AccessorNode: inherit Node, {
402
+ AccessorNode: exports.AccessorNode: inherit BaseNode, {
403
403
  type: 'Accessor'
404
404
 
405
405
  constructor: (name, tag) ->
@@ -414,7 +414,7 @@ AccessorNode: exports.AccessorNode: inherit Node, {
414
414
  }
415
415
 
416
416
  # An indexed accessor into a part of an array or object.
417
- IndexNode: exports.IndexNode: inherit Node, {
417
+ IndexNode: exports.IndexNode: inherit BaseNode, {
418
418
  type: 'Index'
419
419
 
420
420
  constructor: (index, tag) ->
@@ -429,7 +429,7 @@ IndexNode: exports.IndexNode: inherit Node, {
429
429
 
430
430
  # A range literal. Ranges can be used to extract portions (slices) of arrays,
431
431
  # or to specify a range for list comprehensions.
432
- RangeNode: exports.RangeNode: inherit Node, {
432
+ RangeNode: exports.RangeNode: inherit BaseNode, {
433
433
  type: 'Range'
434
434
 
435
435
  constructor: (from, to, exclusive) ->
@@ -469,7 +469,7 @@ RangeNode: exports.RangeNode: inherit Node, {
469
469
  # An array slice literal. Unlike JavaScript's Array#slice, the second parameter
470
470
  # specifies the index of the end of the slice (just like the first parameter)
471
471
  # is the index of the beginning.
472
- SliceNode: exports.SliceNode: inherit Node, {
472
+ SliceNode: exports.SliceNode: inherit BaseNode, {
473
473
  type: 'Slice'
474
474
 
475
475
  constructor: (range) ->
@@ -485,7 +485,7 @@ SliceNode: exports.SliceNode: inherit Node, {
485
485
  }
486
486
 
487
487
  # An object literal.
488
- ObjectNode: exports.ObjectNode: inherit Node, {
488
+ ObjectNode: exports.ObjectNode: inherit BaseNode, {
489
489
  type: 'Object'
490
490
 
491
491
  constructor: (props) ->
@@ -512,7 +512,7 @@ ObjectNode: exports.ObjectNode: inherit Node, {
512
512
  }
513
513
 
514
514
  # An array literal.
515
- ArrayNode: exports.ArrayNode: inherit Node, {
515
+ ArrayNode: exports.ArrayNode: inherit BaseNode, {
516
516
  type: 'Array'
517
517
 
518
518
  constructor: (objects) ->
@@ -559,7 +559,7 @@ ClosureNode: exports.ClosureNode: {
559
559
  }
560
560
 
561
561
  # Setting the value of a local variable, or the value of an object property.
562
- AssignNode: exports.AssignNode: inherit Node, {
562
+ AssignNode: exports.AssignNode: inherit BaseNode, {
563
563
  type: 'Assign'
564
564
 
565
565
  PROTO_ASSIGN: /^(\S+)\.prototype/
@@ -617,7 +617,9 @@ AssignNode: exports.AssignNode: inherit Node, {
617
617
  idx: new LiteralNode(idx) unless typeof idx is 'object'
618
618
  val: new ValueNode(new LiteralNode(val_var), [new access_class(idx)])
619
619
  assigns.push(new AssignNode(obj, val).compile(o))
620
- assigns.join("\n")
620
+ code: assigns.join("\n")
621
+ code += '\n' + @idt() + 'return ' + @variable.compile(o) + ';' if o.returns
622
+ code
621
623
 
622
624
  compile_splice: (o) ->
623
625
  name: @variable.compile(merge(o, {only_first: true}))
@@ -632,7 +634,7 @@ AssignNode: exports.AssignNode: inherit Node, {
632
634
 
633
635
  # A function definition. The only node that creates a new Scope.
634
636
  # A CodeNode does not have any children -- they're within the new scope.
635
- CodeNode: exports.CodeNode: inherit Node, {
637
+ CodeNode: exports.CodeNode: inherit BaseNode, {
636
638
  type: 'Code'
637
639
 
638
640
  constructor: (params, body, tag) ->
@@ -676,7 +678,7 @@ CodeNode: exports.CodeNode: inherit Node, {
676
678
 
677
679
  # A splat, either as a parameter to a function, an argument to a call,
678
680
  # or in a destructuring assignment.
679
- SplatNode: exports.SplatNode: inherit Node, {
681
+ SplatNode: exports.SplatNode: inherit BaseNode, {
680
682
  type: 'Splat'
681
683
 
682
684
  constructor: (name) ->
@@ -699,7 +701,7 @@ SplatNode: exports.SplatNode: inherit Node, {
699
701
 
700
702
  # A while loop, the only sort of low-level loop exposed by CoffeeScript. From
701
703
  # it, all other loops can be manufactured.
702
- WhileNode: exports.WhileNode: inherit Node, {
704
+ WhileNode: exports.WhileNode: inherit BaseNode, {
703
705
  type: 'While'
704
706
 
705
707
  constructor: (condition, opts) ->
@@ -737,7 +739,7 @@ statement WhileNode
737
739
 
738
740
  # Simple Arithmetic and logical operations. Performs some conversion from
739
741
  # CoffeeScript operations into their JavaScript equivalents.
740
- OpNode: exports.OpNode: inherit Node, {
742
+ OpNode: exports.OpNode: inherit BaseNode, {
741
743
  type: 'Op'
742
744
 
743
745
  CONVERSIONS: {
@@ -801,7 +803,7 @@ OpNode: exports.OpNode: inherit Node, {
801
803
  }
802
804
 
803
805
  # A try/catch/finally block.
804
- TryNode: exports.TryNode: inherit Node, {
806
+ TryNode: exports.TryNode: inherit BaseNode, {
805
807
  type: 'Try'
806
808
 
807
809
  constructor: (attempt, error, recovery, ensure) ->
@@ -822,7 +824,7 @@ TryNode: exports.TryNode: inherit Node, {
822
824
  statement TryNode
823
825
 
824
826
  # Throw an exception.
825
- ThrowNode: exports.ThrowNode: inherit Node, {
827
+ ThrowNode: exports.ThrowNode: inherit BaseNode, {
826
828
  type: 'Throw'
827
829
 
828
830
  constructor: (expression) ->
@@ -837,7 +839,7 @@ ThrowNode: exports.ThrowNode: inherit Node, {
837
839
  statement ThrowNode, true
838
840
 
839
841
  # Check an expression for existence (meaning not null or undefined).
840
- ExistenceNode: exports.ExistenceNode: inherit Node, {
842
+ ExistenceNode: exports.ExistenceNode: inherit BaseNode, {
841
843
  type: 'Existence'
842
844
 
843
845
  constructor: (expression) ->
@@ -856,7 +858,7 @@ ExistenceNode.compile_test: (o, variable) ->
856
858
  '(typeof ' + first.compile(o) + ' !== "undefined" && ' + second.compile(o) + ' !== null)'
857
859
 
858
860
  # An extra set of parentheses, specified explicitly in the source.
859
- ParentheticalNode: exports.ParentheticalNode: inherit Node, {
861
+ ParentheticalNode: exports.ParentheticalNode: inherit BaseNode, {
860
862
  type: 'Paren'
861
863
 
862
864
  constructor: (expression) ->
@@ -879,7 +881,7 @@ ParentheticalNode: exports.ParentheticalNode: inherit Node, {
879
881
  # into a for loop. Also acts as an expression, able to return the result
880
882
  # of the comprehenion. Unlike Python array comprehensions, it's able to pass
881
883
  # the current index of the loop as a second parameter.
882
- ForNode: exports.ForNode: inherit Node, {
884
+ ForNode: exports.ForNode: inherit BaseNode, {
883
885
  type: 'For'
884
886
 
885
887
  constructor: (body, source, name, index) ->
@@ -949,7 +951,7 @@ statement ForNode
949
951
  # expression by pushing down requested returns to the expression bodies.
950
952
  # Single-expression IfNodes are compiled into ternary operators if possible,
951
953
  # because ternaries are first-class returnable assignable expressions.
952
- IfNode: exports.IfNode: inherit Node, {
954
+ IfNode: exports.IfNode: inherit BaseNode, {
953
955
  type: 'If'
954
956
 
955
957
  constructor: (condition, body, else_body, tags) ->