Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. There are many gotos, but these ones are mine

There are many gotos, but these ones are mine

Scheduled Pinned Locked Moved The Lounge
49 Posts 16 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H honey the codewitch

    Sorry, I was speaking generally about dispatch function pointers. Your statement just remind me of it. Sorry I wasn't clear. I just woke up when I wrote that. :)

    Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

    G Offline
    G Offline
    giulicard
    wrote on last edited by
    #31

    No problem. I'm not a native English speaker so I always fear being misunderstood.

    1 Reply Last reply
    0
    • P Payton Byrd 2023

      Without the full code I didn't know what the logic inside of the various labelled location did, so I simply returned the current substring as a FAMatch. Your method dumps out as an FAMatch so I defaulted to that behavior. The point is that inlined local methods are going to be just as fast as gotos and the pattern matching is much more efficient.

      H Offline
      H Offline
      honey the codewitch
      wrote on last edited by
      #32

      Sure, I understand. I did say it was a DFA state machine implementation but unless you're a total FA nerd like I am that probably doesn't mean anything. :) I'm very curious about the inlined local method and pattern matching approach, particularly the IL it generates, because I don't understand how it would be faster than the IL my code produces - particularly my direct compiler which can short circuit the if tests because the comparisons are in sorted order.

      Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

      1 Reply Last reply
      0
      • J jochance

        I'm not sure why it wouldn't be pretty straightforward to [TestCase()] for each of the branching? I don't think this code is very cyclomatically complex? But yeah when you say table driven state machine I'm pretty sure that's where my head is too if you're basically talking a direct map of the case statements to data.

        H Offline
        H Offline
        honey the codewitch
        wrote on last edited by
        #33

        There is one issue with that. The compiled ones can be augmented in a way that the table driven ones cannot. For example, I wrote an embedded JSON pull parser in C++. I used compiled DFA code, and then I parsed floats, ints, and bools out of the stream *as* I was lexing, making the API both easier to use and marginally more performant because you didn't have to get the string back and then reexamine it in order to call atoi() or whatever. It was a simple little surgery on the generated code, with excellent results. I admit this isn't the most common case out there, but I have used this technique several times. Edited to add: It's also easier in practice to debug and step through a generated lexer than it is a table driven lexer. And with my Visual FA project, it produces images of directed graphs that map one to one to the labels/jump points in the code. q0: maps to the state q0 in the graph. It makes it really easy to see what it's doing, in terms of documenting it.

        Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

        1 Reply Last reply
        0
        • R Ravi Bhavnani

          Most developers know goto statements are "bad" but very few know why or have even read Dijkstra's letter in CACM.  And I'm willing to bet most developers haven't heard of the ACM. :( goto statements that target entry into a block (as you could do in older versions of Fortran and Basic) are frowned upon because they make automated program verification impossible - aka "I can't say with certainty how you got here".  Well behaved goto statements are not only fine, you couldn't write code without them. To make it harder for novice programmers to misuse the goto statement, many languages such as C, C++, Java and C# (and many others) have created statements that implement well behaved goto's.  They are:

          • break - goto the end of a switch or terminate the closest enclosing iteration statement
          • continue - start a new iteration of the closest enclosing iteration statement
          • return - exit the function in which it appears and return to the caller

          And most (I suspect all) modern compilers won't allow specifying the target of a goto into another block.  So use goto's, but use them the way nature intended. :) /ravi

          My new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com

          D Offline
          D Offline
          Daniel Will
          wrote on last edited by
          #34

          Break, continue, and return are basically goto, when translated to low level machine codes :thumbsup: Also for-loop, if-else, while-do, switch, etc. Gotos are frowned because some people used it badly. Maybe they caused infinite loop or something. Maybe they forgot to free the allocated memory. Also it shouldn't be used when your high level language provides more explanatory keywords above. The reason is obviously, for maintainability and readibility purpose.

          1 Reply Last reply
          0
          • H honey the codewitch

            I hate function pointer dispatch code in general. Because at some point you'll have to debug and maintain it, and you end up with impossible to follow pointer arrays hiding the flow of your app.

            Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

            T Offline
            T Offline
            trønderen
            wrote on last edited by
            #35

            honey the codewitch wrote:

            I hate function pointer dispatch code in general.

            Do you refuse to use delegates at all, or don't you consider those to be function pointers? (In other words: Are function pointers OK as long as they are called delegates?) No, when you have generated your code, you do not "at some time have to debug and maintain" the generated code. You debug and maintain your source, not the compilation result. Not even if you can, sort of, read it. Executable binaries can also be disassembled into "readable" code - the readability is no argument for random peek and poke. You send your code through a generator/compiler, and want to patch up the complied result ("The compiled ones can be augmented in a way that the table driven ones cannot"), or complain about the instructions generated by the compiler - I haven't heard anyone saying any such thing in earnest for a decade or two. Some people still believe that they can do smarter heap management than the standard heap manager, rejecting automated garbage collection and smart pointers, but for the most part, compilers became smarter than human coders in the last millennium. You will see a lot of function pointer dispatch code in the generated code from a plain C++ compiler. Do you hate that as well? If you accept it from a C++ compiler, why do you have problems accepting it from other compilers? (The first C++ compiler I used didn't produce binary code - it was a machine independent compiler producing K&R C to be fed into a machine specific compiler. So we had full access to the C code for patching it up before passing it on to cc. We did not. I would not do it with any generated code, whether the compiler is called C++ or Visual FA.)

            Religious freedom is the freedom to say that two plus two make five.

            H 1 Reply Last reply
            0
            • T trønderen

              honey the codewitch wrote:

              I hate function pointer dispatch code in general.

              Do you refuse to use delegates at all, or don't you consider those to be function pointers? (In other words: Are function pointers OK as long as they are called delegates?) No, when you have generated your code, you do not "at some time have to debug and maintain" the generated code. You debug and maintain your source, not the compilation result. Not even if you can, sort of, read it. Executable binaries can also be disassembled into "readable" code - the readability is no argument for random peek and poke. You send your code through a generator/compiler, and want to patch up the complied result ("The compiled ones can be augmented in a way that the table driven ones cannot"), or complain about the instructions generated by the compiler - I haven't heard anyone saying any such thing in earnest for a decade or two. Some people still believe that they can do smarter heap management than the standard heap manager, rejecting automated garbage collection and smart pointers, but for the most part, compilers became smarter than human coders in the last millennium. You will see a lot of function pointer dispatch code in the generated code from a plain C++ compiler. Do you hate that as well? If you accept it from a C++ compiler, why do you have problems accepting it from other compilers? (The first C++ compiler I used didn't produce binary code - it was a machine independent compiler producing K&R C to be fed into a machine specific compiler. So we had full access to the C code for patching it up before passing it on to cc. We did not. I would not do it with any generated code, whether the compiler is called C++ or Visual FA.)

              Religious freedom is the freedom to say that two plus two make five.

              H Offline
              H Offline
              honey the codewitch
              wrote on last edited by
              #36

              I was going to respond, but I think I answered all this in the post you responded to

              Because at some point you'll have to debug and maintain it, and you end up with impossible to follow pointer arrays hiding the flow of your app.

              Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

              T 1 Reply Last reply
              0
              • H honey the codewitch

                I was going to respond, but I think I answered all this in the post you responded to

                Because at some point you'll have to debug and maintain it, and you end up with impossible to follow pointer arrays hiding the flow of your app.

                Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                T Offline
                T Offline
                trønderen
                wrote on last edited by
                #37

                The real issue is:

                honey the codewitch wrote:

                at some point you'll have to debug and maintain it

                Does that apply to the code generated by your C, C++ or C# compiler as well? When are you going to start trusting your tools to do at least as good a job as the one you are doing yourself? I think: If you don't trust your tools to do a good enough job, throw them away and do the job yourself!

                Religious freedom is the freedom to say that two plus two make five.

                H 1 Reply Last reply
                0
                • T trønderen

                  The real issue is:

                  honey the codewitch wrote:

                  at some point you'll have to debug and maintain it

                  Does that apply to the code generated by your C, C++ or C# compiler as well? When are you going to start trusting your tools to do at least as good a job as the one you are doing yourself? I think: If you don't trust your tools to do a good enough job, throw them away and do the job yourself!

                  Religious freedom is the freedom to say that two plus two make five.

                  H Offline
                  H Offline
                  honey the codewitch
                  wrote on last edited by
                  #38

                  It does not typically apply to generated code because the maintenance of that is moved to the generated code's input specification - in other words, whatever document or resource it uses to generate the code from. THAT is what needs to be maintained. It does not apply to compiled code either, for exactly the same reason (the compiler being yet another code generator)

                  Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                  T 1 Reply Last reply
                  0
                  • H honey the codewitch

                    Gotos are frowned on. You should not use gotos. Long live gotos. Until someone comes up with a better/faster/concise way of expressing the following DFA state machine (presented in part) I will continue to defend the use of gotos, even if their use cases have gotten significantly more narrow as progress has marched on. When you need them, there is no better tool.

                    internal sealed partial class JsonStringRunner : FAStringRunner {
                    private FAMatch NextMatchImpl(string s) {
                    int ch;
                    int len;
                    int p;
                    int l;
                    int c;
                    ch = -1;
                    len = 0;
                    if ((this.position == -1)) {
                    this.position = 0;
                    }
                    p = this.position;
                    l = this.line;
                    c = this.column;
                    this.Advance(s, ref ch, ref len, true);
                    // q0:
                    // [\t-\n\r ]
                    if (((((ch >= 9)
                    && (ch <= 10))
                    || (ch == 13))
                    || (ch == 32))) {
                    this.Advance(s, ref ch, ref len, false);
                    goto q1;
                    }
                    // [\"]
                    if ((ch == 34)) {
                    this.Advance(s, ref ch, ref len, false);
                    goto q2;
                    }
                    // [,]
                    if ((ch == 44)) {
                    this.Advance(s, ref ch, ref len, false);
                    goto q9;
                    }
                    // [\-]
                    if ((ch == 45)) {
                    this.Advance(s, ref ch, ref len, false);
                    goto q10;
                    }
                    // [0]
                    if ((ch == 48)) {
                    this.Advance(s, ref ch, ref len, false);
                    goto q11;
                    }
                    // [1-9]
                    if (((ch >= 49)
                    && (ch <= 57))) {
                    this.Advance(s, ref ch, ref len, false);
                    goto q17;
                    }
                    // [\:]
                    if ((ch == 58)) {
                    this.Advance(s, ref ch, ref len, false);
                    goto q18;
                    }
                    // [\[]
                    if ((ch == 91)) {
                    this.Advance(s, ref ch, ref len, false);
                    goto q19;
                    }
                    // [\]]
                    if ((ch == 93)) {
                    this.Advance(s, ref ch, ref len, false);
                    goto q20;
                    }
                    // [f]
                    if ((ch == 102)) {
                    this.Advance(s, ref ch, ref len, false);

                    J Offline
                    J Offline
                    jschell
                    wrote on last edited by
                    #39

                    Seems likely that would be faster with an array look up versus those sequential ifs.

                    if (match[ch])
                    ...

                    honey the codewitch wrote:

                    if (((((ch >= 9) && (ch <= 10)) || (ch == 13)) || (ch == 32))) {

                    Seems unlikely that that would be better than

                    (ch == 9) || (ch == 10) || (ch == 13) || (ch == 32))

                    H 1 Reply Last reply
                    0
                    • J jschell

                      Seems likely that would be faster with an array look up versus those sequential ifs.

                      if (match[ch])
                      ...

                      honey the codewitch wrote:

                      if (((((ch >= 9) && (ch <= 10)) || (ch == 13)) || (ch == 32))) {

                      Seems unlikely that that would be better than

                      (ch == 9) || (ch == 10) || (ch == 13) || (ch == 32))

                      H Offline
                      H Offline
                      honey the codewitch
                      wrote on last edited by
                      #40

                      What's funny is my table driven code does exactly that. Sometimes I get different results depending on the lexer complexity, but for simple lexers at least the compiled versions run slightly faster. With large lexers the table method starts to outstrip it. I should note, the lexer size has nothing to do with the number of comparisons in those ifs - but rather in essense the number of ifs - really the number of goto labels.

                      Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                      1 Reply Last reply
                      0
                      • H honey the codewitch

                        It does not typically apply to generated code because the maintenance of that is moved to the generated code's input specification - in other words, whatever document or resource it uses to generate the code from. THAT is what needs to be maintained. It does not apply to compiled code either, for exactly the same reason (the compiler being yet another code generator)

                        Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                        T Offline
                        T Offline
                        trønderen
                        wrote on last edited by
                        #41

                        But if the code is generated by Visual FA rather than cc, then you will do peek and poke on the generated code. Well, that is choice. I think you are on the wrong track. In the 1980s, I worked in a company distributing OS patches as Poke instructions. I wouldn't condone that practice today.

                        Religious freedom is the freedom to say that two plus two make five.

                        H 1 Reply Last reply
                        0
                        • T trønderen

                          But if the code is generated by Visual FA rather than cc, then you will do peek and poke on the generated code. Well, that is choice. I think you are on the wrong track. In the 1980s, I worked in a company distributing OS patches as Poke instructions. I wouldn't condone that practice today.

                          Religious freedom is the freedom to say that two plus two make five.

                          H Offline
                          H Offline
                          honey the codewitch
                          wrote on last edited by
                          #42

                          then you will do peek and poke on the generated code.

                          I will? That's news to me. Hell, with VisualFA.SourceGenerator you don't even see the generated code. It's hidden by visual studio.

                          Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                          T 1 Reply Last reply
                          0
                          • H honey the codewitch

                            then you will do peek and poke on the generated code.

                            I will? That's news to me. Hell, with VisualFA.SourceGenerator you don't even see the generated code. It's hidden by visual studio.

                            Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                            T Offline
                            T Offline
                            trønderen
                            wrote on last edited by
                            #43

                            I took that from "at some point you'll have to debug and maintain it", along with your general focus on gotos being "yours" when they are generated by Visual FA - you clearly relate to the generated Visual FA code as something you have a right to (modify). If you really are as ignorant of the code generated by Visual FA as you are of the code generated by the gcc compiler, why do you post it here?

                            Religious freedom is the freedom to say that two plus two make five.

                            H 1 Reply Last reply
                            0
                            • T trønderen

                              I took that from "at some point you'll have to debug and maintain it", along with your general focus on gotos being "yours" when they are generated by Visual FA - you clearly relate to the generated Visual FA code as something you have a right to (modify). If you really are as ignorant of the code generated by Visual FA as you are of the code generated by the gcc compiler, why do you post it here?

                              Religious freedom is the freedom to say that two plus two make five.

                              H Offline
                              H Offline
                              honey the codewitch
                              wrote on last edited by
                              #44

                              Except with generated code. The input specification is what is maintained. Like I said. As long as Visual FA can produce code given an input specification, there is no need to maintain the generated code. I'm not sure how else I can put it, to be honest.

                              If you really are as ignorant of the code generated by Visual FA as you are of the code generated by the gcc compiler

                              You're reading all kinds of things into what I wrote. Don't. I didn't write that I was ignorant about the GCC compiler's generated code. You assumed that. I didn't write that I was ignorant about the code I wrote the god damned generator for, so don't assume I am. I wrote exactly what I meant, and your assumptions are leading you to argue with me about them. They're yours. Don't make them mine. In other words, it's not my job to unravel your assumptions for you, so maybe assume less about what I wrote. PS: The title of my OP a reference to a famous line in a movie called Full Metal Jacket. "There are many rifles, but this one is mine" That is the only reason I referred to the gotos as mine - that and I wrote the code generator that produces them.

                              Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                              T 1 Reply Last reply
                              0
                              • H honey the codewitch

                                Except with generated code. The input specification is what is maintained. Like I said. As long as Visual FA can produce code given an input specification, there is no need to maintain the generated code. I'm not sure how else I can put it, to be honest.

                                If you really are as ignorant of the code generated by Visual FA as you are of the code generated by the gcc compiler

                                You're reading all kinds of things into what I wrote. Don't. I didn't write that I was ignorant about the GCC compiler's generated code. You assumed that. I didn't write that I was ignorant about the code I wrote the god damned generator for, so don't assume I am. I wrote exactly what I meant, and your assumptions are leading you to argue with me about them. They're yours. Don't make them mine. In other words, it's not my job to unravel your assumptions for you, so maybe assume less about what I wrote. PS: The title of my OP a reference to a famous line in a movie called Full Metal Jacket. "There are many rifles, but this one is mine" That is the only reason I referred to the gotos as mine - that and I wrote the code generator that produces them.

                                Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                                T Offline
                                T Offline
                                trønderen
                                wrote on last edited by
                                #45

                                "As long as Visual FA can produce code given an input specification, there is no need to maintain the generated code." But you state that you do see a need to maintain the Visual FA generated code. So you do not trust your generator/compiler. Why do you base this entire thread on Visual FA generated code? Because you relate closely to it, and consider the compiled code "yours" ("There are many gotos, but these ones are mine"). If you honestly have no intention of touching the generated code (any more than you touch gcc generated relocatable code), then why do you bring up properties of the generated code? Make up your mind: Either, you are not going to maintain the code at the level generated by Visual FA, and then the use of gotos are as irrelevant (and not "yours") as a conditional or unconditional jump in binary code. OR, you think that you are more clever than the compiler, and can improve the result by random poking the generated code. If you at all intend to follow the second alternative, modifying the code generated by Visual FA, then you are in the the "Random Poke" group. If you are not, never intending to modify the compilation result, then the compiled code is not subject to discussion. And the gotos are no more "yours" than the binary jump instructions in any binary compiled module.

                                Religious freedom is the freedom to say that two plus two make five.

                                H 1 Reply Last reply
                                0
                                • T trønderen

                                  "As long as Visual FA can produce code given an input specification, there is no need to maintain the generated code." But you state that you do see a need to maintain the Visual FA generated code. So you do not trust your generator/compiler. Why do you base this entire thread on Visual FA generated code? Because you relate closely to it, and consider the compiled code "yours" ("There are many gotos, but these ones are mine"). If you honestly have no intention of touching the generated code (any more than you touch gcc generated relocatable code), then why do you bring up properties of the generated code? Make up your mind: Either, you are not going to maintain the code at the level generated by Visual FA, and then the use of gotos are as irrelevant (and not "yours") as a conditional or unconditional jump in binary code. OR, you think that you are more clever than the compiler, and can improve the result by random poking the generated code. If you at all intend to follow the second alternative, modifying the code generated by Visual FA, then you are in the the "Random Poke" group. If you are not, never intending to modify the compilation result, then the compiled code is not subject to discussion. And the gotos are no more "yours" than the binary jump instructions in any binary compiled module.

                                  Religious freedom is the freedom to say that two plus two make five.

                                  H Offline
                                  H Offline
                                  honey the codewitch
                                  wrote on last edited by
                                  #46

                                  trønderen wrote:

                                  But you state that you do see a need to maintain the Visual FA generated code. So you do not trust your generator/compiler.

                                  That would be fair, if I ever said that. However, I did not say that.

                                  Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                                  T 1 Reply Last reply
                                  0
                                  • H honey the codewitch

                                    trønderen wrote:

                                    But you state that you do see a need to maintain the Visual FA generated code. So you do not trust your generator/compiler.

                                    That would be fair, if I ever said that. However, I did not say that.

                                    Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                                    T Offline
                                    T Offline
                                    trønderen
                                    wrote on last edited by
                                    #47

                                    honey the codewitch wrote:

                                    That would be fair, if I ever said that. However, I did not say that.

                                    You only said that "the maintenance of that is moved to the generated code's input specification - in other words, whatever document or resource it uses to generate the code from. THAT is what needs to be maintained" and your subject line clearly suggests that you expect to have full control over the gotos produced by your Visual FA generator. Close your eyes for the gotos generated by your Visual FA compiler, as well as the conditional and unconditional jump instructions generated by any other compiler you use! You cannot both claim that the gotos are "your" gotos, and at the same time that you are oblivious to them!

                                    Religious freedom is the freedom to say that two plus two make five.

                                    H 2 Replies Last reply
                                    0
                                    • T trønderen

                                      honey the codewitch wrote:

                                      That would be fair, if I ever said that. However, I did not say that.

                                      You only said that "the maintenance of that is moved to the generated code's input specification - in other words, whatever document or resource it uses to generate the code from. THAT is what needs to be maintained" and your subject line clearly suggests that you expect to have full control over the gotos produced by your Visual FA generator. Close your eyes for the gotos generated by your Visual FA compiler, as well as the conditional and unconditional jump instructions generated by any other compiler you use! You cannot both claim that the gotos are "your" gotos, and at the same time that you are oblivious to them!

                                      Religious freedom is the freedom to say that two plus two make five.

                                      H Offline
                                      H Offline
                                      honey the codewitch
                                      wrote on last edited by
                                      #48

                                      It's not my fault you're fixated on the title of my post. You probably don't understand it because you never saw Full Metal Jacket, unlike most Americans here. I said that the maintenance is moved to the input spec, and the generated code NEED NOT BE MAINTAINED. I don't know why you refuse to understand that simple concept when I say it, but when you say it you seem to have no similar misunderstanding. If I didn't know better I'd think I was being trolled. :mad:

                                      Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                                      1 Reply Last reply
                                      0
                                      • T trønderen

                                        honey the codewitch wrote:

                                        That would be fair, if I ever said that. However, I did not say that.

                                        You only said that "the maintenance of that is moved to the generated code's input specification - in other words, whatever document or resource it uses to generate the code from. THAT is what needs to be maintained" and your subject line clearly suggests that you expect to have full control over the gotos produced by your Visual FA generator. Close your eyes for the gotos generated by your Visual FA compiler, as well as the conditional and unconditional jump instructions generated by any other compiler you use! You cannot both claim that the gotos are "your" gotos, and at the same time that you are oblivious to them!

                                        Religious freedom is the freedom to say that two plus two make five.

                                        H Offline
                                        H Offline
                                        honey the codewitch
                                        wrote on last edited by
                                        #49

                                        trønderen wrote:

                                        our subject line clearly suggests that you expect to have full control over the gotos produced by your Visual FA generator.

                                        Wrong. You are simply wrong. My subject line does not suggest any such thing. You assumed that. You are trying to read my mind. You suck at it, as I tried to gently imply last time you did it.

                                        Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix

                                        1 Reply Last reply
                                        0
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Categories
                                        • Recent
                                        • Tags
                                        • Popular
                                        • World
                                        • Users
                                        • Groups