changeset 1716:04cafe626118

Better error reporting when an instruction is given an insufficient number of parameters
author Michael Pavone <pavone@retrodev.com>
date Wed, 30 Jan 2019 09:32:01 -0800
parents 4fd84c3efc72
children b11cfa655c61
files cpu_dsl.py
diffstat 1 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/cpu_dsl.py	Tue Jan 29 23:56:48 2019 -0800
+++ b/cpu_dsl.py	Wed Jan 30 09:32:01 2019 -0800
@@ -272,6 +272,14 @@
 		return not self.evalFun is None
 	def numArgs(self):
 		return self.evalFun.__code__.co_argcount
+	def numParams(self):
+		if self.outOp:
+			params = max(self.outOp) + 1
+		else:
+			params = 0
+		if self.evalFun:
+			params = max(params, self.numArgs())
+		return params
 	def generate(self, otype, prog, params, rawParams, flagUpdates):
 		if self.impls[otype].__code__.co_argcount == 2:
 			return self.impls[otype](prog, params)
@@ -586,6 +594,8 @@
 			#TODO: Disassembler
 			pass
 		elif not opDef is None:
+			if opDef.numParams() > len(procParams):
+				raise Exception('Insufficient params for ' + self.op + ' (' + ', '.join(self.params) + ')')
 			if opDef.canEval() and allParamsConst:
 				#do constant folding
 				if opDef.numArgs() >= len(procParams):