From d1fae719651fe6c631e2cae30cf44a6598e66af3 Mon Sep 17 00:00:00 2001 From: Stefan O'Rear Date: Sat, 23 Oct 2010 23:20:51 -0700 Subject: [PATCH] Implement cursor_fresh and mixin --- lib/Cursor.cs | 4 ++++ src/CgOp.pm | 1 + v6/tryfile | 8 ++++++++ 3 files changed, 13 insertions(+) diff --git a/lib/Cursor.cs b/lib/Cursor.cs index 77e32902..be34f668 100644 --- a/lib/Cursor.cs +++ b/lib/Cursor.cs @@ -407,6 +407,10 @@ public Cursor(Cursor parent, string method, int from, int to) return new Cursor(global, mo, nstate, xact, npos, null); } + public Cursor FreshClass(IP6 from) { + return new Cursor(global, from.mo, nstate, xact, pos, null); + } + public Cursor StripCaps() { return new Cursor(global, save_klass, from, pos, null); } diff --git a/src/CgOp.pm b/src/CgOp.pm index e691ab07..1038cc5e 100644 --- a/src/CgOp.pm +++ b/src/CgOp.pm @@ -214,6 +214,7 @@ use warnings; sub cursor_O { rawcall($_[0], 'O:m,Variable', $_[1]) } sub cursor_synthetic { rawnew('cursor', @_[0,1,2,3]) } sub cursor_synthcap{ rawcall($_[0], 'SynPushCapture:m,Void', @_[1,2]) } + sub cursor_fresh { rawcall($_[0], 'FreshClass:m,Cursor', $_[1]) } sub rxstripcaps { rawcall($_[0], 'StripCaps:m,Cursor') } sub fcclist_new { rawnewarr('cc', @_) } diff --git a/v6/tryfile b/v6/tryfile index 1b00143f..c868ca7d 100644 --- a/v6/tryfile +++ b/v6/tryfile @@ -1,6 +1,8 @@ # vim: ft=perl6 use MONKEY_TYPING; +#use STD; + sub infix:($a,$b) { $a > $b ?? $b !! $a } augment class Cursor { @@ -57,4 +59,10 @@ augment class Cursor { } method deb($str) { note $str } + + method cursor_fresh($k = self) { Q:CgOp { + (ns (cursor_fresh (cast cursor (@ {self})) (@ {$k}))) + } } + + method mixin($role) { self.cursor_fresh(self.WHAT but $role) } }