Guest User

Untitled

a guest
Jun 22nd, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.98 KB | None | 0 0
  1. ## Old
  2. namespace Renraku.Compiler
  3.  
  4. import Boo.Lang.PatternMatching
  5.  
  6. static class Intrinsics:
  7. def Apply(assembly as duck) as duck:
  8. return Transform.BlockInstructions(assembly, Instruction)
  9.  
  10. def Instruction(inst as duck) as duck:
  11. match inst[0]:
  12. case 'new':
  13. func = inst[1]
  14. if func.DeclaringType.Namespace == 'Renraku.Core.Memory' and func.DeclaringType.Name == 'Pointer`1':
  15. yield ['conv', false, uint]
  16. else:
  17. yield inst
  18. case 'callvirt':
  19. func = inst[1]
  20. if func.DeclaringType.Namespace == 'Renraku.Core.Memory' and func.DeclaringType.Name == 'Pointer`1' and func.Name == 'set_Item':
  21. yield ['popderef', func.DeclaringType.GenericArguments[0]]
  22. else:
  23. yield inst
  24. otherwise:
  25. yield inst
  26.  
  27. ##New
  28. namespace Renraku.Compiler
  29.  
  30. intrinsic 'Renraku.Core.Memory.Pointer[]::.ctor', PointerConstructor(T):
  31. yield ['conv', false, uint]
  32.  
  33. intrinsic 'Renraku.Core.Memory.Pointer[]::set_Item', PointerSet(T):
  34. yield ['popderef', T]
Add Comment
Please, Sign In to add comment