14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/red/nodes/definition_nodes.rb', line 14
def initialize(class_name_sexp, superclass_sexp, scope_sexp, options = {})
(options = scope_sexp) && (scope_sexp = superclass_sexp) && (superclass_sexp = nil) if scope_sexp.is_a?(Hash)
superclass = (superclass_sexp || [:const, :Object]).red!
class_name = "%s" % class_name_sexp.red!
if class_name_sexp.is_sexp?(:colon3)
old_namespace_stack = @@namespace_stack
namespaced_class = class_name
@@namespace_stack = [namespaced_class]
elsif class_name_sexp.is_sexp?(:colon2)
@@namespace_stack.push(class_name)
namespaced_class = class_name
class_name = class_name_sexp.last.red!
else
class_name = "c$%s" % class_name_sexp.red!
@@namespace_stack.push(class_name)
namespaced_class = @@namespace_stack.join(".")
end
@@red_constants |= [namespaced_class]
scope = scope_sexp.red!(:as_class_eval => true)
self << "\n\nRed._class('%s',%s,function(){ var _=%s.prototype;\n %s;\n})" % [namespaced_class.gsub("c$",""), superclass, namespaced_class, scope]
old_namespace_stack.nil? ? @@namespace_stack.pop : @@namespace_stack = old_namespace_stack
end
|