Comments (5)
I can confirm this bug. Test suite oddly missed it. Will fix it tomorrow.
On Jun 1, 2016 3:22 AM, "Jonathan Van der Cruysse" [email protected]
wrote:
I think I encountered an EC# parser bug while I was implementing abstract/
virtual/sealed/override/new in ecsc. It's definitely not a deal-breaker
bug, but it is somewhat annoying.This file
public abstract class Base
{
public Base() { }
public virtual int g()
{
return 2;
}
}
public class Derived : Base
{
public Derived() { }
public new int g()
{
return 3;
}
}is parsed as:
@[#public, #abstract] #class(Base, #(), {
@[#public] #cons(@, Base, #(), { }); @[#public, #virtual] #fn(#int32, g, #(), { #return(2); }); }); @[#public] #class(Derived, #(Base), { @[#public] #cons(@
, Derived, #(), {
});
@[#public] #fn(#int32, g, #(), {
#return(3);
});
});The new attribute seems to be gone. This does not modify the program's
behavior, but the missing attribute causes ecsc to report the warning
below, despite the fact that g is clearly marked new.Overrides.cs:15:20: warning: member hiding: method 'g' hides a base method. Consider using the 'new' keyword if hiding was intentional. [-Whidden-member]
public new int g() ^
remark: hidden method: Overrides.cs:6:24
public virtual int g() ^
I'm assuming that this is the parser's fault.
I don't have much time on my hands at the moment - and this bug is not top
priority for me right now - but I wouldn't mind taking a stab at fixing
this when I have some spare time.Anyway, can you by any chance reproduce this bug?
Thanks in advance.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
#36, or mute the thread
https://github.com/notifications/unsubscribe/AAr_TYrlGCmUkbfqZ5BHvCQ4e1XLD62Eks5qHIqPgaJpZM4Iq3jC
.
from ecsharp.
That's awesome. Thanks!
BTW, I also discovered that the new
attribute seems to remove trailing attributes, as well. So
public new virtual int g()
{
return 3;
}
is parsed as
@[#public] #fn(#int32, g, #(), {
#return(3);
});
But this:
public virtual new int g()
{
return 3;
}
is parsed as
@[#public, #virtual] #fn(#int32, g, #(), {
#return(3);
});
Maybe that warrants a test of its own.
from ecsharp.
Yeah, I noticed that too, and I'll be adding a fairly large series of
tests. Parsing new
and word attributes in a recursive-descent parser is
much harder than it looks and since I wrote my own code for it (taking over
from LLLPG) I've fixed a long series of bugs already.
On Fri, Jun 3, 2016 at 3:36 AM, Jonathan Van der Cruysse <
[email protected]> wrote:
That's awesome. Thanks!
BTW, I also discovered that the new attribute seems to remove trailing
attributes, as well. Sopublic new virtual int g()
{
return 3;
}is parsed as
@[#public] #fn(#int32, g, #(), {
#return(3);
});But this:
public virtual new int g()
{
return 3;
}is parsed as
@[#public, #virtual] #fn(#int32, g, #(), {
#return(3);
});Maybe that warrants a test of its own.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#36 (comment), or mute
the thread
https://github.com/notifications/unsubscribe/AAr_TaziMydfwC_7gAMEY_G6Z_N2P_Gmks5qHzDQgaJpZM4Iq3jC
.
- David
http://qism.blogspot.com
from ecsharp.
OK please pull, should be fixed (source only).
On Fri, Jun 3, 2016 at 7:48 AM, David Piepgrass [email protected]
wrote:
Yeah, I noticed that too, and I'll be adding a fairly large series of
tests. Parsingnew
and word attributes in a recursive-descent parser is
much harder than it looks and since I wrote my own code for it (taking over
from LLLPG) I've fixed a long series of bugs already.On Fri, Jun 3, 2016 at 3:36 AM, Jonathan Van der Cruysse <
[email protected]> wrote:That's awesome. Thanks!
BTW, I also discovered that the new attribute seems to remove trailing
attributes, as well. Sopublic new virtual int g()
{
return 3;
}is parsed as
@[#public] #fn(#int32, g, #(), {
#return(3);
});But this:
public virtual new int g()
{
return 3;
}is parsed as
@[#public, #virtual] #fn(#int32, g, #(), {
#return(3);
});Maybe that warrants a test of its own.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#36 (comment),
or mute the thread
https://github.com/notifications/unsubscribe/AAr_TaziMydfwC_7gAMEY_G6Z_N2P_Gmks5qHzDQgaJpZM4Iq3jC
.
- David
http://qism.blogspot.com
- David
http://qism.blogspot.com
from ecsharp.
I pulled and ran the tests. EcsParserTests.KeywordAttributes
covers my use case, and it passes!
Thanks for fixing this bug!
I'll close this issue now, and include the patched version of Loyc.Ecs in the ecsc
repo as soon as possible.
from ecsharp.
Related Issues (20)
- Base compileTime on dotnet-script CLI tool instead of Roslyn scripting HOT 11
- Support F#ish object expression or Java#ish anonymous clases HOT 2
- Add `define` macro with first argument treated as `this` to enable chaining HOT 29
- Comments before multi-using statements are erased HOT 4
- await fluent operator HOT 1
- Error when transforming the `typeof(X<>)` construct HOT 2
- The error Semicolon': expected Colon for the specific code HOT 2
- Support C# 9 pattern matching HOT 3
- Ref locals cannot have parentheses
- EC#: Syntax error in `Foo<T?>`
- Qualified names of identifier macros not working?
- 'with' or quick binding operator bug HOT 1
- EC#: [return: ...] attribute sometimes causes IndexOutOfRangeException in InternalList
- EC#: `#pragma warning` is not propagated to output file
- EC#: Add support for suffix `!` operator
- EC#: New `?>` operator causes parser errors in code like `X<T?>` HOT 1
- Lemp integration - custom macro is not been called
- Lemp - Match only on attribute name
- Add Deconstruct Method To All LNode types to use c# pattern matching
- FPL Abs bug HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ecsharp.