lib/turmali/runtime/bootstrap.rb in turmali-0.0.1 vs lib/turmali/runtime/bootstrap.rb in turmali-0.0.2
- old
+ new
@@ -1,48 +1,29 @@
require "turmali/runtime/class"
-# First, we create a Ruby Hash in which we'll store all constants accessible from inside
-# our runtime.
-# Then, we populate this Hash with the core classes of our language.
+
Constants = {}
-Constants["Class"] = TurmaliClass.new # Defining the `Class` class.
-Constants["Class"].runtime_class = Constants["Class"] # Setting `Class.class = Class`.
-Constants["Object"] = TurmaliClass.new # Defining the `Object` class
-Constants["Number"] = TurmaliClass.new # Defining the `Number` class
+Constants["Class"] = TurmaliClass.new
+Constants["Class"].runtime_class = Constants["Class"]
+Constants["Object"] = TurmaliClass.new
+Constants["Number"] = TurmaliClass.new
Constants["String"] = TurmaliClass.new
-# The root context will be the starting point where all our programs will
-# start their evaluation. This will also set the value of `self` at the root
-# of our programs.
root_self = Constants["Object"].new
RootContext = Context.new(root_self)
-# Everything is an object in our language, even `true`, `false` and `nil`. So they need
-# to have a class too.
Constants["TrueClass"] = TurmaliClass.new
Constants["FalseClass"] = TurmaliClass.new
Constants["NilClass"] = TurmaliClass.new
Constants["true"] = Constants["TrueClass"].new_with_value(true)
Constants["false"] = Constants["FalseClass"].new_with_value(false)
Constants["nil"] = Constants["NilClass"].new_with_value(nil)
-# Now that we have injected all the core classes into the runtime, we can define
-# methods on those classes.
-#
-# The first method we'll define will allow us to do `Object.new` or
-# `Number.new`. Keep in mind, `Object` or `Number`
-# are instances of the `Class` class. By defining the `new` method
-# on `Class`, it will be accessible on all its instances.
Constants["Class"].def :new do |receiver, arguments|
receiver.new
end
-# Next, we'll define the `print` method. Since we want to be able to call it
-# from everywhere, we'll define it on `Object`.
-# Remember from the parser's `Call` rule, methods without any receiver will be
-# sent to `self`. So `print()` is the same as `self.print()`, and
-# `self` will always be an instance of `Object`.
Constants["Object"].def :print do |receiver, arguments|
puts arguments.first.ruby_value
- Constants["nil"] # We always want to return objects from our runtime
+ Constants["nil"]
end