New/newobj is a primitive operation that is hardwired into many parts of
the system. It is not just another function. Simplification of the
solution to your problem will likely come from tagging the existing
New/newobj to use your allocator instead of implementing the entire
parallel New/newobj world.

Here are more details about the attribute and method ideas that I have
mentioned below:
 
- If all instances of certain classes are supposed to be allocated by
your allocator, you can use custom attribute to mark them as such. Or
you can use custom attribute to say that all instances of given class in
an assembly should be allocated using your allocator. The JIT would
consult the custom attribute every time it jitted a newobj instruction
and call the appropriate internal implementation of new.

- Instead of introducing a new "new" operator, you can introduce a
helper function to wrap existing calls to "new" operator like:
mycustomallocator(new Object()). Then the JIT can look for newobj
immediately followed by call to your helper function and convert these
sequences to use the custom allocator. There is a problem that
mycustomallocator would always return object, and you would need to cast
in the pattern as well. You can overcome it if you use generics: static
T mycustomallocator<T>(T o) 


-Jan

-----Original Message-----
From: Discussion of the Rotor Shared Source CLI implementation
[mailto:[EMAIL PROTECTED] On Behalf Of Archana
Sent: Tuesday, August 24, 2004 4:26 AM
To: [EMAIL PROTECTED]
Subject: Re: [DOTNET-ROTOR] adding a new alloc function

Hi,
 Thanks for such a prompt response. the solution sounds kind of
complicated.
well,actually i just want a function that can allocate memory, like
new that i can call in a C# program.
Isnt there any other way to do it. say as pointed
out by you in the first option- if i want to have a method instead of
another instruction, what would the changes involve. it might be a lot
simpler than this?

Regards
archana

 On Mon, 23 Aug 2004, Jan Kotas wrote:

> If you want to expose this feature in C# and seemingly integrate into
> IL, then it involves:
>
> - Carefully design the whole thing: Do you really need a new
> instruction? Won't be attribute or method enough? If it needs to be a
> new instruction, should it be a standalone instruction or prefix? Etc.
>
> - Add support for the new instruction in the CLR: google for "adding
> instruction in Rotor" to find tutorial on how to do that.
>
> - Modify the C# compiler to accept the new keyword. Look for the
> dataflow for the existing new operator (NK_NEW, TID_NEW, CEE_NEWOBJ,
> EXF_NEWOBJCALL and bindNew) and modify the codepaths appropriately
> depending on what your instruction does exactly.
>
> -Jan
>
> -----Original Message-----
> From: Discussion of the Rotor Shared Source CLI implementation
> [mailto:[EMAIL PROTECTED] On Behalf Of Archana
> Sent: Monday, August 23, 2004 9:49 PM
> To: [EMAIL PROTECTED]
> Subject: [DOTNET-ROTOR] adding a new alloc function
>
> Hi,
>  incase one needs to add a new alloc function apart from getting
memory
> using the operator new, what are the changes involved in doing so.
what
> all files in Rotor need to change etc..
> eg:  x=new object(), x = new1 object();
> Thanks,
> archana
>

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com
ASP.NET courses you may be interested in:

Guerrilla ASP.NET
15 March 2004, in Boston, MA
17 May 2004 in Torrance, CA
7 June 2004, London, UK

http://www.develop.com/courses/gaspdotnetls

View archives and manage your subscription(s) at
http://discuss.develop.com

===================================
This list is hosted by DevelopMentorŪ  http://www.develop.com
ASP.NET courses you may be interested in:

Guerrilla ASP.NET
15 March 2004, in Boston, MA
17 May 2004 in Torrance, CA
7 June 2004, London, UK

http://www.develop.com/courses/gaspdotnetls

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to