class EleetScript::ClassNode

Public Instance Methods

details_from_class_name(context) click to toggle source
# File lib/lang/interpreter.rb, line 269
def details_from_class_name(context)
  if name.kind_of?(String)
    return name, context.namespace_context, context.local_constant(name)
  else
    ns = if name.namespace.nil?
      context.root_ns
    else
      context.namespace(name.namespace)
    end
    exp = name.expression
    while exp.kind_of?(NamespaceAccessNode)
      ns = ns.namespace(exp.namespace)
      exp = exp.expression
    end
    if !exp.kind_of?(GetConstantNode)
      Helpers.throw_eleet_error("Invalid class name given.", context)
      return nil, nil, nil
    end
    return exp.name, ns, ns.local_constant(exp.name)
  end
end
eval(context) click to toggle source
# File lib/lang/interpreter.rb, line 246
def eval(context)
  cls_name, ns_context, cls = details_from_class_name(context)
  return context.es_nil if cls_name.nil? && ns_context.nil? && cls.nil?
  if cls == context.es_nil
    cls = if parent
      parent_cls = if parent.kind_of?(String)
        context[parent]
      else
        parent.eval(context)
      end
      # TODO: Add to_source for all nodes
      Helpers.throw_eleet_error("Attempt to extend undefined class.", context) if parent_cls == context.es_nil
      EleetScriptClass.create(context, cls_name, parent_cls)
    else
      EleetScriptClass.create(context, cls_name)
    end
    ns_context[cls_name] = cls
  end

  body.eval(cls.context)
  cls
end
to_s(level = 0) click to toggle source
# File lib/lang/nodes.rb, line 187
def to_s(level = 0)
  tabs = spaces(level)
  str = "#{tabs}<EleetScript::ClassNode \"#{name}\"\n"
  str += "#{tabs}  @extends=\"#{parent || "Object"}\"\n"
  str += "#{tabs}  @body=(\n"
  str += body.to_s(level + 2)
  str + "#{tabs}  )\n#{tabs}>\n"
end