ЙажаСценарий / Говнокод #27808 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
function test_nest_capture_of_this() {
    let deck = {
        val: 1,
        funcWithCapture: function () {
            return () => {
                return this.val;
            };
        },
    };

    let funcInst = deck.funcWithCapture();
    print(funcInst());
}

function main() {
    test_nest_capture_of_this();
    print("done.");
}

а вот мой компилятор может так говнокодить .. а ваш? (коментов не будет - сайт все блокирует) на этот раз скину дампик
https://pastebin.com/MXVLGnGM

результат работы

C:\temp\MLIR_to_exe>1.exe
1
done.

Запостил: ASD_77 ASD_77, (Updated )

Комментарии (14) RSS

    • Я не понимаю нахуя это вообще надо. Тут еще "this" какой-то еще. У меня нет никакого "this". Покажи более реальный пример. А то это можно очень легко переписать в виде
      printf("1\ndone.\n");
      Ответить
      • > у меня нет никаких "this"

        Что для ООПшника фичи языка, то сишнику просто паттерны из указателей и структур.
        Ответить
        • Надо сделать в "Си" такую фичу: специальные функции, в которых указатель на структуру передается неявным аргументом.
          Ответить
          • Ну можно как в "lua", особым синтаксисом при вызове.

            Пусть foo:->bar означает foo->bar(foo).

            Или макрос наебенить как обычно.
            Ответить
          • #include <stdio.h>
            #include <stdlib.h>
            
            #define F(a, b) typeof( a (*) b )
            
            
            typedef struct someshit
            {
              int shit;
              F(int, (struct someshit *)) getshit;
              F(void, (struct someshit *, int)) setshit;
            } someshit;
            
            int getshit(someshit *sht)
            {
              return sht->shit;
            }
            
            void setshit(someshit *sht, int a)
            {
              sht->shit = a;
            }
            
            #define GETSHIT(a) a.getshit(&a)
            #define SETSHIT(a,b) a.setshit(&a,b)
            
            int main(void)
            {
              someshit my_shit = {0, getshit, setshit};
              printf("%d\n", GETSHIT(my_shit));
              SETSHIT(my_shit, 10);
              printf("%d\n", GETSHIT(my_shit));
              return EXIT_SUCCESS;
            }

            https://wandbox.org/permlink/77NItVP2l8aI6dhE
            Ответить
            • На каждый "метод" по макросу как-то неудобно писать. Да и придётся избегать одинаковых "методов" в разных "интерфейсах".
              Ответить
    • Вот так чтоли https://wandbox.org/permlink/qyAQoYcKhvZGQjwu ?
      #include <stdio.h>
      #include <stdlib.h>
      
      #define F(a, b) typeof( a (*) b )
      
      
      void test_nest_capture_of_this()
      {
        typedef struct deck_struct
        {
          int val;
          F(int, (struct deck_struct *)) func;
        } deck_struct;
      
        int deck(struct deck_struct *str)
        {
          return str->val;
        }
        struct deck_struct funcInst =
        {
          .val = 1,
          .func = &deck
        };
        printf("%d\n", funcInst.func(&funcInst));
      }
      
      int main(void)
      {
        test_nest_capture_of_this();
        printf("done.\n");
        return EXIT_SUCCESS;
      }
      Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8