Beispiel #1
0
    def install_primitives(self):
        def _method(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(rcvr.get_method())

        self._install_instance_primitive(
            Primitive("method", self._universe, _method))

        def _previous_frame(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(rcvr.get_previous_frame())

        self._install_instance_primitive(
            Primitive("previousFrame", self._universe, _previous_frame))
Beispiel #2
0
     def __init__(self, num_args, universe):            
         def _invoke(ivkbl, frame, interpreter):
             # Get the block (the receiver) from the stack
             rcvr = frame.get_stack_element(ivkbl._number_of_arguments - 1)
 
             # Get the context of the block...
             context = rcvr.get_context()
 
             # Push a new frame and set its context to be the one specified in
             # the block
             new_frame = interpreter.push_new_frame(rcvr.get_method(), context)
             new_frame.copy_arguments_from(frame)
         
         Primitive.__init__(self, self._compute_signature_string(num_args), universe, _invoke)
         self._number_of_arguments = num_args
Beispiel #3
0
    def install_primitives(self):
        def _new(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(self._universe.new_instance(rcvr))

        self._install_instance_primitive(Primitive("new", self._universe,
                                                   _new))
Beispiel #4
0
    def install_primitives(self):
        def _asString(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(self._universe.new_string(rcvr.get_string()))

        self._install_instance_primitive(
            Primitive("asString", self._universe, _asString))
Beispiel #5
0
    def install_primitives(self):
        def _restart(ivkbl, frame, interpreter):
            frame.set_bytecode_index(0)
            frame.reset_stack_pointer()

        self._install_instance_primitive(
            Primitive("restart", self._universe, _restart))
Beispiel #6
0
        def __init__(self, num_args, universe):
            def _invoke(ivkbl, frame, interpreter):
                # Get the block (the receiver) from the stack
                rcvr = frame.get_stack_element(ivkbl._number_of_arguments - 1)

                # Get the context of the block...
                context = rcvr.get_context()

                # Push a new frame and set its context to be the one specified in
                # the block
                new_frame = interpreter.push_new_frame(rcvr.get_method(),
                                                       context)
                new_frame.copy_arguments_from(frame)

            Primitive.__init__(self, self._compute_signature_string(num_args),
                               universe, _invoke)
            self._number_of_arguments = num_args
Beispiel #7
0
 def install_primitives(self):
     self._install_instance_primitive(
         Primitive("asString", self._universe, _asString))
     self._install_instance_primitive(
         Primitive("round", self._universe, _round))
     self._install_instance_primitive(
         Primitive("sqrt", self._universe, _sqrt))
     self._install_instance_primitive(Primitive("+", self._universe, _plus))
     self._install_instance_primitive(Primitive("-", self._universe,
                                                _minus))
     self._install_instance_primitive(Primitive("*", self._universe, _mult))
     self._install_instance_primitive(
         Primitive("//", self._universe, _doubleDiv))
     self._install_instance_primitive(Primitive("%", self._universe, _mod))
     self._install_instance_primitive(
         Primitive("=", self._universe, _equals))
     self._install_instance_primitive(
         Primitive("<", self._universe, _lessThan))
Beispiel #8
0
 def install_primitives(self):
     self._install_instance_primitive(
         Primitive("asInteger", self._universe, _as_integer))
     self._install_instance_primitive(
         Primitive("asString", self._universe, _as_string))
     self._install_instance_primitive(
         Primitive("isDigit", self._universe, _is_digit))
     self._install_instance_primitive(
         Primitive("isLetter", self._universe, _is_letter))
     self._install_instance_primitive(
         Primitive("isAlphaNumeric", self._universe, _is_alphanumeric))
     self._install_instance_primitive(
         Primitive("asUppercase", self._universe, _as_upper_case))
     self._install_instance_primitive(
         Primitive("asLowercase", self._universe, _as_lower_case))
     self._install_instance_primitive(
         Primitive("isUppercase", self._universe, _is_upper_case))
     self._install_instance_primitive(
         Primitive("isLowercase", self._universe, _is_lower_case))
     self._install_instance_primitive(
         Primitive("=", self._universe, _equals))
Beispiel #9
0
 def install_primitives(self):
     self._install_instance_primitive(
         Primitive("load:", self._universe, _load))
     self._install_instance_primitive(
         Primitive("exit:", self._universe, _exit))
     self._install_instance_primitive(
         Primitive("hasGlobal:", self._universe, _has_global))
     self._install_instance_primitive(
         Primitive("global:", self._universe, _global))
     self._install_instance_primitive(
         Primitive("global:put:", self._universe, _global_put))
     self._install_instance_primitive(
         Primitive("printString:", self._universe, _print_string))
     self._install_instance_primitive(
         Primitive("printNewline", self._universe, _print_newline))
     self._install_instance_primitive(
         Primitive("time", self._universe, _time))
     self._install_instance_primitive(
         Primitive("ticks", self._universe, _ticks))
     self._install_instance_primitive(
         Primitive("fullGC", self._universe, _fullGC))
 def install_primitives(self):        
     self._install_instance_primitive(Primitive("concatenate:",          self._universe, _concat))
     self._install_instance_primitive(Primitive("asSymbol",              self._universe, _asSymbol))
     self._install_instance_primitive(Primitive("length",                self._universe, _length))
     self._install_instance_primitive(Primitive("=",                     self._universe, _equals))
     self._install_instance_primitive(Primitive("primSubstringFrom:to:", self._universe, _substring))
     self._install_instance_primitive(Primitive("hashcode",              self._universe, _hashcode))
Beispiel #11
0
    def install_primitives(self):
        self._install_instance_primitive(Primitive("at:", self._universe, _at))
        self._install_instance_primitive(
            Primitive("at:put:", self._universe, _atPut))
        self._install_instance_primitive(
            Primitive("length", self._universe, _length))
        self._install_instance_primitive(
            Primitive("copy", self._universe, _copy))

        self._install_instance_primitive(
            Primitive("doIndexes:", self._universe, _doIndexes))
        self._install_instance_primitive(Primitive("do:", self._universe, _do))
        self._install_instance_primitive(
            Primitive("putAll:", self._universe, _putAll))

        self._install_class_primitive(Primitive("new:", self._universe, _new))
Beispiel #12
0
    def install_primitives(self):
        self._install_instance_primitive(
            Primitive("concatenate:", self._universe, _concat))
        self._install_instance_primitive(
            Primitive("asSymbol", self._universe, _asSymbol))
        self._install_instance_primitive(
            Primitive("length", self._universe, _length))
        self._install_instance_primitive(
            Primitive("=", self._universe, _equals))
        self._install_instance_primitive(
            Primitive("primSubstringFrom:to:", self._universe, _substring))
        self._install_instance_primitive(
            Primitive("hashcode", self._universe, _hashcode))

        self._install_instance_primitive(
            Primitive("isWhiteSpace", self._universe, _is_white_space))
        self._install_instance_primitive(
            Primitive("isLetters", self._universe, _is_letters))
        self._install_instance_primitive(
            Primitive("isDigits", self._universe, _is_digits))
    def install_primitives(self):
        self._install_instance_primitive(
            Primitive("==", self._universe, _equals))
        self._install_instance_primitive(
            Primitive("hashcode", self._universe, _hashcode))
        self._install_instance_primitive(
            Primitive("objectSize", self._universe, _objectSize))
        self._install_instance_primitive(
            Primitive("perform:", self._universe, _perform))
        self._install_instance_primitive(
            Primitive("perform:inSuperclass:", self._universe,
                      _performInSuperclass))
        self._install_instance_primitive(
            Primitive("perform:withArguments:", self._universe,
                      _performWithArguments))
        self._install_instance_primitive(
            Primitive("instVarAt:", self._universe, _instVarAt))
        self._install_instance_primitive(
            Primitive("instVarAt:put:", self._universe, _instVarAtPut))

        self._install_instance_primitive(
            Primitive("halt", self._universe, _halt))
        self._install_instance_primitive(
            Primitive("class", self._universe, _class))
 def install_primitives(self):
     self._install_instance_primitive(
         Primitive("method", self._universe, _method))
     self._install_instance_primitive(
         Primitive("sender", self._universe, _sender))
     self._install_instance_primitive(
         Primitive("receiver", self._universe, _receiver))
     self._install_instance_primitive(
         Primitive("localAt:", self._universe, _local_at))
     self._install_instance_primitive(
         Primitive("argAt:", self._universe, _arg_at))
     self._install_instance_primitive(
         Primitive("localAt:put:", self._universe, _local_at_put))
 def install_primitives(self):
     self._install_instance_primitive(
         Primitive("whileTrue:", self._universe, _whileTrue))
     self._install_instance_primitive(
         Primitive("whileFalse:", self._universe, _whileFalse))
 def install_primitives(self):
     self._install_instance_primitive(
         Primitive("asString", self._universe, _asString))
Beispiel #17
0
    def install_primitives(self):
        def _asString(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(self._universe.new_string(str(rcvr.get_embedded_integer())))
        self._install_instance_primitive(Primitive("asString", self._universe, _asString))

        def _sqrt(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            
            res = math.sqrt(rcvr.get_embedded_integer())
            if res == float(int(res)):
                frame.push(self._universe.new_integer(int(res)))
            else:
                frame.push(self._universe.new_double(res))
        self._install_instance_primitive(Primitive("sqrt", self._universe, _sqrt))

        def _atRandom(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(self._universe.new_integer(int(rcvr.get_embedded_integer() * random.random())))
        self._install_instance_primitive(Primitive("atRandom", self._universe, _atRandom))

        def _plus(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left      = frame.pop()

            # Check second parameter type:
            if isinstance(right_obj, BigInteger):
                # Second operand was BigInteger
                self._resend_as_biginteger("+", left, right_obj)
            elif isinstance(right_obj, Double):
                self._resend_as_double("+", left, right_obj)
            else:
                # Do operation:
                right = right_obj
                result = left.get_embedded_integer() + right.get_embedded_integer()
                self._push_long_result(frame, result)
        self._install_instance_primitive(Primitive("+", self._universe, _plus))

        def _minus(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left      = frame.pop()

            # Check second parameter type:
            if isinstance(right_obj, BigInteger):
                # Second operand was BigInteger
                self._resend_as_biginteger("-", left, right_obj)
            elif isinstance(right_obj, Double):
                self._resend_as_double("-", left, right_obj)
            else:
                # Do operation:
                right = right_obj
                result = left.get_embedded_integer() - right.get_embedded_integer()
                self._push_long_result(frame, result)
        self._install_instance_primitive(Primitive("-", self._universe, _minus))


        def _mult(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left      = frame.pop()

            # Check second parameter type:
            if isinstance(right_obj, BigInteger):
                # Second operand was BigInteger
                self._resend_as_biginteger("*", left, right_obj)
            elif isinstance(right_obj, Double):
                self._resend_as_double("*", left, right_obj)
            else:
                # Do operation:
                right = right_obj
                result = left.get_embedded_integer() * right.get_embedded_integer()
                self._push_long_result(frame, result)
        self._install_instance_primitive(Primitive("*", self._universe, _mult))

        def _doubleDiv(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left      = frame.pop()

            # Check second parameter type:
            if isinstance(right_obj, BigInteger):
                # Second operand was BigInteger
                self._resend_as_biginteger("/", left, right_obj)
            elif isinstance(right_obj, Double):
                self._resend_as_double("/", left, right_obj)
            else:
                # Do operation:
                right = right_obj
                result = float(left.get_embedded_integer()) / float(right.get_embedded_integer())
                frame.push(self._universe.new_double(result))
        self._install_instance_primitive(Primitive("//", self._universe, _doubleDiv))

        def _intDiv(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left      = frame.pop()

            # Check second parameter type:
            if isinstance(right_obj, BigInteger):
                # Second operand was BigInteger
                self._resend_as_biginteger("/", left, right_obj)
            elif isinstance(right_obj, Double):
                self._resend_as_double("/", left, right_obj)
            else:
                # Do operation:
                right = right_obj
                result = left.get_embedded_integer() / right.get_embedded_integer()
                self._push_long_result(frame, result)
        self._install_instance_primitive(Primitive("/", self._universe, _intDiv))

        def _mod(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left      = frame.pop()

            # Check second parameter type:
            if isinstance(right_obj, BigInteger):
                # Second operand was BigInteger
                self._resend_as_biginteger("%", left, right_obj)
            elif isinstance(right_obj, Double):
                self._resend_as_double("%", left, right_obj)
            else:
                # Do operation:
                self._push_long_result(frame, left.get_embedded_integer() % right_obj.get_embedded_integer())
        self._install_instance_primitive(Primitive("%", self._universe, _mod))

        def _and(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left      = frame.pop()

            # Check second parameter type:
            if isinstance(right_obj, BigInteger):
                # Second operand was BigInteger
                self._resend_as_biginteger("&", left, right_obj)
            elif isinstance(right_obj, Double):
                self._resend_as_double("&", left, right_obj)
            else:
                # Do operation:
                right = right_obj
                result = left.get_embedded_integer() & right.get_embedded_integer()
                self._push_long_result(frame, result)
        self._install_instance_primitive(Primitive("&", self._universe, _and))

        def _equals(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left      = frame.pop()
            
            # Check second parameter type:
            if isinstance(right_obj, BigInteger):
                # Second operand was BigInteger
                self._resend_as_biginteger("=", left, right_obj)
            elif isinstance(right_obj, Integer):
                if left.get_embedded_integer() == right_obj.get_embedded_integer():
                    frame.push(self._universe.trueObject)
                else:
                    frame.push(self._universe.falseObject)
            elif isinstance(right_obj, Double):
                if left.get_embedded_integer() == right_obj.get_embedded_double():
                    frame.push(self._universe.trueObject)
                else:
                    frame.push(self._universe.falseObject)
            else:
                frame.push(self._universe.falseObject)

        self._install_instance_primitive(Primitive("=", self._universe, _equals))

        def _lessThan(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left      = frame.pop()
            
            # Check second parameter type:
            if isinstance(right_obj, BigInteger):
                # Second operand was BigInteger
                self._resend_as_biginteger("<", left, right_obj)
            elif isinstance(right_obj, Double):
                self._resend_as_double("<", left, right_obj)
            else:
                if left.get_embedded_integer() < right_obj.get_embedded_integer():
                    frame.push(self._universe.trueObject)
                else:
                    frame.push(self._universe.falseObject)
        self._install_instance_primitive(Primitive("<", self._universe, _lessThan))
        
        def _fromString(ivkbl, frame, interpreter):
            param = frame.pop()
            frame.pop()
            
            if not isinstance(param, String):
                frame.push(self._universe.nilObject)
                return
            
            int_value = int(param.get_embedded_string())
            frame.push(self._universe.new_integer(int_value))
        self._install_class_primitive(Primitive("fromString:", self._universe, _fromString))
Beispiel #18
0
    def install_primitives(self):
        def _load(ivkbl, frame, interpreter):
            argument = frame.pop()
            frame.pop()  # not required
            result = self._universe.load_class(argument)
            frame.push(result if result else self._universe.nilObject)

        self._install_instance_primitive(
            Primitive("load:", self._universe, _load))

        def _exit(ivkbl, frame, interpreter):
            error = frame.pop()
            self._universe.exit(error.get_embedded_integer())

        self._install_instance_primitive(
            Primitive("exit:", self._universe, _exit))

        def _global(ivkbl, frame, interpreter):
            argument = frame.pop()
            frame.pop()  # not required
            result = self._universe.get_global(argument)
            frame.push(result if result else self._universe.nilObject)

        self._install_instance_primitive(
            Primitive("global:", self._universe, _global))

        def _global_put(ivkbl, frame, interpreter):
            value = frame.pop()
            argument = frame.pop()
            self._universe.set_global(argument, value)

        self._install_instance_primitive(
            Primitive("global:put:", self._universe, _global_put))

        def _print_string(ivkbl, frame, interpreter):
            argument = frame.pop()
            self._universe.std_print(argument.get_embedded_string())

        self._install_instance_primitive(
            Primitive("printString:", self._universe, _print_string))

        def _print_newline(ivkbl, frame, interpreter):
            self._universe.std_println()

        self._install_instance_primitive(
            Primitive("printNewline", self._universe, _print_newline))

        def _time(ivkbl, frame, interpreter):
            frame.pop()  # ignore
            _time = time.time() - self._start_time
            frame.push(self._universe.new_integer(_time * 1000))

        self._install_instance_primitive(
            Primitive("time", self._universe, _time))

        def _ticks(ivkbl, frame, interpreter):
            frame.pop()  # ignore
            _time = time.time() - self._start_time
            frame.push(self._universe.new_integer(_time * 1000000))

        self._install_instance_primitive(
            Primitive("ticks", self._universe, _ticks))

        def _fullGC(ivkbl, frame, interpreter):
            frame.pop()
            gc.collect()
            frame.push(self._universe.trueObject)

        self._install_instance_primitive(
            Primitive("fullGC", self._universe, _fullGC))
Beispiel #19
0
 def __init__(self, num_args, universe, invoke):
     Primitive.__init__(self, self._compute_signature_string(num_args),
                        universe, invoke)
     self._number_of_arguments = num_args
Beispiel #20
0
 def __init__(self, num_args, universe, invoke):
     Primitive.__init__(self, self._compute_signature_string(num_args),
                        universe, invoke)
     self._number_of_arguments = num_args
 def assemble_primitive(self, universe):
     return Primitive.get_empty_primitive(self._signature.get_string(), universe)
Beispiel #22
0
 def install_primitives(self):
     self._install_instance_primitive(
         Primitive("holder", self._universe, _holder))
     self._install_instance_primitive(
         Primitive("signature", self._universe, _signature))
Beispiel #23
0
class StringPrimitives(Primitives):
    def install_primitives(self):
        def _concat(ivkbl, frame, interpreter):
            argument = frame.pop()
            rcvr = frame.pop()
            frame.push(
                self._universe.new_string(rcvr.get_embedded_string() +
                                          argument.get_embedded_string()))

        self._install_instance_primitive(
            Primitive("concatenate:", self._universe, _concat))

        def _asSymbol(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(self._universe.symbol_for(rcvr.get_embedded_string()))

        self._install_instance_primitive(
            Primitive("asSymbol", self._universe, _asSymbol))

        def _length(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(
                self._universe.new_integer(len(rcvr.get_embedded_string())))

        self._install_instance_primitive(
            Primitive("length", self._universe, _length))

        def _equals(ivkbl, frame, interpreter):
            op1 = frame.pop()
            op2 = frame.pop()  # rcvr
            if op1.get_class() == self._universe.stringClass:
                if op1.get_embedded_string() == op2.get_embedded_string():
                    frame.push(self._universe.trueObject)
                    return
            frame.push(self._universe.falseObject)

        self._install_instance_primitive(
            Primitive("=", self._universe, _equals))

        def _substring(ivkbl, frame, interpreter):
            end = frame.pop()
            start = frame.pop()
            rcvr = frame.pop()

            try:
                frame.push(
                    self._universe.new_string(rcvr.get_embedded_string()
                                              [start.get_embedded_integer() -
                                               1:end.get_embedded_integer()]))
            except IndexError, e:
                frame.push(
                    self._universe.new_string(
                        "Error - index out of bounds: %s" % e))

        self._install_instance_primitive(
            Primitive("primSubstringFrom:to:", self._universe, _substring))

        def _hashcode(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(
                self._universe.new_integer(hash(rcvr.get_embedded_string())))

        self._install_instance_primitive(
            Primitive("hashcode", self._universe, _hashcode))
Beispiel #24
0
    def install_primitives(self):
        def _asString(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(
                self._universe.new_string(str(rcvr.get_embedded_biginteger())))

        self._install_instance_primitive(
            Primitive("asString", self._universe, _asString))

        def _sqrt(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(
                self._universe.new_double(
                    math.sqrt(rcvr.get_embedded_biginteger())))

        self._install_instance_primitive(
            Primitive("sqrt", self._universe, _sqrt))

        def _plus(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left = frame.pop()

            # Do operation and perform conversion to Integer if required
            result = left.get_embedded_biginteger(
            ) + right_obj.get_embedded_value()
            if Integer.value_fits(result):
                frame.push(self._universe.new_integer(result))
            else:
                frame.push(self._universe.new_biginteger(result))

        self._install_instance_primitive(Primitive("+", self._universe, _plus))

        def _minus(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left = frame.pop()

            # Do operation and perform conversion to Integer if required
            result = left.get_embedded_biginteger(
            ) - right_obj.get_embedded_value()
            if Integer.value_fits(result):
                frame.push(self._universe.new_integer(result))
            else:
                frame.push(self._universe.new_biginteger(result))

        self._install_instance_primitive(Primitive("-", self._universe,
                                                   _minus))

        def _mult(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left = frame.pop()

            # Do operation and perform conversion to Integer if required
            result = left.get_embedded_biginteger(
            ) * right_obj.get_embedded_value()
            if Integer.value_fits(result):
                frame.push(self._universe.new_integer(result))
            else:
                frame.push(self._universe.new_biginteger(result))

        self._install_instance_primitive(Primitive("*", self._universe, _mult))

        def _div(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left = frame.pop()

            # Do operation and perform conversion to Integer if required
            result = left.get_embedded_biginteger(
            ) / right_obj.get_embedded_value()
            if Integer.value_fits(result):
                frame.push(self._universe.new_integer(result))
            else:
                frame.push(self._universe.new_biginteger(result))

        self._install_instance_primitive(Primitive("/", self._universe, _div))

        def _mod(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left = frame.pop()

            # Do operation:
            frame.push(
                self._universe.new_biginteger(left.get_embedded_biginteger() %
                                              right_obj.get_embedded_value()))

        self._install_instance_primitive(Primitive("%", self._universe, _mod))

        def _and(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left = frame.pop()

            # Do operation:
            frame.push(
                self._universe.new_biginteger(
                    left.get_embedded_biginteger()
                    & right_obj.get_embedded_value()))

        self._install_instance_primitive(Primitive("&", self._universe, _and))

        def _equals(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left = frame.pop()

            # Do operation:
            if left.get_embedded_biginteger() == right_obj.get_embedded_value(
            ):
                frame.push(self._universe.trueObject)
            else:
                frame.push(self._universe.falseObject)

        self._install_instance_primitive(
            Primitive("=", self._universe, _equals))

        def _lessThan(ivkbl, frame, interpreter):
            right_obj = frame.pop()
            left = frame.pop()

            # Do operation:
            if left.get_embedded_biginteger() < right_obj.get_embedded_value():
                frame.push(self._universe.trueObject)
            else:
                frame.push(self._universe.falseObject)

        self._install_instance_primitive(
            Primitive("<", self._universe, _lessThan))
Beispiel #25
0
    def install_primitives(self):
        self._install_instance_primitive(
            Primitive("==", self._universe, _equalsequals))

        self._install_instance_primitive(
            Primitive("asString", self._universe, _asString))
        self._install_instance_primitive(
            Primitive("sqrt", self._universe, _sqrt))
        self._install_instance_primitive(
            Primitive("atRandom", self._universe, _atRandom))

        self._install_instance_primitive(Primitive("+", self._universe, _plus))
        self._install_instance_primitive(Primitive("-", self._universe,
                                                   _minus))

        self._install_instance_primitive(Primitive("*", self._universe, _mult))
        self._install_instance_primitive(
            Primitive("//", self._universe, _doubleDiv))
        self._install_instance_primitive(
            Primitive("/", self._universe, _intDiv))
        self._install_instance_primitive(Primitive("%", self._universe, _mod))
        self._install_instance_primitive(
            Primitive("rem:", self._universe, _remainder))
        self._install_instance_primitive(Primitive("&", self._universe, _and))
        self._install_instance_primitive(
            Primitive("=", self._universe, _equals))
        self._install_instance_primitive(
            Primitive("<", self._universe, _lessThan))
        self._install_instance_primitive(
            Primitive("<=", self._universe, _lessThanOrEqual))
        self._install_instance_primitive(
            Primitive(">", self._universe, _greaterThan))
        self._install_instance_primitive(
            Primitive("<>", self._universe, _unequals))
        self._install_instance_primitive(
            Primitive("~=", self._universe, _unequals))

        self._install_instance_primitive(
            Primitive("<<", self._universe, _leftShift))
        self._install_instance_primitive(
            Primitive("bitXor:", self._universe, _bitXor))
        self._install_instance_primitive(
            Primitive(">>>", self._universe, _unsignedRightShift))
        self._install_instance_primitive(
            Primitive("as32BitSignedValue", self._universe,
                      _as32BitSignedValue))
        self._install_instance_primitive(
            Primitive("as32BitUnsignedValue", self._universe,
                      _as32BitUnsignedValue))

        self._install_instance_primitive(
            Primitive("max:", self._universe, _max))
        self._install_instance_primitive(Primitive("abs", self._universe,
                                                   _abs))
        self._install_instance_primitive(Primitive("to:", self._universe, _to))

        self._install_class_primitive(
            Primitive("fromString:", self._universe, _fromString))
Beispiel #26
0
    def install_primitives(self):
        def _asString(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(
                self._universe.new_string(str(rcvr.get_embedded_double())))

        self._install_instance_primitive(
            Primitive("asString", self._universe, _asString))

        def _sqrt(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(
                self._universe.new_double(math.sqrt(
                    rcvr.get_embedded_double())))

        self._install_instance_primitive(
            Primitive("sqrt", self._universe, _sqrt))

        def _plus(ivkbl, frame, interpreter):
            op1 = self._coerce_to_double(frame.pop())
            op2 = frame.pop()
            frame.push(
                self._universe.new_double(op1.get_embedded_double() +
                                          op2.get_embedded_double()))

        self._install_instance_primitive(Primitive("+", self._universe, _plus))

        def _minus(ivkbl, frame, interpreter):
            op1 = self._coerce_to_double(frame.pop())
            op2 = frame.pop()
            frame.push(
                self._universe.new_double(op2.get_embedded_double() -
                                          op1.get_embedded_double()))

        self._install_instance_primitive(Primitive("-", self._universe,
                                                   _minus))

        def _mult(ivkbl, frame, interpreter):
            op1 = self._coerce_to_double(frame.pop())
            op2 = frame.pop()
            frame.push(
                self._universe.new_double(op2.get_embedded_double() *
                                          op1.get_embedded_double()))

        self._install_instance_primitive(Primitive("*", self._universe, _mult))

        def _doubleDiv(ivkbl, frame, interpreter):
            op1 = self._coerce_to_double(frame.pop())
            op2 = frame.pop()
            frame.push(
                self._universe.new_double(op2.get_embedded_double() /
                                          op1.get_embedded_double()))

        self._install_instance_primitive(
            Primitive("//", self._universe, _doubleDiv))

        def _mod(ivkbl, frame, interpreter):
            op1 = self._coerce_to_double(frame.pop())
            op2 = frame.pop()
            frame.push(
                self._universe.new_double(op2.get_embedded_double() %
                                          op1.get_embedded_double()))

        self._install_instance_primitive(Primitive("%", self._universe, _mod))

        def _and(ivkbl, frame, interpreter):
            op1 = self._coerce_to_double(frame.pop())
            op2 = frame.pop()

            left = int(op2.get_embedded_double())
            right = int(op1.get_embedded_double())
            result = float(left & right)
            frame.push(interpreter.get_universe().new_double(result))

        self._install_instance_primitive(Primitive("&", self._universe, _and))

        def _bitXor(ivkbl, frame, interpreter):
            op1 = self._coerce_to_double(frame.pop())
            op2 = frame.pop()

            left = int(op2.get_embedded_double())
            right = int(op1.get_embedded_double())
            result = float(left ^ right)
            frame.push(interpreter.get_universe().new_double(result))

        self._install_instance_primitive(
            Primitive("bitXor:", self._universe, _bitXor))

        def _equals(ivkbl, frame, interpreter):
            op1 = self._coerce_to_double(frame.pop())
            op2 = frame.pop()
            if op1.get_embedded_double() == op2.get_embedded_double():
                frame.push(self._universe.trueObject)
            else:
                frame.push(self._universe.falseObject)

        self._install_instance_primitive(
            Primitive("=", self._universe, _equals))

        def _lessThan(ivkbl, frame, interpreter):
            op1 = self._coerce_to_double(frame.pop())
            op2 = frame.pop()
            if op2.get_embedded_double() < op1.get_embedded_double():
                frame.push(self._universe.trueObject)
            else:
                frame.push(self._universe.falseObject)

        self._install_instance_primitive(
            Primitive("<", self._universe, _lessThan))

        def _round(ivkbl, frame, interpreter):
            rcvr = frame.pop()
            frame.push(
                self._universe.new_integer(
                    int(round(rcvr.get_embedded_double()))))

        self._install_instance_primitive(
            Primitive("round", self._universe, _round))
Beispiel #27
0
    def install_primitives(self):
        self._install_instance_primitive(
            Primitive("asString", self._universe, _asString))
        self._install_instance_primitive(
            Primitive("round", self._universe, _round))
        self._install_instance_primitive(
            Primitive("sqrt", self._universe, _sqrt))
        self._install_instance_primitive(Primitive("+", self._universe, _plus))
        self._install_instance_primitive(Primitive("-", self._universe,
                                                   _minus))
        self._install_instance_primitive(Primitive("*", self._universe, _mult))
        self._install_instance_primitive(
            Primitive("//", self._universe, _doubleDiv))
        self._install_instance_primitive(Primitive("%", self._universe, _mod))
        self._install_instance_primitive(
            Primitive("=", self._universe, _equals))
        self._install_instance_primitive(
            Primitive("<", self._universe, _lessThan))
        self._install_instance_primitive(
            Primitive("<=", self._universe, _lessThanOrEqual))
        self._install_instance_primitive(
            Primitive(">", self._universe, _greaterThan))
        self._install_instance_primitive(
            Primitive("<>", self._universe, _unequals))
        self._install_instance_primitive(
            Primitive("~=", self._universe, _unequals))

        self._install_instance_primitive(
            Primitive("asInteger", self._universe, _asInteger))
        self._install_instance_primitive(Primitive("cos", self._universe,
                                                   _cos))
        self._install_instance_primitive(Primitive("sin", self._universe,
                                                   _sin))

        self._install_class_primitive(
            Primitive("PositiveInfinity", self._universe, _positive_infinity))
 def assemble_primitive(self, universe):
     return Primitive.get_empty_primitive(self._signature.get_string(),
                                          universe)
Beispiel #29
0
 def install_primitives(self):
     self._install_instance_primitive(Primitive("new",        self._universe, _new))
     self._install_instance_primitive(Primitive("name",       self._universe, _name))
     self._install_instance_primitive(Primitive("superclass", self._universe, _super_class))
     self._install_instance_primitive(Primitive("methods",    self._universe, _methods))
     self._install_instance_primitive(Primitive("fields",     self._universe, _fields))
Beispiel #30
0
    def install_primitives(self):
        self._install_instance_primitive(Primitive("asString", self._universe, _asString))
        self._install_instance_primitive(Primitive("sqrt",     self._universe, _sqrt))
        self._install_instance_primitive(Primitive("atRandom", self._universe, _atRandom))
        
        self._install_instance_primitive(Primitive("+",  self._universe, _plus))
        self._install_instance_primitive(Primitive("-",  self._universe, _minus))

        self._install_instance_primitive(Primitive("*",  self._universe, _mult))
        self._install_instance_primitive(Primitive("//", self._universe, _doubleDiv))
        self._install_instance_primitive(Primitive("/",  self._universe, _intDiv))
        self._install_instance_primitive(Primitive("%",  self._universe, _mod))
        self._install_instance_primitive(Primitive("&",  self._universe, _and))
        self._install_instance_primitive(Primitive("=",  self._universe, _equals))
        self._install_instance_primitive(Primitive("<",  self._universe, _lessThan))

        self._install_instance_primitive(Primitive("<<", self._universe, _leftShift))
        self._install_instance_primitive(Primitive("bitXor:", self._universe, _bitXor))

        self._install_instance_primitive(Primitive("to:do:", self._universe, _toDo))
        
        self._install_class_primitive(Primitive("fromString:", self._universe, _fromString))
Beispiel #31
0
 def install_primitives(self):        
     self._install_instance_primitive(Primitive("restart",
                                                self._universe, _restart))