red 3.4.1 → 3.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ == 3.4.2 2008-08-12
2
+
3
+ * 1 major enhancement:
4
+ * Added Prototype support for constructible class definition.
5
+
6
+ * 1 bug fix:
7
+ * @instance_variable no longer initializes with reduplicated "this". Bug was introduced with addition of incremental operators.
8
+
1
9
  == 3.4.1 2008-08-09
2
10
 
3
11
  * 1 major enhancement:
@@ -42,7 +42,7 @@ module Red
42
42
  def compile_node(options = {})
43
43
  receiver = "this.%s" % @variable_name.compile_node
44
44
  return self.compile_increment(:receiver => receiver) if self.call_to_increment?
45
- return "this.%s = %s" % [receiver, @expression.compile_node(:as_argument => true)]
45
+ return "%s = %s" % [receiver, @expression.compile_node(:as_argument => true)]
46
46
  end
47
47
  end
48
48
 
@@ -2,18 +2,25 @@ module Red
2
2
  class DefinitionNode # :nodoc:
3
3
  class ClassNode # :nodoc:
4
4
  def initialize(class_name, superclass, scope)
5
- raise(BuildError::NoClassInheritance, "Class inheritance is currently not supported#{"for the #{@@red_library} JavaScript library";''}") if superclass
5
+ raise(BuildError::NoClassInheritance, "Class inheritance is currently not supported#{" for the #{@@red_library} JavaScript library";''}") if superclass
6
6
  old_class = @@red_class
7
7
  @@red_class = @class = class_name
8
8
  @class_name, @superclass = [class_name, superclass].build_nodes
9
9
  block_node = scope.assoc(:block) || scope
10
- if initializer_node = block_node.rassoc(:initialize)
11
- args_node = initializer_node.assoc(:scope).assoc(:block).assoc(:args)
12
- @arguments = (args_node[1..-1] || []).build_nodes
13
- @initializer = initializer_node.assoc(:scope).assoc(:block).reject {|node| node == args_node}.build_node
10
+ case @@red_library
11
+ when :Prototype
12
+ @initializer = block_node.rassoc(:initialize)
13
+ @properties = block_node.select {|node| (node.first == :cvdecl) rescue false }.build_nodes
14
+ @functions = block_node.select {|node| ![:block, :scope].include?(node) && ((node.first != :cvdecl) rescue false) }.build_nodes
15
+ else
16
+ if initializer_node = block_node.rassoc(:initialize)
17
+ args_node = initializer_node.assoc(:scope).assoc(:block).assoc(:args)
18
+ @arguments = (args_node[1..-1] || []).build_nodes
19
+ @initializer = initializer_node.assoc(:scope).assoc(:block).reject {|node| node == args_node}.build_node
20
+ end
21
+ @properties = block_node.select {|node| (node.first == :cvdecl) rescue false }.build_nodes
22
+ @functions = block_node.select {|node| (node != initializer_node) && ![:block, :scope].include?(node) && ((node.first != :cvdecl) rescue false) }.build_nodes
14
23
  end
15
- @properties = block_node.select {|node| (node.first == :cvdecl) rescue false }.build_nodes
16
- @functions = block_node.select {|node| (node != initializer_node) && ![:block, :scope].include?(node) && ((node.first != :cvdecl) rescue false) }.build_nodes
17
24
  @@red_class = old_class
18
25
  end
19
26
 
@@ -21,7 +28,12 @@ module Red
21
28
  old_class = @@red_class
22
29
  @@red_class = @class
23
30
  if @initializer
24
- output = self.compile_as_standard_class
31
+ case @@red_library
32
+ when :Prototype
33
+ output = self.compile_as_prototype_class
34
+ else
35
+ output = self.compile_as_standard_class
36
+ end
25
37
  else
26
38
  output = self.compile_as_virtual_class
27
39
  end
@@ -29,6 +41,12 @@ module Red
29
41
  return output
30
42
  end
31
43
 
44
+ def compile_as_prototype_class
45
+ class_name = @class_name.compile_node
46
+ slots = (@properties | @functions).compile_nodes(:as_prototype => true).compact.join(', ')
47
+ return "%s%s = Class.create({ %s })" % [self.var?, class_name, slots]
48
+ end
49
+
32
50
  def compile_as_standard_class(options = {})
33
51
  class_name = @class_name.compile_node
34
52
  arguments = @arguments.compile_nodes.join(', ')
data/lib/red/version.rb CHANGED
@@ -2,7 +2,7 @@ module Red
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 4
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.1
4
+ version: 3.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jesse Sielaff
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-08-10 00:00:00 -04:00
12
+ date: 2008-08-12 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency