coffee-script 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +22 -0
- data/README +38 -0
- data/bin/coffee-script +5 -0
- data/coffee-script.gemspec +21 -0
- data/examples/code.cs +173 -0
- data/examples/documents.cs +72 -0
- data/examples/poignant.cs +153 -0
- data/examples/syntax_errors.cs +20 -0
- data/examples/underscore.cs +597 -0
- data/lib/coffee-script.rb +20 -0
- data/lib/coffee_script/CoffeeScript.tmbundle/Preferences/CoffeeScript.tmPreferences +24 -0
- data/lib/coffee_script/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage +329 -0
- data/lib/coffee_script/CoffeeScript.tmbundle/info.plist +10 -0
- data/lib/coffee_script/command_line.rb +183 -0
- data/lib/coffee_script/grammar.y +403 -0
- data/lib/coffee_script/lexer.rb +187 -0
- data/lib/coffee_script/nodes.rb +680 -0
- data/lib/coffee_script/parse_error.rb +22 -0
- data/lib/coffee_script/parser.rb +1987 -0
- data/lib/coffee_script/scope.rb +45 -0
- data/lib/coffee_script/value.rb +42 -0
- metadata +75 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
module CoffeeScript
|
2
|
+
|
3
|
+
# Scope objects form a tree corresponding to the shape of the function
|
4
|
+
# definitions present in the script. They provide lexical scope, to determine
|
5
|
+
# whether a variable has been seen before or if it needs to be declared.
|
6
|
+
class Scope
|
7
|
+
|
8
|
+
attr_reader :parent, :temp_variable
|
9
|
+
|
10
|
+
# Initialize a scope with its parent, for lookups up the chain.
|
11
|
+
def initialize(parent=nil)
|
12
|
+
@parent = parent
|
13
|
+
@variables = {}
|
14
|
+
@temp_variable = @parent ? @parent.temp_variable : 'a'
|
15
|
+
end
|
16
|
+
|
17
|
+
# Look up a variable in lexical scope, or declare it if not found.
|
18
|
+
def find(name, remote=false)
|
19
|
+
found = check(name, remote)
|
20
|
+
return found if found || remote
|
21
|
+
@variables[name.to_sym] = true
|
22
|
+
found
|
23
|
+
end
|
24
|
+
|
25
|
+
# Just check to see if a variable has already been declared.
|
26
|
+
def check(name, remote=false)
|
27
|
+
return true if @variables[name.to_sym]
|
28
|
+
@parent && @parent.find(name, true)
|
29
|
+
end
|
30
|
+
|
31
|
+
# You can reset a found variable on the immediate scope.
|
32
|
+
def reset(name)
|
33
|
+
@variables[name.to_sym] = false
|
34
|
+
end
|
35
|
+
|
36
|
+
# Find an available, short, name for a compiler-generated variable.
|
37
|
+
def free_variable
|
38
|
+
@temp_variable.succ! while check(@temp_variable)
|
39
|
+
@variables[@temp_variable.to_sym] = true
|
40
|
+
@temp_variable.dup
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module CoffeeScript
|
2
|
+
|
3
|
+
# Instead of producing raw Ruby objects, the Lexer produces values of this
|
4
|
+
# class, wrapping native objects tagged with line number information.
|
5
|
+
class Value
|
6
|
+
attr_reader :value, :line
|
7
|
+
|
8
|
+
def initialize(value, line)
|
9
|
+
@value, @line = value, line
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_str
|
13
|
+
@value.to_s
|
14
|
+
end
|
15
|
+
alias_method :to_s, :to_str
|
16
|
+
|
17
|
+
def to_sym
|
18
|
+
to_str.to_sym
|
19
|
+
end
|
20
|
+
|
21
|
+
def inspect
|
22
|
+
@value.inspect
|
23
|
+
end
|
24
|
+
|
25
|
+
def ==(other)
|
26
|
+
@value == other
|
27
|
+
end
|
28
|
+
|
29
|
+
def [](index)
|
30
|
+
@value[index]
|
31
|
+
end
|
32
|
+
|
33
|
+
def eql?(other)
|
34
|
+
@value.eql?(other)
|
35
|
+
end
|
36
|
+
|
37
|
+
def hash
|
38
|
+
@value.hash
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: coffee-script
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jeremy Ashkenas
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-12-24 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: " CoffeeScript is a little language that compiles into JavaScript.\n"
|
17
|
+
email: jashkenas@gmail.com
|
18
|
+
executables:
|
19
|
+
- coffee-script
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- bin/coffee-script
|
26
|
+
- examples/code.cs
|
27
|
+
- examples/documents.cs
|
28
|
+
- examples/poignant.cs
|
29
|
+
- examples/syntax_errors.cs
|
30
|
+
- examples/underscore.cs
|
31
|
+
- lib/coffee-script.rb
|
32
|
+
- lib/coffee_script/CoffeeScript.tmbundle/info.plist
|
33
|
+
- lib/coffee_script/CoffeeScript.tmbundle/Preferences/CoffeeScript.tmPreferences
|
34
|
+
- lib/coffee_script/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage
|
35
|
+
- lib/coffee_script/command_line.rb
|
36
|
+
- lib/coffee_script/grammar.y
|
37
|
+
- lib/coffee_script/lexer.rb
|
38
|
+
- lib/coffee_script/nodes.rb
|
39
|
+
- lib/coffee_script/parse_error.rb
|
40
|
+
- lib/coffee_script/parser.rb
|
41
|
+
- lib/coffee_script/scope.rb
|
42
|
+
- lib/coffee_script/value.rb
|
43
|
+
- coffee-script.gemspec
|
44
|
+
- LICENSE
|
45
|
+
- README
|
46
|
+
has_rdoc: false
|
47
|
+
homepage: http://jashkenas.github.com/coffee-script/
|
48
|
+
licenses: []
|
49
|
+
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options: []
|
52
|
+
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: "0"
|
60
|
+
version:
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
67
|
+
requirements: []
|
68
|
+
|
69
|
+
rubyforge_project: coffee-script
|
70
|
+
rubygems_version: 1.3.5
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: The CoffeeScript Compiler
|
74
|
+
test_files: []
|
75
|
+
|