class Number: def __init__(self, x): self.val = x def __add__(self, other): return Number(self.val+other.val) class String: def __init__(self, s): self.val = s @staticmethod def fromCharCode(x): return String(chr(x.val)) def __add__(self, other): return String(self.val+other.val) def charAt(self, i=None): i = (i or Number(0)).val if 0 <= i < len(self.val): return String(self.val[i]) else: return String("") def substr(self, start=None, length=None): start = (start or Number(0)).val length = length.val if length is not None else len(self.val) if length < 0: return String("") return String(self.val[start:start+length]) def slice(self, start=None, end=None): start = (start or Number(0)).val end = end.val if end is not None else None return String(self.val[start:end]) lib = { "String": String, "document": {"write": lambda x: print(x.val)} }