Exemple #1
0
	def call(self, args, context):
		self.ensure_args_gt(args, 2)
		self.ensure_arg_type(args, 0, ast.name)
		name = args[0].name
		if context.has(name):
			raise ast.runtime_error("define: cannot redefine variable %s" % name)
		value = ast.statement_list(args[1:]).eval(context)
		context.set(name, value)
		return value
Exemple #2
0
	def ensure_arg_type(self, args, n, type):
		if not isinstance(args[n], type):
			msg = "%s: wrong type for argument %d (expected %s)" % (self.get_name(), n, type.__name__)
			raise(ast.runtime_error(msg))
Exemple #3
0
	def ensure_args_gt(self, args, n):
		if len(args) < n:
			msg = "%s: %d arguments provided, but at least %d were expected" % (self.get_name(), len(args), n)
			raise(ast.runtime_error(msg))
Exemple #4
0
	def ensure_type(self, value, type):
		if not isinstance(value, type):
			msg = "%s: wrong type for value (expected %s)" % (self.get_name(), type.__name__)
			raise(ast.runtime_error(msg))