It uses only objects. Each data is an object, including one object for each integer number.
+ Push pointer to '+' object. - Push pointer to '-' object. # Push pointer to number zero object. [...] Makes a new blank object containing this code, pushes onto stack. ? Push pointer to self. = Pop A,B if both point to same thing, skip to next = sign in current object code. @ Pop A. Copy object A, and execute its code. ) Pop A,B. Push value of variable called B of object A. ( Pop A,B,C. Set value of variable called B of object A to value C. $ Pop A,B. Push object called (A,B). Is blank (first time), but code is concatenation of codes A and B. / Swap top 2 of stack. : Discard top of stack. ;... If ... is a digit 0 to 9, swap top of stack with items (n) spaces down.
I think it would be Turing-Complete.. If not, post on it and see what need to be fix.