[Mono-dev] [PATCH] [VBNC] Treat AscW as CInt with /novbruntimeref
Kornél Pál
kornelpal at gmail.com
Wed Sep 6 10:06:35 EDT 2006
Hi,
Thanks for your help. AscW_emit.diff contains a modified version of the
previous patch.
I tried to implement the replacement at resolving but I was unable to
succeed. AscW_resolve.diff contains my try.
Kornél
----- Original Message -----
From: "Rolf Bjarne" <rolfbasura at ya.com>
To: "Kornél Pál" <kornelpal at gmail.com>; <mono-devel-list at lists.ximian.com>
Sent: Wednesday, September 06, 2006 1:48 PM
Subject: Re: [Mono-dev] [PATCH] [VBNC] Treat AscW as CInt with
/novbruntimeref
> Hello,
>
> Commenting code inline:
>
> + If Info.Compiler.CommandLine.NoVBRuntimeRef AndAlso
> Info.Compiler.Assembly.IsDefinedHere(Method.DeclaringType) AndAlso
> Method.IsStatic AndAlso CompareNameOrdinal(Method.Name, "AscW") Then
> + Dim methodParameters() As ParameterInfo =
> Method.GetParameters()
> You might want to use Helper.GetParameters(Info.Compiler, Method), since
> this will fail if a MethodBuilder is passed in instead of a
> MethodDescriptor.
> +
> + If methodParameters.Length <> 0 AndAlso
> Helper.CompareType(methodParameters(0).ParameterType, TypeCache.Char) Then
> To compare types use Helper.CompareType(type1, type2), I have found that
> comparing type instances at the same time as using Reflection.Emit is very
> unreliable.
> + If Arguments.Count <> 0 Then
> This pushes a Char on the stack:
> + result = Arguments(0).GenerateCode(Info.Clone(True,
> False, TypeCache.Char), methodParameters(0)) AndAlso result
> Always put a 'AndAlso result' after assigning to result, this will ensure
> that a False result value earlier on won't get lost. I know there is no
> earlier assignment right now to result, but when the code changes it is
> very easy to forget this.
> + Else
> + Helper.Assert(methodParameters(0).IsOptional)
> This also pushes a Char on the stack:
> + Emitter.EmitLoadValue(Info.Clone(TypeCache.Char),
> methodParameters(0).DefaultValue)
> + End If
> If you now push an integer on the stack you'll have the char and the
> integer there. I suggest using this:
> Info.Stack.SwitchHead(TypeCache.Char, TypeCache.Integer)
> + Info.Stack.Push(TypeCache.Integer)
> +
> + Return result
> + End If
> + End If
> +
>
>> Hi,
>>
>> I added a hack to EmitArgumentsAndCallOrCallVirt to support the
>> previously
>> discussed functionality.
>>
>> I don't know how exactly the stack evaluation in vbnc works and I keep
>> getting ... reached, but stack is not empty.
> The stack evaluation is only for debug purposes and is anyway flawed, so
> you can safely ignore these warnings if the resulting assembly works.
>
>> Another missing functionality is that the return value of this replaced
>> AscW
>> should be treated as Integer regardless of the return type of the
>> replaced
>> AscW function.
> In order for this to work correctly you would have to insert the hack
> earlier on in the compiler, probably in the Resolve phase, when during
> resolution a call to AscW is detected the parse tree is modified to just
> load the char/integer value on the stack. Error checking would have to be
> bypassed since it is now allowed in VB to treat a Char value as any other
> int value (this error isn't reported now anyway though). Having in mind
> that this is a hack to support a feature of an unsupported commandline
> option your hack might be just good enough.
>
>> Kornél
>
> Rolf
>
>
> --
> Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
>
>
> --
> No virus found in this outgoing message.
> Checked by AVG Free Edition.
> Version: 7.1.405 / Virus Database: 268.11.7/438 - Release Date: 05/09/2006
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: AscW_emit.diff
Type: application/octet-stream
Size: 1837 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20060906/cab589ca/attachment.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: AscW_resolve.diff
Type: application/octet-stream
Size: 4692 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20060906/cab589ca/attachment-0001.obj
More information about the Mono-devel-list
mailing list