## Where communities thrive

• Join over 1.5M+ people
• Join over 100K+ communities
• Free without limits
• Create your own community
##### Activity
Paul M Cohen
@paul1956
I think it is for a "For i as byte = Byte.Min to Byte.Max Step anything" and I don't believe it ever worked correctly in VB when step is used especially when it is negative. But I can't point out what is broken, there was a bug report when I first started looking a Roslyn. This goes back a very long time and I have never used it.
i understand stepping in teh context of a for loop
it's how the value is incremented/decremented at the end of each pass.
what i don't undertand is hte IsBewteen method and what it does
Paul M Cohen
@paul1956
I think it was proposed to replace the For loop to handle the edge cases. While i.Inbetween(Byte.Min, Byte.Max, Step:=2) But maybe Adam had something else in mind.

I want to fairly efficiently to check if a value, is within two bounds but that range isn't continuous but has a regular stepping.
start := 0, finish := 10, stepping:= 2' Ifvalue:=2then return true. Ifvalue=7 return false.
The following works, assuming we if pass in arguments that satisfies the for loop conditions.

Function IsBetween(value as Integer, start As Integer, finish As Integer, stepping As Integer ) As Boolean
For index = start To finish Step stepping
If index = value Then Return True
Next
Return False
End Function

But it is rather inefficient, since we could check if a value is within some bounds simply using Math.Min(start, finish) <= value and value<=Math.Max(start, finish). But this doesn't take into account a stepping. My question is, "Is there an efficient way to do that?"

why do you need the for loop?
ignoring negatives for now, isn't this just seeing if the distance from start to your value is a integer multiple of your step?
so like... (value - start) % step == 0?
you're basically asking: could i step an exact number of times from start and that added to start would equal value.
@VBAndCs
I am adding new language features to small basic, such as indexing string x[0]. This one was easy as i am working on the sb vetsion that has no runtime. It just generates il code which calls the methods of the primitive class to do every thing. So i just modified the primative class to ondex the string with some more fantastic features when calling the indexer setter, like padding spaces when the index is negative or greater that the string length, and allowing setting a string with any lingth i
I am now trying to add array initializer
I did the parsing part smoothly and it allows nested {}
The code compiles fine, but of couse i don't know how to emit il code for that!
I can't use a method in the premative class because sb will not accept param array
Ineed to do it at the il level
A work arroun is to lower the initializer to many arrat cells assignment
@VBAndCs
But this will mess with the line numbers in err messages
So, il it is
Any idea where to begin reading?
It can seem daunting at first.
But it's actually super simple
And then you realize there's no magic here. Just a lot of basic opcodes that do sensible things
Cory Smith
@DualBrain
@VBAndCs
I already solved the issue and aray initializerscworks now in sb (will puplish it in minutes) :)
I totakly avoided il. I tried to deliver to the il generator only the syntax it understands
So, i loweted the code in the emit phase to avoid altering the source code text
@VBAndCs
To do that, i cteated the lowed code as a separit code, parsed and analyzed it, then added the resuling info to the original compilation,. Finally i used the same generator scope to emit il for the new parse tree of the lowered code
And since i am already in the middle of ghe emmit phase, the il for the lowered code is its right pos, and of course i don't emit anything for the original array initializer
Il spy is a grate help, since i used it to figure out what i did wrong in emmiting il.
@VBAndCs
Small basic compiler is super easy. It is not efficient for real world apps, because the primitive type is bad for business. It represens string, douple and string array, which is acually a string dictionary, that is serialised as a string and saved in the string field! The idea is brilliant, making sb easy for kids and the compiler itself is very small, but of course ghis makes the language kess efficient
I like it that way. It should always be for educational purpose.
I am just doing some enhancements to make it more enjoyable for kids.
@VBAndCs
By the way i restored next and wend to for and while loops. Endfor and endwhile are still valid, but the editor auto inserts next and wend. I hate end while in vb.net and use do loop insteed. End kills the loop. Basic is all about readability and consistency.
@VBAndCs
@VBAndCs
@VBAndCs
Small Visual Basic 1.0 is ready for preview. Please report any issues. I think it will be fun for kids and beginners. I will include some more windows controls in the release version, but now I want to make sure sVB is stable in its current state.
https://github.com/VBAndCs/sVB-Small-Visual-Basic/releases/tag/v1.0-preview

I think it was proposed to replace the For loop to handle the edge cases. While i.Inbetween(Byte.Min, Byte.Max, Step:=2) But maybe Adam had something else in mind.

I am just thinking about the clauses used in Case Statements, to see if I can extract the out in a general pattern matching syntax.

Select Case operand
Case min To max Step stepping
Case Else
End Select`

So thinking about a smarter lowering, for the step case.

i genuinely don't understand what the stepping has to do with here.
what is the use case?
start with the real world scenario where you need this. otehrwise it just seems strange and unneeded in the language
@VBAndCs
If x mod 2 = 1 andalso x >= 3 andalso x<=11
Select case x: case 3 to 11 step 2
Seems nice