def setAtIndex(self, ctx: ParserRuleContext, indexes: list, val: SiliconValue, newVal: SiliconValue): if not val.isList(): raise Exception('setAtIndex Exception' + ctx.getText()) for i in range(len(indexes) - 1): idx = self.visit(indexes[i]) if not idx.isNumber: raise Exception('setAtIndex Exception: Not a number' + ctx.getText()) val = val.asList()[int(idx.asDouble())] idx = self.visit(indexes[len(indexes) - 1]) if not idx.isNumber(): raise Exception('setAtIndex Exception: Not a number ' + ctx.getText()) val.asList()[int(idx.asDouble())] = newVal
def resolveIndexes(self, val, indexes): for ec in indexes: idx = self.visit(ec) if not idx.isNumber() or (not val.isList() and not val.isString()): raise Exception("resolveIndexes Exception") i = idx.asDouble().intValue() if val.isString(): val = SiliconValue(val.asString()[i, i + 1]) else: val = val.asList()[i] return val