[pypy-commit] extradoc extradoc: Add the demos, for what they are worth.
arigo
noreply at buildbot.pypy.org
Tue Feb 11 21:51:45 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: extradoc
Changeset: r5154:7029195255d7
Date: 2014-02-11 21:51 +0100
http://bitbucket.org/pypy/extradoc/changeset/7029195255d7/
Log: Add the demos, for what they are worth.
diff --git a/talk/stanford-ee380-2011/demo-jit.py b/talk/stanford-ee380-2011/demo-jit.py
new file mode 100644
--- /dev/null
+++ b/talk/stanford-ee380-2011/demo-jit.py
@@ -0,0 +1,87 @@
+import sys
+from pypy.rlib import jit
+
+
+class Object:
+ pass
+
+
+class Integer(Object):
+
+ def __init__(self, value):
+ self.value = value
+
+ def next(self):
+ return Integer(self.value + 1)
+
+ def small(self):
+ return self.value < 1000000
+
+ def as_str(self):
+ return str(self.value)
+
+
+class String(Object):
+
+ def __init__(self, str):
+ self.str = str
+
+ def next(self):
+ return String(self.str + "x")
+
+ def small(self):
+ return len(self.str) < 50
+
+ def as_str(self):
+ return self.str
+
+
+jitdriver = jit.JitDriver(greens=['pc', 'bytecode'], reds=['input'])
+
+
+def interpret(bytecode, input):
+ pc = 0
+ while True:
+ jitdriver.jit_merge_point(bytecode=bytecode, input=input, pc=pc)
+
+ nextop = bytecode[pc]
+ pc += 1
+
+ if nextop == 'n':
+ input = input.next()
+
+ elif nextop == 'l':
+ if input.small():
+ pc = 0
+ else:
+ return input.as_str()
+
+
+# ____________________________________________________________
+
+
+if __name__ == '__main__':
+ print interpret("nl", String("x"))
+ print interpret("nl", Integer(1))
+ sys.exit()
+
+
+# ____________________________________________________________
+
+
+def main(argv):
+ num = int(argv[2])
+ print interpret(argv[1], Integer(num))
+ return 0
+
+def target(*args):
+ return main, None
+
+
+# ____________________________________________________________
+
+
+from pypy.jit.codewriter.policy import JitPolicy
+
+def jitpolicy(driver):
+ return JitPolicy()
diff --git a/talk/stanford-ee380-2011/demo1 b/talk/stanford-ee380-2011/demo1
new file mode 100644
--- /dev/null
+++ b/talk/stanford-ee380-2011/demo1
@@ -0,0 +1,8 @@
+
+
+>>>> for i in range(10):
+.... print i**2
+
+
+>>>> x = 5
+Ctrl-C
diff --git a/talk/stanford-ee380-2011/demo2.py b/talk/stanford-ee380-2011/demo2.py
new file mode 100644
--- /dev/null
+++ b/talk/stanford-ee380-2011/demo2.py
@@ -0,0 +1,27 @@
+
+
+class Foo(object):
+
+ def __init__(self, value):
+ self.value = value
+
+ def double(self):
+ return Foo(self.value * 2)
+
+
+def main(argv):
+ if len(argv) <= 1:
+ n = 22
+ else:
+ n = int(argv[1])
+
+ lst = [Foo(i) for i in range(n)]
+
+ print lst[-1].double().value
+ return 0
+
+
+# ____________________________________________________________
+
+def target(*args):
+ return main, None
More information about the pypy-commit
mailing list