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))
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
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))
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))
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))
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))
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))
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))
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))
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))
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))
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))
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)
def install_primitives(self): self._install_instance_primitive( Primitive("holder", self._universe, _holder)) self._install_instance_primitive( Primitive("signature", self._universe, _signature))
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))
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))
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))
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))
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 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))
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))
def install_primitives(self): self._install_instance_primitive(Primitive("restart", self._universe, _restart))